Это старая версия документа!


Mail-relay Server (почтовый шлюз с Exchange)


Postfix

Дано:
Шлюз (mail.mydom.ru)
Внешний IP-адрес (Internet) - 44.55.66.77
Внутренний IP-адрес - 192.168.10.245
Exchange - 192.168.10.246

Рабочие файлы. Только нужно будет поменять на свои данные (IP, пути, названия и т.д.)

Добавляем необходимые группы и пользователя.

# groupadd -g 200 postfix
# useradd -u 200 -d /dev/null -s /bin/false -g postfix postfix
# groupadd -g 201 postdrop

Можно скачать последнюю версию с POSTFIX, распаковать и собрать, я же буду собирать при помощи sbopkg.
Подправим SlackBuild (на сей момент 2.9.1 последняя версия)

 
VERSION=${VERSION:-2.9.1}

и info

 
PRGNAM="postfix"                                                                                                                                            
VERSION="2.9.1"                                                                                                                                             
HOMEPAGE="http://www.postfix.org/"                                                                                                                          
DOWNLOAD="http://postfix.cs.utah.edu/source/official/postfix-2.9.1.tar.gz"                                                                                  
MD5SUM="5c81b304a42c691671454dfe80b506ca"   

Можем сказать sbopkg, чтоб сразу поставил пакет после компиляции. Ну, или как всегда, installpkg.

И пошли настраивать..
Разрешаем ретрансляцию на почтовом шлюзе для нашего внутреннего почтового сервера. Добавляем IP адрес внутреннего почтового сервера в список серверов параметра mynetworks в файл main.cf на почтовом шлюзе:

 mynetworks = 127.0.0.0/8 192.168.10.246/24

Доступ на ретрансляцию ограничен адресом localhost почтового шлюза (127.0.0.1) и внутреннего почтового сервера (в нашем примере это 192.168.10.246), так что другие хосты внутри нашей сети не могут использовать шлюз для пересылки почты.

Указываем Postfix на необходимость приема сообщений из внешней сети для хоста внутренней сети. С помощью параметра relay_domains Postfix определяет список доменов, для которых он осуществляет пересылку, даже в том случае, если не является местом конечного назначения для этих доменов.

 relay_domains = mydom.ru

Теперь укажем ему, куда ретранслировать входящие сообщения, направляющиеся в наш домен. Для этого создаем карту транспорта в файле /etc/postfix/transport

 mydom.ru smtp:[192.168.10.246]

В этой строке smtp означает, что Postfix должен использовать тип транспорта smtp, определенный в файле master.cf. Квадратные скобки имеют важное значение, т. к. они отменяют поиск MX записи.
Теперь нам нужно создать индексированный файл следующей командой:

 # postmap hash:/etc/postfix/transport

И задаем параметр transport_maps в файле main.cf:

 transport_maps = hash:/etc/postfix/transport

Чтобы письма идущие на не существующий адрес, шли «лесом», составим список действительных получателей для внутреннего сервера. Для этого создадим текстовый файл /etc/postfix/mydom_real_rec и запишем туда РЕАЛЬНО существующие на Exchange, адреса.

 postmaster@mydom.ru     OK
 it@mydom.ru     OK
 v_pupkin@mydom.ru       OK
 ....
 ....

а в main.cf добавляем строчку:

 relay_recipient_maps =  hash:/etc/postfix/mydom_real_rec

и создаем индексированный файл

 # postmap hash:/etc/postfix/mydom_real_rec

в итоге получим файл - /etc/postfix/mydom_real_rec.db

А если получателей очень много?
Тогда идем на Exchange и запускаем батник 2postfix.bat, вот с таким содержимым (все в одну строчку):

 csvde -m -n -g -f "C:\mydom_recipients.txt" -r "(|(&(objectClass=user)(objectCategory=person)) (objectClass=groupOfNames) (objectClass=msExchDynamicDistributionList))" -l proxyAddresses

На выходе получаем файл C:\mydom_recipients.txt с примерно, вот таким содержимым:

 DN,proxyAddresses
 …..
 …..
 "CN=IT,OU=IT,DC=MYDOM",smtp:it@mydom.ru;X400:c=US\;a=\;p=MYDOM\;o=Exchange\;s=it\;;SMTP:it@mydom.ru
 "CN=v_pipkin,OU=User,DC=MYDOM",X400:c=US\;a= \;p=MYDOM\;o=Exchange\;s=v_pupkin\;;SMTP:v_pupkin@mydom.ru
 …..
 …..

