В завершающей статье о настройке собственного почтового сервера мы поговорим о вещах необязательных, но чрезвычайно полезных – антивирусе и антиспаме. И без того, и без другого можно, конечно обойтись, но выгребать из ящика по 10-15 рекламных писем в день мало кому захочется, а уж пойманный незадачливым сотрудником почтовый червяк и вовсе может натворить дел.
Итак, герои сегодняшнего поста:
антивирус clamav
антиспам spamassassin
и, в качестве бонуса, модуль цифровой подписи DKIM – opendkim.
У нас будет примерно так, но не совсем.
Антивирус
ставим:
1 | sudo apt-get install clamav-milter clamav-unofficial-sigs milter-greylist spamassassin spamass-milter opendkim opendkim-tools |
настраиваем:
1 | dpkg-reconfigure clamav-milter |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | Handle configuration automatically --> yes User for daemon --> clamav Additional groups --> none (empty field) path to socket --> /var/spool/postfix/clamav/clamav-milter.ctl group owner for the socket --> clamav permissions (mode) for socket --> 660 remove stale socket --> yes wait timeout for clamd --> 120 foreground --> no chroot --> none (empty field) pid file --> /var/run/clamav/clamav-milter.pid temporary path --> /tmp clamd socket --> unix:/var/run/clamav/clamd.ctl hosts excluded for scanning --> none (empty field) mail whitelist --> none (empty field) action for "infected" mail --> reject action on error --> defer reason for rejection --> Rejecting harmful e-mail: %v found. headers -> replace log file --> /var/log/clamav/clamav-milter.log disable log file locking --> no maximum log file size --> 0 log time --> yes use syslog --> no log facility (type of syslog message) --> LOG_LOCAL6 verbose logging --> no log level when infected --> off log level when no threat --> off size limit for scanned messages --> 25 |
/etc/default/clamav-milter
1 2 | SOCKET_RWGROUP=postfix SOCKET_ADDRESS="inet:3381@localhost" |
Антиспам
/etc/default/spamassassin
ENABLED=1
OPTIONS=”–create-prefs –max-children 5 –helper-home-dir=/var/lib/spamassassin -u debian-spamd -g debian-spamd”
CRON=1
/etc/default/spamass-milter
SOCKET=”/var/spool/postfix/spamass/spamass.sock”
SOCKETOWNER=”postfix:postfix”
SOCKETMODE=”0660″
OPTIONS=”-u spamass-milter -i 127.0.0.1 -m -r -1 -I”
Перезагружаем:
1 2 3 | sudo service spamassassin restart sudo service spamass-milter restart sudo service clamav-milter restart |
DKIM
DKIM – это “цифровая подпись”, подтверждающая, что адрес отправителя не подделан и письмо отправлено с доверенного релея.
Настройка клиента opendkim проста до безобразия:
/etc/opendkim.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | AutoRestart Yes AutoRestartRate 10/1h UMask 002 Syslog yes SyslogSuccess Yes LogWhy Yes UMask 002 # postfix user UserID opendkim:opendkim Domain nixman.info ExternalIgnoreList refile:/etc/opendkim/TrustedHosts InternalHosts refile:/etc/opendkim/TrustedHosts KeyTable refile:/etc/opendkim/KeyTable SigningTable refile:/etc/opendkim/SigningTable Selector mail Mode sv SubDomains yes Background yes Canonicalization relaxed/relaxed DNSTimeout 5 SignatureAlgorithm rsa-sha256 #UseASPDiscard no ##Version rfc4871 X-Header yes OversignHeaders From |
Указываем, работать мы будем через tcp-сокет (мне такой вариант кажется удобнее)
/etc/default/opendkim
1 | SOCKET="inet:8891@localhost" |
Конфигурация postfix (для всех трех milters)
/etc/postfix/main.cf
1 2 3 4 5 6 7 | # ------------------- MILTERS PART BEGIN -------------------- milter_default_action = accept milter_protocol = 2 milter_connect_macros = i b j _ {daemon_name} {if_name} {client_addr} smtpd_milters = inet:127.0.0.1:8891, inet:localhost:3381, unix:/var/spool/postfix/spamass/spamass.sock non_smtpd_milters = inet:127.0.0.1:8891, inet:localhost:3381, unix:/var/spool/postfix/spamass/spamass.sock # ------------------- MILTERS PART BEGIN -------------------- |
Создаем папки для ключей:
1 2 | sudo mkdir /etc/opendkim sudo mkdir /etc/opendkim/keys |
“Доверенные” хосты – почта с них по умолчанию считается “валидной” и подписывается. Т.к. наш сервер почтовым релеем не является, и вся почта отправляется с него, то мы указываем только его самого
/etc/opendkim/TrustedHosts
1 2 3 4 5 6 | 127.0.0.1 localhost 88.198.215.92 nixman.info *.nixman.info |
Здесь мы указываем, где будет лежать закрытый ключ, которым мы будем подписывать письма
/etc/opendkim/KeyTable
1 | mail._domainkey.nixman.info nixman.info:mail:/etc/opendkim/keys/nixman.info/mail.private |
/etc/opendkim/SigningTable
1 | *@nixman.info mail._domainkey.nixman.info |
Переходим в папку с ключами и генерируем закрытый ключ:
1 2 3 4 5 | cd /etc/opendkim/keys sudo mkdir nixman.info cd nixman.info sudo opendkim-genkey -s mail -d nixman.info |
1 | sudo chown opendkim:opendkim mail.private |
Публичный ключ лежит в файле mail.txt
Мы его положим в наш DNS, где его сможет прочитать любой желающий, чтобы подтвердить, что письма идут именно от нас
1 | mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for nixman.info |
Привычно перезагружаем сервис:
1 | sudo service opendkim restart |
И почтовый сервис
1 | sudo service postfix reload |
Ну и не забываем добавить в DNS SPF-запись для нашего домена
1 2 | spfblocked IN CNAME mail @ IN TXT "v=spf1 mx ip4:88.198.215.92 ?all exp=spfblocked.nixman.info" |
Вот теперь точно все :)