Подключаем антиспам листинги для защиты от спама. Открываем конфигурационный файл Postfix:
nano /etc/postfix/main.cf
Добавьте блок sender-restrictions:
smtpd_sender_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_non_fqdn_sender,
reject_unknown_sender_domain,
# DBL: block
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.2,
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.4,
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.5,
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.6,
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.102,
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.103,
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.104,
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.105,
reject_rhsbl_sender dbl.spamhaus.org=127.0.1.106
Что бы DBL из smtpd_sender_restrictions не действовал для порта 587, который используют авторизированные клиенты.
Нужно добавить в конфиг /etc/postfix/master.cf, в блок submission inet строку:
-o smtpd_sender_restrictions=permit_sasl_authenticated,reject
В итоге у меня получилось так:
submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_tls_auth_only=yes -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions=permit_sasl_authenticated,reject -o smtpd_peername_lookup=no -o milter_macro_daemon_name=ORIGINATING
Далее необходима внести правки в режим работы DNS сервера. Да работы RBL/RHSBL в Postfix необходим лёгкий локальный резолвер-кэш, чтобы DNS-запросы были быстрыми и стабильными. В Arch Linux у меня по умолчанию установлен systemd-resolved. И он у меня уже настроен на этапе настройки ОС после установки.
Проверяем что служба запущена:
systemctl status systemd-resolved --no-pager
Если отключена включаем:
systemctl enable --now systemd-resolved
Включаем stub режим:
ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
Применяем настройки Postfix:
postfix check postfix reload
Блокировка входящих писем отправленных с сервера без SPF
Откройте конфигурационный файл:
nano /etc/postfix/master.cf
Найдите строку cleanup
cleanup unix n - n - 0 cleanup
Сразу под ней добавьте:
incleanup unix n - n - 0 cleanup -o milter_header_checks=regexp:/etc/postfix/milter_header_checks
Вторая строка обязательно с отступом пробел.
Подключи этот cleanup только к входящему smtpd. Ищем строки:
smtp inet n - n - 1 postscreen smtpd pass - - n - - smtpd tlsproxy unix - - n - 0 tlsproxy
Необходимо добавить добавить override по примеру ниже:
smtp inet n - n - 1 postscreen smtpd pass - - n - - smtpd -o cleanup_service_name=incleanup tlsproxy unix - - n - 0 tlsproxy
Файл правил для milter-заголовков:
Создайте файл /etc/postfix/header_checks с содержимым:
/^Authentication-Results:[[:space:]]*smtp\.powervps\.net;.*[[:space:];]spf=(none|fail)([[:space:];]|$)/ REJECT 5.7.1 SPF none/fail (policy)
Удаление чужих Authentication-Results
Мы желаем проверку SPF и DKIM и сами пишем заголовок Authentication-Results с результатами проверки.
Поэтому что бы защитится от подмены, предварительно очищаем все Authentication-Results.
Открываем фал:
nano /etc/postfix/header_checks
И добавляем в конец файла:
/^Authentication-Results:/ IGNORE
Применяем настройки:
postfix check systemctl reload postfix
Включаем Postscreen
Включим блокировку по DNSBL и дополнительную защиту от спама и ботов.
Открываем конфиг:
nano /etc/postfix/main.cf
Добавляем настройки:
### =========================================================
### Postscreen (applies only if enabled in master.cf)
### =========================================================
postscreen_greet_wait = 2s
postscreen_greet_action = enforce
postscreen_cache_map = lmdb:/var/lib/postfix/postscreen_cache
postscreen_cache_cleanup_interval = 24h
postscreen_dnsbl_sites =
zen.spamhaus.org=127.0.0.[2..11]*2
postscreen_dnsbl_action = enforce
postscreen_dnsbl_timeout = 5s
postscreen_dnsbl_threshold = 1
postscreen_pipelining_enable = no
postscreen_non_smtp_command_enable = no
postscreen_bare_newline_enable = no
smtpd_forbidden_commands = CONNECT GET POST
Далее необходимо включить сервис dnsblog:
Откройте файл /etc/postfix/master.cf и добавьте в него строку:
dnsblog unix - - n - 0 dnsblog
В итоге блок конфига у меня выглядит следующим образом:
smtp inet n - n - 1 postscreen smtpd pass - - n - - smtpd -o cleanup_service_name=incleanup dnsblog unix - - n - 0 dnsblog tlsproxy unix - - n - 0 tlsproxy submission inet n - n - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_tls_auth_only=yes -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=private/auth # -o smtpd_relay_restrictions=permit_sasl_authenticated,reject -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject -o smtpd_sender_restrictions=permit_sasl_authenticated,reject -o smtpd_peername_lookup=no -o milter_macro_daemon_name=ORIGINATING
Применяем настройки:
postfix check systemctl reload postfix