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