Поштова система на основі 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.