Користувальницькькі налаштування

Налаштування сайту


mailserver

MTA

Postfix

В отлиие от sendmail, Postfix умеет хранить входящую почту в папках формата Maildir. Это может быть полезным для установки веб-интерфейса к почтовому серверу без вспомогательного IMAP-сервера.

http://www.postfix.org/features.html

Ограничение скорости отправки писем

Антиспам-системы многих сервисов проводят контроль скорости отправки электронной почты. Поэтому когда Postfix отправляет письма “слишком быстро”, его могут заблокировать из-за подозрения в рассылке спама. Чтобы этого избежать, нужно установить следующие ограничения в файле настроек

'/etc/postfix/main.cf'
...
#default_destination_concurrency_limit=2
#default_destination_rate_delay=1m
#default_destination_concurrency_limit=2
#mlmmj_destination_rate_delay=0s
smtp_destination_concurrency_limit=2
smtp_destination_rate_delay=10m

Просмотр и очистка очереди

sudo postqueue -p
sudo postsuper -d 95E0AA21E68

где 95E0AA21E68 – это уникальный номер письма в очереди (показывается командой postqueue -p)

Для удаления всех писем в очереди можно задать команду:

sudo postsuper -d ALL

Для удаления только отложенных писем из очереди:

sudo postsuper -d  ALL deferred

Самодельный транспорт

В файле конфигурации Postfix /etc/postfix/master.cf перечислен список и параметры так называемых “транспортов” для сообщений разного типа. В этот список можно добавить и свой собственный транспорт. Рассмотрим на примере обычного bash-скрипта, который будет изменять заголовок письма From:.

Сначала нужно указать Postfix расположение файла, в котором будут перечислены наши транспорты. Это указывается в файле /etc/postfix/main.cf1):

"/etc/postfix/main.cf"
transport_maps = hash:/home/user/mytransports

Теперь нужно создать собственно сам файл с перечислением наших дополнительных транспортов. Его формат выглядит примерно так:

"/home/user/mytransports"
abonent1@server.com    transport1:parameter1
abonent2@server.com    transport1:parameter2
abonent3@server.com    transport2:parameter1
abonent4@server.com    discard
abonent5@server.com    transport1:parameter1

В этом файле указываетя, каким из транспортов доставлять письма, ПРИшедшие на тот или иной адрес нашего сервера. transport1 и transport2 здесь просто названия наших транспортов. Они могут быть любые, и цифры в них совсем не обязательны. parameter1 и parameter2 – это параметры, которые будут переданы нашему транспорту в виде аргумента. Как видно, они могут быть одинаковыми или разными для разных адресов – в зависимости от задачи. discard здесь – один из встроенных транспортов Postfix, который попросту выбрасывает письмо и делает вид, что успешно его доставил. Т.е. все письма, приходящие в такой конфигурации на адрес abonent4@server.com будут молча удаляться.

После создания или изменения этого файла, необходимо сконвертировать его в формат базы данных, которую сможет читать Postfix:

postmap mytransports

При этом появится (или обновится, если уже был) файл mytransports.db.

Теперь, когда мы придумали название транспорта и указали, какие письма через него нужно проводить, нужно описать этот транспорт в файле /etc/postfix/master.cf:

"/etc/postfix/master.cf"
transport1    unix    -    n    n    -    -    pipe 
    flags=ORhu user=myuser argv=/home/user/from-filter1.sh $nexthop
 
transport2    unix    -    n    n    -    -    pipe 
    flags=ORhu user=myuser argv=/home/user/from-filter2.sh $nexthop

Здесь названия транспортов transport1 и transport2 должны точно совпадать с теми, которые мы описали в файле транспортов /home/user/mytransports, имя пользователя myuser – это системный пользователь, от имени которого будет запущен скрипт /home/user/from-filter1.sh. Переменная nexthop хранит значение того параметра, который мы указывали в нашем файле транспортов (parameter1, parameter2 и т.п.). Поскольку тип транспорта здесь указан как pipe, письмо будет передано нашему скрипту в стандартный ввод. И обрабатывать его в теле скрипта нужно с учётом этого.

Пример такого скрипта, который заменяет поле From: приведён ниже:

"/home/user/from-filter1.sh"
#!/bin/bash
 
NEXTHOP=$@
 
TEMPFILE=`tempfile`
 
