Поштова система на основі postfix з фільтрацією вірусів та спаму.
(Postfix+Dovecot+ClamAV+SpamAssassin)
Ця стаття не містить у собі нічого революційного. Це всього лише забрані до купи шматки документації присвяченої тому чи іншому питанню. Все що викладено нижче — досвід побудови поштової системи на хостинг-сервері з ISPmanager.
Встановлення необхідного ПЗ.
Наразі наводжу у якості прикладу FreeBSD 6.1, для Linux це не буде дуже сильно відрізнятись (принаймні я так сподіваюсь, бо багато чого залежить від дистро).
Встановлюємо postfix версії >= 2.3 з підтримкою DovecotSASL. Це надасть можливість створювати віртуальних користувачів використовуючи файл паролів, не використовуючи SQL, та викинути з нашої поштової системи cyrus-sasl (тобто зменшити кількість деталей, що можуть вийти з ладу та розвалити всю поштову систему).
Встановлюємо з портів стабільні версії Dovecot, ClamAV, SpamAssassin, ClamSMTP. Останніми встановлюємо spamass-rules, хоча власні правила мають працювати краще.
Налаштування ПЗ.
Налаштування МТА Postfix.
У головний файл параметрів postfix/main.cf додаємо наступні рядки:
# Вмикаємо авторизацію sasl.
smtpd_sasl_auth_enable = yes
# Дозволяємо відсилання пошти лише тим, хто вдало пройшов авторизацію, та тим,
# хто входить у довірену мережу
smtpd_recipient_restrictions = permit_mynetworks,permit_sasl_authenticated,check_relay_domains
# Тип sasl
smtpd_sasl_type = dovecot
# Шлях до сокета через який власне і йде авторизація. Може бути повним, або
# відносно queue_directory
smtpd_sasl_path = private/auth
Всі інші налаштування робимо читаючи конфіг, та змінюючи у ньому потрібні місця.
У файл postfix/master.cf додаємо наступні рядки:
# Відсилання пошти на перевірку до ClamSMTP:
scan unix - - n - 16 smtp
-o smtp_send_xforward_command=yes
# Повернення пошти від ClamSMTP:
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
# Перевірка пошти SpamAssassin
spamfilter unix - n n - - pipe flags=Rq user=clamav argv=/usr/local/bin/spamfilter -f ${sender} -- ${recipient}
До рядка
smtp inet n - - - - smtpd
додаємо наступне:
-o smtpd_client_restrictions=permit_sasl_authenticated
-o content_filter=spamfilter:dummy
-o content_filter = scan:127.0.0.1:10025
Налаштування Dovecot.
Знову ж таки, йдемо по файлу конфігурації вносячи незначні зміни доки не знаходимо розділ auth deafult
.
Робимо його вміст наступним:
auth deafult {
mechanisms = plain login
# Наразі, використовується файл з паролями /usr/local/etc/dovecot.passwd
passdb passwd-file {
args = /usr/local/etc/dovecot.passwd
}
userdb passwd-file {
args = /usr/local/etc/dovecot.passwd
}
# Через цей сокет піде авторизація у postfix.
socket listen {
client {
# Шлях має бути таким як і у налаштуваннях postfix.
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
Налаштування ClamAV & ClamSMTP
Тут все залежить від Вашого бажання захиститись від вірусів. Взагалі, конфігурація досить стандартна, і зводиться до двох файлів:
- clamd.conf:
LogFile /var/log/clamav/clamd.log LogFileMaxSize 2M PidFile /var/run/clamav/clamd.pid TemporaryDirectory /var/clamav DatabaseDirectory /var/clamav/db LocalSocket /var/clamav/clamd.sock FixStaleSocket yes User clamav ScanMail yes
- clamsmtpd.conf:
OutAddress: 10026 Listen: 0.0.0.0:10025 ClamAddress: /var/clamav/clamd.sock Header: X-Virus-Scanned: ClamAV using ClamSMTP TempDirectory: /var/clamav User: clamav
Налаштування SpamAssassin.
Все зводиться до файла mail/spamassassin/local.cf:
rewrite_header Subject: *****SPAM***** ( _HITS_ )
required_score 7.0
use_bayes 1
bayes_auto_learn 1
Взагалі, можемо до нього додати будь-які додаткові правила, але це вже справа кожної окремої людини, виходячи з конкретних обставин.
та простенького сценарію оболонки /usr/local/bin/spamfilter:
#!/usr/local/bin/bash
/usr/local/bin/spamc | /usr/sbin/sendmail -i "$@"
exit $?
Тепер нам залишається лише запустити все що нам потрібно: postfix, dovecot, clamd, clamsmtp, sa-spamd.