Настраиваем почтовый шлюз на базе CentOS 7 и Postfix с использованием SpamAssassin, ClamAV, OpenDKIM, SPF и DMARC


Шлюз будет функционировать следующим образом:

входящие сообщения с внешних почтовых серверов будет приходить на порт 25 и проверяться с помощью SpamAssassin и ClamAV

исходящие сообщения с внутреннего почтового сервера будут поступать на порт 10025 и подписываться посредством OpenDKIM

Будем считать, что IP-адрес внутреннего почтового сервера - 192.168.100.100, а внешний IP-адрес почтового шлюза - 198.51.100.1


Базовая конфигурация


устанавливаем Postfix

yum install postfix

вносим изменения в файл /etc/postfix/main.cf

inet_interfaces = all
inet_protocols = ipv4

myhostname = mail.example.com
mydestination =

relay_domains = example.com
relay_transport = smtp:[192.168.100.100]
relay_recipient_maps = hash:/etc/postfix/recipients
mynetworks = 192.168.100.100/32

local_transport = error:local mail delivery is disabled

smtp_tls_security_level = may
smtp_tls_loglevel = 1
smtpd_tls_security_level = may
smtpd_tls_cert_file = /etc/postfix/public.cer
smtpd_tls_key_file = /etc/postfix/private.key
smtpd_tls_loglevel = 1

редактируем файл /etc/postfix/master.cf

10025     inet  n       -       n       -       -       smtpd
#local    unix  -       n       n       -       -       local

создаем файл /etc/postfix/recipients со списком разрешенных получателей

создаем хэш-таблицу /etc/postfix/recipients.db со списком разрешенных получателей

postmap hash:/etc/postfix/recipients

создаем закрытый ключ и сертификат сервера (как это сделать, рассказывается здесь и здесь) и сохраняем их в файлах /etc/postfix/private.key и /etc/postfix/public.cer соответственно

настраиваем владельцев закрытого ключа и права доступа к нему

chmod 600 /etc/postfix/private.key

перезапускаем Postfix

systemctl restart postfix


SpamAssassin


устанавливаем репозиторий EPEL

yum install epel-release

устанавливаем SpamAssassin

yum install spamassassin

заменяем содержимое файла /etc/mail/spamassassin/local.cf

report_hostname mail.example.com
report_safe 0

запускаем SpamAssassin

systemctl start spamassassin

устанавливаем мильтр для интеграции SpamAssassin и Postfix

yum install spamass-milter

создаем группу для совместного доступа Postfix и spamass-milter к файлу сокета

groupadd sa-milt-sock
gpasswd -M sa-milt,postfix sa-milt-sock

добавляем в файл /etc/sysconfig/spamass-milter параметры запуска службы

SOCKET_OPTIONS="-g sa-milt-sock"

запускаем мильтр

systemctl start spamass-milter

добавляем в файл /etc/postfix/main.cf

milter_connect_macros = j {daemon_name} v _

замечание 1: в противном случае в журнал будут добавляться сообщения 'Could not retrieve sendmail macro "_" …'

замечание 2: также в журнале могут появляться сообщения 'Could not retrieve sendmail macro "!" …', но их можно игнорировать

редактируем файл /etc/postfix/master.cf

smtp	inet	n	-	n	-	-	smtpd
	-o smtpd_milters=unix:/run/spamass-milter/spamass-milter.sock

перезапускаем Postfix

systemctl restart postfix


ClamAV


устанавливаем ClamAV

yum install clamd

заменяем содержимое файла /etc/clamd.d/scan.conf

LogSyslog yes
User clamscan
LocalSocket /run/clamd.scan/clamd.sock
LocalSocketGroup virusgroup
LocalSocketMode 660

обновляем базу данных ClamAV

freshclam

запускаем ClamAV

systemctl start clamd@scan

устанавливаем мильтр для интеграции ClamAV и Postfix

yum install clamav-milter

создаем файл /etc/tmpfiles.d/clamav-milter.conf

d /run/clamav-milter 0711 clamilt clamilt

создаем группу для совместного доступа Postfix и clamav-milter к файлу сокета

groupadd clamilt-sock
gpasswd -M clamilt,postfix clamilt-sock

заменяем содержимое файла /etc/mail/clamav-milter.conf

User clamilt

ClamdSocket unix:/run/clamd.scan/clamd.sock

MilterSocket unix:/run/clamav-milter/clamav-milter.sock
MilterSocketGroup clamilt-sock
MilterSocketMode 660

AddHeader Replace
ReportHostname mail.example.com
OnInfected Accept

LogSyslog yes
LogFacility LOG_MAIL
LogClean Basic
LogInfected Basic

запускаем мильтр

systemctl start clamav-milter

редактируем файл /etc/postfix/master.cf

smtp	inet	n	-	n	-	-	smtpd
	-o smtpd_milters=unix:/run/spamass-milter/spamass-milter.sock,unix:/run/clamav-milter/clamav-milter.sock

перезапускаем Postfix

systemctl restart postfix


OpenDKIM


устанавливаем OpenDKIM

yum install opendkim

генерируем закрытый ключ и TXT-запись DNS

opendkim-genkey -b 1024 -d example.com -a -s mail

замечание: в результате выполнения команды будет создано два файла - mail.private и mail.txt

копируем закрытый ключ в папку /etc/opendkim/keys

cp mail.private /etc/opendkim/keys/opendkim.key

настраиваем владельцев закрытого ключа и права доступа к нему

chown opendkim:opendkim /etc/opendkim/keys/opendkim.key
chmod 640 /etc/opendkim/keys/opendkim.key

добавляем в DNS-зону TXT-запись, сохраненную в файле mail.txt

заменяем содержимое файла /etc/opendkim.conf

Socket local:/run/opendkim/opendkim.sock
Umask 007

Mode s
Canonicalization relaxed/relaxed
Domain example.com
Selector mail
InternalHosts 192.168.100.100
KeyFile /etc/opendkim/keys/opendkim.key

Syslog yes
SyslogSuccess yes

редактируем файл /etc/tmpfiles.d/opendkim.conf

D /run/opendkim 0711 opendkim opendkim -

удаляем и заново создаем папку /run/opendkim

systemd-tmpfiles --remove --create /etc/tmpfiles.d/opendkim.conf

создаем группу для совместного доступа Postfix и OpenDKIM к файлу сокета

groupadd dkimgroup
gpasswd dkimgroup -M opendkim,postfix

копируем unit-файл /usr/lib/systemd/system/opendkim.service в папку /etc/systemd/system

cp /usr/lib/systemd/system/opendkim.service /etc/systemd/system/opendkim.service

замечание: в результате unit-файл /etc/systemd/system/opendkim.service будет переопределять unit-файл /usr/lib/systemd/system/opendkim.service

редактируем файл /etc/systemd/system/opendkim.service

Group=dkimgroup

обновляем конфигурацию systemd

systemctl daemon-reload

запускаем OpenDKIM

systemctl start opendkim

редактируем файл /etc/postfix/master.cf

10025     inet  n       -       n       -       -       smtpd
    -o smtpd_milters=unix:/run/opendkim/opendkim.sock

перезапускаем Postfix

systemctl restart postfix


SPF


добавляем в DNS-зону следующую запись:

хост - @

тип - TXT

значение - v=spf1 +ip4:198.51.100.1/32 -all


DMARC


добавляем в DNS-зону следующую запись:

хост - _dmarc

тип - TXT

значение - v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]; aspf=s; adkim=s; fo=1; pct=100

Добавить комментарий