Mail-relay Server (почтовый шлюз с Exchange) |
---|
Дано:
Шлюз (mail.mydom.ru)
Внешний IP-адрес (Internet) - 44.55.66.77
Внутренний IP-адрес - 192.168.10.245
Exchange - 192.168.10.246
Рабочие файлы. Только нужно будет поменять на свои данные (IP, пути, названия и т.д.)
в /etc/postfix | в /etc/iptables (каталог создать) | в /etc/rc.d | в /etc | в /etc/mail/spamassassin | на Exchange |
---|---|---|---|---|---|
aliases | rc.iptables | rc.clamav | clamd.conf | local.cf | 2postfix.bat |
checks.reg | rc.iptables_flush | rc.local | clamsmtpd.conf | ||
helo_checks | rc.postfix | freshclam.conf | |||
main.cf | rc.firewall | ||||
master.cf | |||||
transport | |||||
mydom_blacklist | |||||
mydom_real_rec | |||||
mydom_valid_rec |
Добавляем необходимые группы и пользователя.
# 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
Заполним поля, как показано на рисунке.
Помним, что сервер Exchange не принимает IP адрес в качестве значения для поля Smart host.
Далее, ограничим количество одновременных исходящих соединений.Жмем на кнопку «Outbound connections…» и заполняем поля как показано на рисунке (если у вас не так много сообщений и почтовых ящиков, значения можно увеличить).
Создадим отдельный коннектор.
Administrative Groups → Ваша группа (у меня это First Administrative Groups) →
Routing Groups → First Routing Group →
правой кнопкой мыши на Connectors → New → SMTP Connector…
Дадим название «1», Ставим «точку» напротив «Forward all mail….» и вбиваем IP-адрес нашего Postfix сервера в квадратных скобках!
Нажимаем на кнопку «Add…» и добавляем наш exchange сервер (Default Virtual SMTP Server)
Теперь лучше сервисы 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:
# 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
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
Открываем для freshclam порты 53 и 80 в iptables.
$IPTABLES -A OUTPUT -p UDP -s $INET_IP -m multiport --port 53,80 -j ACCEPT
и рестартуем.
/etc/rc.firewall restart
Создаем файл /var/log/freshclam.log, даем права и запускаем:
# 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) ...
Скачиваем последнюю версию ClamSMTP, распаковываем, начинаем собирать и устанавливать.
# 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
Редактируем /etc/clamsmtpd.conf, если нет, создаем.
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
Создадим загрузочный скрипт /etc/rc.d/rc.clamav:
#! /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
И запускаем:
#/etc/rc.d/rc.clamav stop #/etc/rc.d/rc.clamav start
Скачиваем последнюю версию spamassasin, распаковываем, начинаем собирать и устанавливать.
# perl Makefile.PL
Если ругается на модули (типа Encode::Detect), то устанавливаем все, на что жалуется:
# 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
Когда установку модулей закончили повторяем и продолжаем:
# perl Makefile.PL # make # make install
После установке правим файл /etc/mail/spamassassin/local.cf
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
required_score 6.0 - чем меньше, тем сильней защита, но больше вероятность ложных срабатываний (по умолчанию - 5.0).
Создаем каталог /etc/mail/spamassassin/bayes и назначаем владельцем пользователя mailagent с правами 0755.
А теперь все свяжем!
Приводим файл /etc/postfix/master.cf к нижеследующему виду:
# # ========================================================================== # 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
Рестартанем postfix и запустим spamd:
# /etc/rc.d/rc.postfix restart # /usr/bin/spamd -l -d -s /var/log/spamd/spamd.log
Чтобы при перезагрузке системы все загружалось само, добавим в /etc/rc.d/rc.local:
/etc/rc.d/rc.postfix start /etc/rc.d/rc.clamav start /usr/bin/spamd -l -d -s /var/log/spamd/spamd.log
В приложенном, вверху статьи, файле main.cf, еще очень много настроек для фильтрации спама самим postfix'ом.
Я их не привожу, они работают. Но еще больше их не включено в этот файл, потому-что они мне просто не нужны.
О всех этих настройках можно узнать (и очень советую) из нижеприведенной книги.
Ссылался на….
Ральф Гильдебрандт, Патрик Кеттер «Postfix. Подробное руководство» (Перевод П. Шера)
http://www.sys-adm.org.ua/mail/postfix-clamsmtp-sa.php
Обсуждаем на форуме