Настраиваем Postfix в качестве шлюза для внутреннего почтового сервера [2009]
В этом документе описывается, как установить на FreeBSD 7.1 MTA Postfix в связке с ClamAV, Postgrey и Dspam. Основная цель - обеспечить фильтрацию вирусов и спама, транслируя всю продравшуюся сквозь барьеры почту на внутренний почтовый сервер.
Сразу оговорюсь, что я не слишком большой профессионал в создании почтовых систем и некоторые вещи, возможно, сделаны неправильно. Буду рад исправлениям/замечаниям.
Из системы портов нам понадобятся: /usr/ports/mail/postfix /usr/ports/mail/postgrey /usr/ports/security/clamav /usr/ports/security/clamsmtp /usr/ports/mail/dspam - я устанавливал его без поддержки баз данных и без CGI скриптов, но с функцией debug
Запускать dspam будем с правами пользователя dspam, а не root, что предполагается по умолчанию, для чего добавляем в файл /etc/make.conf следущие строки:
Все пользователи, для простоты, будут у нас в одной группе. Я исходил из тех соображений, что пользователей много, а вот обучать фильтр придется мне одному и уж лучше делать это сразу для всех скопом.
vi /var/db/dspam/group
globalgroup:shared:*
Сразу устанавливаем права доступа:
chown -R dspam:dspam /var/db/dspam
Устанавливаем остальные пакеты:
cd /usr/ports/mail/postfix make install cd /usr/ports/mail/postgrey make install cd /usr/ports/security/clamav make install cd /usr/ports/security/clamsmtp make install
И, не теряя времени даром, вносим все это хозяйство в /etc/rc.conf:
# Common Home /var/db/dspam StorageDriver /usr/local/lib/libhash_drv.so ServerMode standard ServerDomainSocketPath "/var/run/dspam/dspam.sock" ServerPID /var/run/dspam/dspam.pid ServerParameters "-deliver=innocent, spam" ServerIdent "localhost.localdomain" ClientHost "/var/run/dspam/dspam.sock" Notifications off PurgeSignatures 14 # Stale signatures PurgeNeutral 90 # Tokens with neutralish probabilities PurgeUnused 90 # Unused tokens PurgeHapaxes 30 # Tokens with less than 5 hits (hapaxes) PurgeHits1S 15 # Tokens with only 1 spam hit PurgeHits1I 15 # Tokens with only 1 innocent hit LocalMX 127.0.0.1 Debug * SystemLog on UserLog on Opt out ParseToHeaders on ChangeModeOnParse on ChangeUserOnParse off MaxMessageSize 307200 Trust dspam Trust postfix Trust root Trust mixa TrainingMode teft TestConditionalTraining on Feature chained Feature whitelist Algorithm graham burton PValue graham ProcessorBias on
# User Preference "signatureLocation=headers" # 'message' or 'headers' Preference "showFactors=on" Preference "spamAction=tag" Preference "spamSubject=***SPAM***"
Я не стал связывать между собой ClamAV и Dspam, так как на некоторых форумах встречал сообщения о том, что работа связки бывает нестабильной.
Мой transport:
dreamcatcher.ru smtp:[10.1.5.62]
Так как обучать антиспам я обучать буду путем отправки писем, содержащих спам, на почтовый ящик spam@mail.dreamcatcher.ru, то мой relay_domains выглядит следующим образом:
dreamcatcher.ru OK mail.dreamcatcher.ru OK
Внимание! Вместо обратной пересылки писем на сервер я сейчас просто забираю письма из почтового ящика postmaster с помощью mutt. Это связано с тем, что Lotus Notes при пересылке откусывает заголовки DSPAM. Эту проблему я пока не решил.
По рекомендациям профессионалов используются фильтры:
10.0.0.0/8 REJECT Domain MX in RFC 1918 private network 172.16.0.0/12 REJECT Domain MX in RFC 1918 private network 192.168.0.0/16 REJECT Domain MX in RFC 1918 private network 127.0.0.0/8 REJECT Domain MX in loopback network 224.0.0.0/4 REJECT Domain MX in class D multicast network 240.0.0.0/5 REJECT Domain MX in class E reserved network 248.0.0.0/5 REJECT Domain MX in reserved network 0.0.0.0/8 REJECT 010 Domain MX in broadcast network 169.254.0.0/16 REJECT 020 Domain MX in link local network
dspam_filter_access
/./ FILTER dspam:dspam
master.cf
# AV scan filter (used by content_filter) scan unix - - n - 16 smtp -o smtp_send_xforward_command=yes # DSPAM dspam unix - n n - 10 pipe flags=Ru user=dspam argv=/usr/local/bin/dspam --deliver=innocent --user ${recipient} -i -f $sender -- $recipient
# For injecting mail back into postfix from the filter 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
Для проверки можно использовать следущие команды:
telnet mail.dreamcatcher.ru 25
HELO test.com MAIL FROM: mixa@test.com RCPT TO: mixa@dreamcatcher.ru DATA From: mixa@test.com To: mixa@dreamcatcher.ru Test .
Внимание! Вместо обратной пересылки писем на сервер я сейчас просто забираю письма из почтового ящика postmaster с помощью mutt. Это связано с тем, что Lotus Notes при пересылке откусывает заголовки DSPAM. Эту проблему я пока не решил. После сохранения писем в локальном каталоге пользователя, учу фильтр командой:
1. почему параметр local_recipient_maps = без значения? 2. почему в параметре smtpd_recipient_restrictions = повторяются значения reject_non_fqdn_hostname, reject_invalid_hostname,
Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация | Вход ]