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

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


mailserver

Розбіжності

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

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

Both sides previous revision Попередня ревізія
Наступна ревізія
Попередня ревізія
Наступна ревізія Both sides next revision
mailserver [2015/03/31 10:58]
wombat [Web-интерфейс]
mailserver [2017/06/11 20:53]
wombat Фильтр исходящей почты
Рядок 1: Рядок 1:
 ====== MTA ====== ====== MTA ======
 +
 +===== Postfix =====
 +
 +В отлиие от sendmail, Postfix умеет хранить входящую почту в папках формата [[https://​en.wikipedia.org/​wiki/​Maildir | Maildir]]. Это может быть полезным для установки [[mailserver#​sqwebmail|веб-интерфейса]] к почтовому серверу без вспомогательного IMAP-сервера.
  
 http://​www.postfix.org/​features.html 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 ====== ====== IMAP ======
Рядок 14: Рядок 223:
  
 http://​www.squirrelmail.org/​about/​ http://​www.squirrelmail.org/​about/​
 +
 +
 +===== SqWebmail =====
  
 http://​www.courier-mta.org/​sqwebmail/​ http://​www.courier-mta.org/​sqwebmail/​
Рядок 21: Рядок 233:
   cd /​srv/​www/​cgi-bin/​   cd /​srv/​www/​cgi-bin/​
   ln -s /​usr/​lib/​cgi-bin/​sqwebmail   ln -s /​usr/​lib/​cgi-bin/​sqwebmail
 +  cd /srv/www
 +  ln -s /​usr/​share/​sqwebmail
  
  
Рядок 40: Рядок 254:
  
 http://​www.postfix.org/​documentation.html http://​www.postfix.org/​documentation.html
 +
 +===== Greylisting =====
 +
 +http://​www.ukr.net/​mta/​std3.html
 +
 +https://​www.fsf.org/​about/​systems/​greylisting
  
  
mailserver.txt · В останнє змінено: 2020/05/20 21:59 by wombat