Перенесем его на сервер с postfix в /etc/postfix/mydom_recipients.txt.
Создаем файл /etc/postfix/mydom_blacklist и внесем туда те адреса, что есть в exchange, но не должны получать почту, т.е. для фильтрации, например:

 mydom-exchange
 SystemMailbox

теперь запустим скрипт mydom_valid_rec

 #!/bin/sh
 cat ./mydom_recipients.txt  | tr -d \" | tr , \\n | tr \; \\n | awk -F\: '/(SMTP|smtp):/ \
 {printf("%s\tOK\n",$2)}' | \
 grep -v -f ./mydom_blacklist > ./mydom_real_rec

получаем файл mydom_real_rec со списком почтовых ящиков понятным postfix'у, и пересоздадим индексированный файл.

 # postmap hash:/etc/postfix/mydom_real_rec

Не забываем, что при появлении нового почтового ящика, необходимо добавить его в файл /etc/postfix/mydom_real_rec и пересоздать индексированный файл. При индексировании файлов сам postfix нужно остановить, а после, снова запустить.

Запретим демону master запускать локальный агент доставки - это будет означать отключение локального агента доставки, т. к. на данной машине получателей нет. Отредактируем файл master.cf и закомментируйем строку, содержащую локальную службу:

 #
 # ==========================================================================
 # service type  private unpriv  chroot  wakeup  maxproc command + args
 #               (yes)   (yes)   (yes)   (never) (100)
 # ==========================================================================
 smtp      inet  n       -       n       -       -       smtpd
 …..
 …..
 discard   unix  -       -       n       -       -       discard
 #local     unix  -       n       n       -       -       local
 virtual   unix  -       n       n       -       -       virtual
 lmtp      unix  -       -       n       -       -       lmtp
 anvil     unix  -       -       n       -       1       anvil
 …...
 …...

Теперь настроим exchange для работы с postfix.

Запустим Exchange System Manager:
Administrative Groups → Ваша группа (у меня это First Administrative Groups) → Server → Ваш почтовый сервер → Protocols → SMTP → Клик правой кнопкой мыши на Default Virtual SMTP Server → Properties → вкладка Delivery → Advanced
slackware.su_forum_files_postfix_exchange_postfix2_0.jpg Заполним поля, как показано на рисунке.
Помним, что сервер Exchange не принимает IP адрес в качестве значения для поля Smart host.

Далее, ограничим количество одновременных исходящих соединений.Жмем на кнопку «Outbound connections…» и заполняем поля как показано на рисунке (если у вас не так много сообщений и почтовых ящиков, значения можно увеличить).
slackware.su_forum_files_postfix_exchange_postfix2_1.jpg

Создадим отдельный коннектор. Administrative Groups → Ваша группа (у меня это First Administrative Groups) → Routing Groups → First Routing Group → правой кнопкой мыши на Connectors → New → SMTP Connector…
slackware.su_forum_files_postfix_exchange_postfix2_2.jpg

Дадим название «1», Ставим «точку» напротив «Forward all mail….» и вбиваем IP-адрес нашего Postfix сервера в квадратных скобках!
Нажимаем на кнопку «Add…» и добавляем наш exchange сервер (Default Virtual SMTP Server)
slackware.su_forum_files_postfix_exchange_postfix2_0.jpg

Теперь лучше сервисы exchange перезапустить.
Стартануть Postfix

 # /etc/rc.d/rc.postfix start

поправить iptables на предмет открытия 25 порта (/etc/iptables/rc.iptables) и запустить .

 # /etc/rc.d/rc.firewall start

Теперь Postfix будет принимать и отдавать Exchange все, что только в него свалиться для домена mydom.ru, отфильтровывая только не существующие ящики.
Но этого «маловато будет» (с) мультик - «Падал прошлогодний снег»

Прикрутим антивирус (ClamAV) и спам фильтр (Spamassasin).

ClamAV

Скачиваем последнюю версию ClamAV, распаковываем, начинаем собирать и устанавливать.
Перед инсталляцией необходимо создать группу и юзверя clamav:

 # groupadd -g 210 clamav
 # useradd -u 210 -d /dev/null -s /bin/false -g clamav clamav
 # configure --prefix=/usr --sysconfdir=/etc --enable-milter --with-iconv 
 # make
 # make install DESTDIR=/tmp/clamav-0.97.4
 # cd /tmp/clamav-0.97.4
 # makepkg -l y -c n /tmp/clamav-0.97.4.tgz
 # installpkg /tmp/clamav-0.97.4.tgz

