Сам себе почтальнон, часть 3: антивирус и антиспам

В завершающей статье о настройке собственного почтового сервера мы поговорим о вещах необязательных, но чрезвычайно полезных – антивирусе и антиспаме. И без того, и без другого можно, конечно обойтись, но выгребать из ящика по 10-15 рекламных писем в день мало кому захочется, а уж пойманный незадачливым сотрудником почтовый червяк и вовсе может натворить дел.

Итак, герои сегодняшнего поста:
антивирус clamav
антиспам spamassassin
и, в качестве бонуса, модуль цифровой подписи DKIM – opendkim.


У нас будет примерно так, но не совсем.

Антивирус

ставим:
sudo apt-get install clamav-milter clamav-unofficial-sigs milter-greylist spamassassin spamass-milter opendkim opendkim-tools

настраиваем:
dpkg-reconfigure clamav-milter

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

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”

Перезагружаем:

sudo service spamassassin restart
sudo service spamass-milter restart
sudo service clamav-milter restart

DKIM

DKIM – это “цифровая подпись”, подтверждающая, что адрес отправителя не подделан и письмо отправлено с доверенного релея.
Настройка клиента opendkim проста до безобразия:
/etc/opendkim.conf

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
SOCKET="inet:8891@localhost"

Конфигурация postfix (для всех трех milters)
/etc/postfix/main.cf

# ------------------- 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 --------------------

Создаем папки для ключей:

sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys

“Доверенные” хосты – почта с них по умолчанию считается “валидной” и подписывается. Т.к. наш сервер почтовым релеем не является, и вся почта отправляется с него, то мы указываем только его самого
/etc/opendkim/TrustedHosts

127.0.0.1
localhost
88.198.215.92

nixman.info
*.nixman.info

Здесь мы указываем, где будет лежать закрытый ключ, которым мы будем подписывать письма
/etc/opendkim/KeyTable
mail._domainkey.nixman.info nixman.info:mail:/etc/opendkim/keys/nixman.info/mail.private

/etc/opendkim/SigningTable

*@nixman.info mail._domainkey.nixman.info

Переходим в папку с ключами и генерируем закрытый ключ:
cd /etc/opendkim/keys
sudo mkdir nixman.info
cd nixman.info

sudo opendkim-genkey -s mail -d nixman.info

sudo chown opendkim:opendkim mail.private

Публичный ключ лежит в файле mail.txt
Мы его положим в наш DNS, где его сможет прочитать любой желающий, чтобы подтвердить, что письма идут именно от нас

mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for nixman.info

Привычно перезагружаем сервис:
sudo service opendkim restart

И почтовый сервис
sudo service postfix reload

Ну и не забываем добавить в DNS SPF-запись для нашего домена

spfblocked IN CNAME mail
@ IN TXT "v=spf1 mx ip4:88.198.215.92 ?all exp=spfblocked.nixman.info"

Вот теперь точно все 🙂

Leave a Reply