Лучше всего просто использовать Postfix для фильтрации IP-адресов с помощью блочных списков.
См. Http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions, чтобы отказаться от использования блочных списков.
Если вы действительно хотите, вы можете использовать фильтр Fail2Ban, например, f2b- postfix-rbl (postfix-rbl.conf), чтобы отфильтровать почтовый журнал для записей IP-адресов в черном списке / черном списке. Затем он вставит новую запись в iptables, и мы будем заблокированы на указанное время бана.
Как уже упоминалось, это, вероятно, мало что даст, так как скрипт / бот / почтовик просто перейдет после 1-го сбоя и попробует вас снова в другой день с другого IP. Кроме того, это избыточно, поскольку вы можете фильтровать с помощью MTA, как указано выше.
Вот пример некоторых списков блокировок, которые вы можете добавить в postfix, чтобы заблокировать занесенные в черный список IP-адреса.
/etc/main.cf:
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_unlisted_recipient,
reject_invalid_hostname,
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unauth_pipelining,
check_client_access hash:/etc/postfix/blacklist,
#Some DNS BL's - high availability:
reject_rbl_client zen.spamhaus.org,
reject_rbl_client bl.spamcop.net,
reject_rbl_client dul.dnsbl.sorbs.net,
#Some country-wide IP blocks:
#reject_rbl_client cn.countries.nerd.dk,
#reject_rbl_client tw.countries.nerd.dk,
#reject_rbl_client lr.countries.nerd.dk,
#reject_rbl_client ng.countries.nerd.dk,
#reject_rbl_client ro.countries.nerd.dk,
#reject_rbl_client ua.countries.nerd.dk,
#reject_rbl_client kr.countries.nerd.dk,
#finalize and throw at postgrey if passes above:
#check_policy_service inet:[::1]:10023,
permit
Если вы настаиваете на обработке списков блокировок обработки fail2ban, убедитесь, что вы включили его в /etc/failban/jail.local:
[postfix-rbl]
enabled = true
port = smtp,465,submission
filter = postfix-rbl
logpath = /var/log/mail.log
Чтобы использовать rbl "mode" в новых версиях, замените строку фильтра на:
filter = postfix[mode=rbl]
В более ранних версиях мне приходилось менять мой, чтобы обнаруживать «554 5.7.1», чтобы получать отклонения журнала postfix через фильтр «postifx-rbl». Более новая версия фильтра, кажется, сканирует это изменение в более новых версиях "режима".
Что касается потока SYN - посмотрите это.