# Если передан параметр "parameter1"
# (что соответствует в нашем примере письмам, пришедшним НА адреса
# abonent1@server.com и abonent5@server.com
if [ $NEXTHOP == "parameter1" ]
then
    while IFS= read -r LINE;
    do
        if [[ $LINE == From:* ]]
        then
            # Заменим строку отправителя так, чтобы его адрес был <parameter1@server.com>
            printf '%s\n' "$LINE" | sed -e 's/"//g' | sed -e 's/^From: \(.*\)/From: "\1" <parameter1@server.com>/' >> ${TEMPFILE}
        else
            printf '%s\n' "$LINE" >> ${TEMPFILE}
        fi
    done
 
 
 
# Если передан параметр "parameter2"
# (что соответствует в нашем примере письмам, пришедшним НА адрес
# abonent2@server.com
elif [ $NEXTHOP == "parameter2" ]
then
    while IFS= read -r LINE;
    do
        if [[ $LINE == From:* ]]
        then
            # Заменим строку отправителя так, чтобы его адрес был <parameter2@server.com>
            printf '%s\n' "$LINE" | sed -e 's/"//g' | sed -e 's/^From: \(.*\)/From: "\1" <parameter2@server.com>/' >> ${TEMPFILE}
        else
            printf '%s\n' "$LINE" >> ${TEMPFILE}
        fi
    done
 
 
# Во всех остальных случаях просто скопируем письмо без изменений во временный файл
else
    cat - > ${TEMPFILE}
fi
 
# Здесь любое действие с полученным и обработанным письмом
# Например, передача его в один из списков рассылки mlmmj:
cat ${TEMPFILE} | /usr/bin/mlmmj-receive -F -L /var/spool/mlmmj/$NEXTHOP
 
rm ${TEMPFILE}

Разумеется, права на запуск этого скрипта должны быть у системного пользователя myuser, которого мы указали в файле /etc/postfix/master.cf выше.

После всех этих манипуляций с транспортами, нужно перезагрузить конфигурацию Postfix:

sudo /etc/init.d/postfix reload

Фильтрация спама

Для осуществления фильтрации почты можно установить программу Maildrop.

Фильтры этой программы настраиваются в файле /etc/courier/maildroprc. Например:

"/etc/courier/maildroprc"
if (/^X-Spam-Status:.*YES.*/)
{
  exception {
    to "Maildir/.SPAM/"
  }
}

Такой фильтр будет доставлять все письма, в заголовке которых поле X-Spam-Status: содержит слово “YES”, в подпапку SPAM в почтовом каталоге пользователя. Такой заголовок письма может выставлять какая-либо служба проверки почты. Например, SpamAssassin.

Для того, чтобы почтовый сервер Postfix пропускал все письма через фильтры Maildrop, нужно внести следующие изменения в конфигурацию Postfix2):

"/etc/postfix/main.cf"
    maildrop_destination_recipient_limit = 1
    virtual_mailbox_domains = some.domain someother.domain
    virtual_transport = maildrop
    virtual_mailbox_maps = hash:/etc/postfix/virtual_mailbox
    virtual_alias_maps = hash:/etc/postfix/virtual_alias
"/etc/postfix/virtual_mailbox"
    user1@some.domain        ...text here does not matter...
    user2@some.domain        ...text here does not matter...
    user3@someother.domain   ...text here does not matter...
"/etc/postfix/virtual_alias"
    postmaster@some.domain           postmaster
    postmaster@someother.domain      postmaster
"/etc/postfix/master.cf"
maildrop  unix  -       n       n       -       -       pipe
      flags=ODRhu user=vmail argv=/path/to/maildrop -d ${recipient}

Если же требуется всего лишь фильтрация писем, доставляемых в папки локальных пользователей (у которых есть учётная запись в операционной системе), можно не изменять конфигурации Postfix, а просто записать в файл ~/.forward такую строку (включая кавычки!):

"~/.forward"
"|/usr/bin/maildrop -d ${USER}"

SpamAssassin

Установка

В Debian GNU/Linux нужно установить пакеты spamassassin и spamc.

Настройка

Чтобы письма, доставляемые в папки локальных пользователей дополнительно проходили проверку службой SpamAssassin, файл ~/.forward должен иметь следующее содержание:

"~/.forward"
"|/usr/bin/spamc|/usr/bin/maildrop -d ${USER}"

Фильтр исходящей почты

IMAP

Web-интерфейс

SqWebmail

http://www.courier-mta.org/sqwebmail/

https://lists.debian.org/debian-user/2002/11/msg03898.html

cd /srv/www/cgi-bin/
ln -s /usr/lib/cgi-bin/sqwebmail
cd /srv/www
ln -s /usr/share/sqwebmail

SPF

Ссылки

Greylisting

mailserver.txt · В останнє змінено: 2017/06/11 17:53 by wombat