Это старая версия документа!
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, пути, названия и т.д.)
в /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, распаковываем, начинаем собирать и устанавливать.
Перед инсталляцией необходимо создать группу и юзверя 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
Обсуждаем на форуме