Skip to content

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

В завершающей статье о настройке собственного почтового сервера мы поговорим о вещах необязательных, но чрезвычайно полезных – антивирусе и антиспаме. И без того, и без другого можно, конечно обойтись, но выгребать из ящика по 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"

Вот теперь точно все :)

    Leave a Reply

    %d bloggers like this: