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

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


mailserver

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Both sides previous revision Попередня ревізія
mailserver [2016/11/19 09:48]
wombat Самодельный транспорт
mailserver [2017/06/11 17:53] (поточний)
wombat Фильтр исходящей почты
Рядок 1: Рядок 1:
 +====== MTA ======
 +
 +===== Postfix =====
 +
 +В отлиие от sendmail, Postfix умеет хранить входящую почту в папках формата [[https://​en.wikipedia.org/​wiki/​Maildir | Maildir]]. Это может быть полезным для установки [[mailserver#​sqwebmail|веб-интерфейса]] к почтовому серверу без вспомогательного IMAP-сервера.
 +
 +http://​www.postfix.org/​features.html
 +
 +=== Ограничение скорости отправки писем ===
 +
 +Антиспам-системы многих сервисов проводят контроль скорости отправки электронной почты. Поэтому когда Postfix отправляет письма "​слишком быстро",​ его могут заблокировать из-за подозрения в рассылке спама. Чтобы этого избежать,​ нужно установить следующие ограничения в файле настроек
 +
 +<file cf '/​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
 +</​file>​
 +
 +=== Просмотр и очистка очереди ===
 +
 +  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.cf''​((http://​www.postfix.org/​postconf.5.html#​transport_maps)):​
 +
 +<file bash "/​etc/​postfix/​main.cf">​
 +transport_maps = hash:/​home/​user/​mytransports
 +</​file>​
 +
 +Теперь нужно создать собственно сам файл с перечислением наших дополнительных транспортов. Его формат выглядит примерно так:
 +
 +<file ''​ "/​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
 +</​file>​
 +
 +В этом файле указываетя,​ каким из транспортов доставлять письма,​ **ПРИ**шедшие на тот или иной адрес нашего сервера. ''​transport1''​ и ''​transport2''​ здесь просто названия наших транспортов. Они могут быть любые, и цифры в них совсем не обязательны. ''​parameter1''​ и ''​parameter2''​ -- это параметры,​ которые будут переданы нашему транспорту в виде аргумента. Как видно, они могут быть одинаковыми или разными для разных адресов -- в зависимости от задачи. ''​discard''​ здесь -- один из встроенных транспортов Postfix, который попросту выбрасывает письмо и делает вид, что успешно его доставил. Т.е. все письма,​ приходящие в такой конфигурации на адрес ''​abonent4@server.com''​ будут молча удаляться.
 +
 +После создания или изменения этого файла, необходимо сконвертировать его в формат базы данных,​ которую сможет читать Postfix:
 +
 +  postmap mytransports
 +
 +При этом появится (или обновится,​ если уже был) файл ''​mytransports.db''​.
 +
 +Теперь,​ когда мы придумали название транспорта и указали,​ какие письма через него нужно проводить,​ нужно описать этот транспорт в файле ''/​etc/​postfix/​master.cf'':​
 +
 +<file bash "/​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
 +</​file>​
 +
 +Здесь названия транспортов ''​transport1''​ и ''​transport2''​ должны точно совпадать с теми, которые мы описали в файле транспортов ''/​home/​user/​mytransports'',​ имя пользователя ''​myuser''​ -- это системный пользователь,​ от имени которого будет запущен скрипт ''/​home/​user/​from-filter1.sh''​. Переменная ''​nexthop''​ хранит значение того параметра,​ который мы указывали в нашем файле транспортов (''​parameter1'',​ ''​parameter2''​ и т.п.). Поскольку тип транспорта здесь указан как ''​pipe'',​ письмо будет передано нашему скрипту в стандартный ввод. И обрабатывать его в теле скрипта нужно с учётом этого.
 +
 +Пример такого скрипта,​ который заменяет поле ''​From:''​ приведён ниже:
 +
 +<file bash "/​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}
 +</​file>​
 +
 +Разумеется,​ права на запуск этого скрипта должны быть у системного пользователя ''​myuser'',​ которого мы указали в файле ''/​etc/​postfix/​master.cf''​ выше.
 +
 +После всех этих манипуляций с транспортами,​ нужно перезагрузить конфигурацию Postfix:
 +
 +  sudo /​etc/​init.d/​postfix reload
 +
 +
 +
 +====== Фильтрация спама ======
 +
 +Для осуществления фильтрации почты можно установить программу [[http://​www.courier-mta.org/​maildrop/​ | Maildrop]].
 +
 +Фильтры этой программы настраиваются в файле ''/​etc/​courier/​maildroprc''​. Например:​
 +
 +<file bash "/​etc/​courier/​maildroprc">​
 +if (/​^X-Spam-Status:​.*YES.*/​)
 +{
 +  exception {
 +    to "​Maildir/​.SPAM/"​
 +  }
 +}
 +</​file>​
 +
 +Такой фильтр будет доставлять все письма,​ в заголовке которых поле ''​X-Spam-Status:''​ содержит слово "''​YES''",​ в подпапку ''​SPAM''​ в почтовом каталоге пользователя. Такой заголовок письма может выставлять какая-либо служба проверки почты. Например,​ [[https://​spamassassin.apache.org/​|SpamAssassin]].
 +
 +Для того, чтобы почтовый сервер Postfix пропускал все письма через фильтры Maildrop, нужно внести следующие изменения в конфигурацию Postfix((http://​www.postfix.org/​MAILDROP_README.html)):​
 +
 +<file bash "/​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
 +</​file>​
 +
 +<file bash "/​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...
 +</​file>​
 +
 +<file bash "/​etc/​postfix/​virtual_alias">​
 +    postmaster@some.domain ​          ​postmaster
 +    postmaster@someother.domain ​     postmaster
 +</​file>​
 +
 +<file bash "/​etc/​postfix/​master.cf">​
 +maildrop ​ unix  -       ​n ​      ​n ​      ​- ​      ​- ​      pipe
 +      flags=ODRhu user=vmail argv=/​path/​to/​maildrop -d ${recipient}
 +</​file>​
 +
 +Если же требуется всего лишь фильтрация писем, доставляемых в папки локальных пользователей (у которых есть учётная запись в операционной системе),​ можно не изменять конфигурации Postfix, а просто записать в файл ''​~/​.forward''​ такую строку (включая кавычки!):​
 +
 +<file bash "​~/​.forward">​
 +"​|/​usr/​bin/​maildrop -d ${USER}"​
 +</​file>​
 +
 +
 +=== SpamAssassin ===
 +
 +== Установка ==
 +
 +В Debian GNU/Linux нужно установить пакеты [[https://​packages.debian.org/​stable/​mail/​spamassassin | spamassassin]] и [[https://​packages.debian.org/​stable/​mail/​spamc | spamc]].
 +
 +== Настройка ==
 +
 +Чтобы письма,​ доставляемые в папки локальных пользователей дополнительно проходили проверку службой SpamAssassin,​ файл ''​~/​.forward''​ должен иметь следующее содержание:​
 +
 +<file bash "​~/​.forward">​
 +"​|/​usr/​bin/​spamc|/​usr/​bin/​maildrop -d ${USER}"​
 +</​file>​
 +
 +
 +====== Фильтр исходящей почты ======
 +
 +http://​www.postfix.org/​FILTER_README.html
 +
 +
 +====== IMAP ======
 +
 +http://​wiki2.dovecot.org/​
 +
 +http://​wiki2.dovecot.org/​QuickConfiguration
 +
 +http://​www.brennan.id.au/​12-Sendmail_Server.html
 +
 +====== Web-интерфейс ======
 +
 +http://​www.squirrelmail.org/​about/​
 +
 +
 +===== 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 ======
 +
 +http://​www.openspf.org/​
 +
 +http://​www.openspf.org/​FAQ/​Common_mistakes
 +
 +http://​serverfault.com/​questions/​369460/​what-are-spf-records-and-how-do-i-configure-them
 +
 +====== Ссылки ======
 +
 +http://​xmodulo.com/​mail-server-ubuntu-debian.html
 +
 +https://​www.linode.com/​docs/​email/​running-a-mail-server
 +
 +https://​wiki.debian.org/​Postfix
 +
 +http://​www.postfix.org/​documentation.html
 +
 +===== Greylisting =====
 +
 +http://​www.ukr.net/​mta/​std3.html
 +
 +https://​www.fsf.org/​about/​systems/​greylisting
 +
  
mailserver.txt · В останнє змінено: 2017/06/11 17:53 by wombat