Редактируем /etc/clamd.conf

 LogFile /var/log/clamd.log
 LogFileMaxSize 2M
 LogTime yes
 PidFile /var/run/clamav/clamd.pid
 TemporaryDirectory /var/tmp
 DatabaseDirectory /var/lib/clamav
 LocalSocket /var/run/clamav/clamd.socket
 FixStaleSocket yes
 MaxConnectionQueueLength 30
 StreamMaxLength 10M
 SelfCheck 1800
 User clamav
 MaxScanSize 50M
 MaxFileSize 15M
 MaxRecursion 10
 MaxFiles 1500

все остальное оставляем по умолчанию.

Создаем каталог /var/lib/clamav, файл /var/log/clamd.log, даем права и запускаем:

 # chown clamav:clamav /var/log/clamd.log
 # chown clamav:clamav /var/lib/clamav
 # clamd

Настраиваем freshclam.
Редактируем
/etc/freshclam.conf <code> DatabaseDirectory /var/lib/clamav UpdateLogFile /var/log/freshclam.log PidFile /var/run/clamav/freshclam.pid DatabaseOwner clamav AllowSupplementaryGroups yes DatabaseMirror db.ru.clamav.net DatabaseMirror database.clamav.net Checks 48 NotifyClamd /etc/clamd.conf </code> Открываем для freshclam порты 53 и 80 в iptables. <code> $IPTABLES -A OUTPUT -p UDP -s $INET_IP -m multiport –port 53,80 -j ACCEPT </code> и рестартуем. <code> /etc/rc.firewall restart </code> Создаем файл /var/log/freshclam.log, даем права и запускаем: <code> # chown clamav:clamav /var/log/freshclam.log # freshclam ClamAV update process started at Tue Apr 11 09:02:55 2012 Downloading main.cvd [100%] main.cvd updated (version: 53, sigs: 846214, f-level: 53, builder: sven) Downloading daily.cvd [100%] daily.cvd updated (version: 12972, sigs: 96960, f-level: 60, builder: ccordes) Downloading bytecode.cvd [100%] bytecode.cvd updated (version: 142, sigs: 40, f-level: 60, builder: acab) … </code> ===== ClamSMTP===== Скачиваем последнюю версию ClamSMTP, распаковываем, начинаем собирать и устанавливать. <code> # configure –prefix=/usr –sysconfdir=/etc # make # make install DESTDIR=/tmp/clamsmtp-1.10 # cd /tmp/clamsmtp-1.10 # makepkg -l y -c n /tmp/clamsmtp-1.10.tgz # installpkg /tmp/clamsmtp-1.10.tgz </code> Редактируем /etc/clamsmtpd.conf, если нет, создаем. <code> OutAddress: 10026 XClient: off Listen: 127.0.0.1:10025 ClamAddress: /var/run/clamav/clamd.socked Header: X-Virus-Scanned: -= ClamAV =- TempDirectory: /tmp Action: drop Quarantine: off User: clamav </code> Создадим загрузочный скрипт /etc/rc.d/rc.clamav: <code> #! /bin/bash start() { if [ -f /var/run/clamav/clamd.pid ]; then if ps xa | grep ^$(head -1 /var/run/clamav/calmd.pid) > /dev/null; then echo «ClamAv working!» else rm -r /var/run/clamav/clamd.pid fi fi echo «Start a ClamAv antivirus» clamd if [ -f /var/run/clamav/freshclam.pid ]; then if ps xa | grep ^$(head -1 /var/run/clamav/freshcalm.pid) > /dev/null; then echo «FreshClam working!» else rm -r /var/run/clamav/freshclam.pid fi fi echo «Start a freshclam» freshclam -d echo «Start a ClamSMTP» clamsmtpd } stop() { killall clamd killall freshclam killall clamsmtpd } case $1 in start) start ;; stop) stop ;; restart) stop start ;; *) echo «Usage rc.clamav start|stop|restart» exit 88 esac </code> И запускаем: <code> #/etc/rc.d/rc.clamav stop #/etc/rc.d/rc.clamav start </code> ===== Spamassasin ===== Скачиваем с последнюю версию spamassasin, распаковываем, начинаем собирать и устанавливать. <code> # perl Makefile.PL </code> Если ругается на модули (типа Encode::Detect), то устанавливаем все, на что жалуется: <code> # perl -MCPAN -e shell cpan shell – CPAN exploration and modules installation (v1.9402) Enter 'h' for help. cpan[1]> install Encode::Detect ………. cpan[1]> exit </code> Когда установку модулей закончили повторяем и продолжаем: <code> # perl Makefile.PL # make # make install </code> После установке правим файл /etc/mail/spamassassin/local.cf <code> rewrite_header Subject *SPAM* report_safe 2 trusted_networks 192.168.10. trusted_networks 127. lock_method flock required_score 6.0 use_bayes 1 bayes_auto_learn 1 bayes_ignore_header X-Bogosity bayes_ignore_header X-Spam-Flag bayes_ignore_header X-Spam-Status ifplugin Mail::SpamAssassin::Plugin::Shortcircuit shortcircuit USER_IN_WHITELIST on shortcircuit USER_IN_BLACKLIST on endif # Mail::SpamAssassin::Plugin::Shortcircuit ok_languages ru en ok_locales ru en report_charset windows-1251 bayes_path /etc/mail/spamassassin/bayes/bayes bayes_file_mode 0777 </code> required_score 6.0 - чем меньше, тем сильней защита, но больше вероятность ложных срабатываний (по умолчанию - 5.0). Создаем каталог /etc/mail/spamassassin/bayes и назначаем владельцем пользователя mailagent с правами 0755. А теперь все свяжем!
Приводим файл
/etc/postfix/master.cf к нижеследующему виду: <code> # # ========================================================================== # service type private unpriv chroot wakeup maxproc command + args # (yes) (yes) (yes) (never) (100) # ========================================================================== smtp inet n - n - - smtpd #submission inet n - n - - smtpd # -o smtpd_tls_security_level=encrypt # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING #smtps inet n - n - - smtpd # -o smtpd_tls_wrappermode=yes # -o smtpd_sasl_auth_enable=yes # -o smtpd_client_restrictions=permit_sasl_authenticated,reject # -o milter_macro_daemon_name=ORIGINATING #628 inet n - n - - qmqpd scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes -o smtp_tls_security_level=none 127.0.0.1:10026 inet n - n - 16 smtpd -o content_filter= -o receive_override_options=no_unknown_recipient_checks,no_header_body_checks -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks_style=host -o smtpd_authorized_xforward_hosts=127.0.0.0/8 smtp inet n - n - - smtpd -o content_filter=spam:dummy spam unix - n n - - pipe flags=R user=mailagent argv=/usr/bin/spamc -u mailagent -e /usr/sbin/sendmail -f $sender $recipient pickup fifo n - n 60 1 pickup cleanup unix n - n - 0 cleanup qmgr fifo n - n 300 1 qmgr #qmgr fifo n - n 300 1 oqmgr tlsmgr unix - - n 1000? 1 tlsmgr rewrite unix - - n - - trivial-rewrite bounce unix - - n - 0 bounce defer unix - - n - 0 bounce trace unix - - n - 0 bounce verify unix - - n - 1 verify flush unix n - n 1000? 0 flush proxymap unix - - n - - proxymap proxywrite unix - - n - 1 proxymap smtp unix - - n - - smtp # When relaying mail as backup MX, disable fallback_relay to avoid MX loops relay unix - - n - - smtp -o smtp_fallback_relay= # -o smtp_helo_timeout=5 -o smtp_connect_timeout=5 showq unix n - n - - showq error unix - - n - - error retry unix - - n - - error discard unix - - n - - discard #local unix - n n - - local virtual unix - n n - - virtual lmtp unix - - n - - lmtp anvil unix - - n - 1 anvil scache unix - - n - 1 scache </code> Рестартанем postfix и запустим spamd: <code> # /etc/rc.d/rc.postfix restart # /usr/bin/spamd -l -d -s /var/log/spamd/spamd.log </code> Чтобы при перезагрузке системы все загружалось само, добавим в /etc/rc.d/rc.local: <code> /etc/rc.d/rc.postfix start /etc/rc.d/rc.clamav start /usr/bin/spamd -l -d -s /var/log/spamd/spamd.log </code> В приложенном, вверху статьи, файле main.cf, еще очень много настроек для фильтрации спама самим postfix
ом.
Я их не привожу, они работают. Но еще больше их не включено в этот файл, потому-что они мне просто не нужны.
О всех этих настройках можно узнать (и очень советую) из нижеприведенной книги. Ссылался на….
—-
Ральф Гильдебрандт, Патрик Кеттер
Postfix. Подробное руководство** (Перевод П. Шера)
http://www.sys-adm.org.ua/mail/postfix-clamsmtp-sa.php
Обсуждаем на форуме