Устанавливаем fail2ban
apt install fail2ban
Удаляем ufw,
ставил firewalld по аналогии как на Rocky
systemctl stop ufw systemctl disable ufw apt remove ufw
Устанавливаем firewalld
apt install firewalld
Включаем firewalld
будьте осторожны, если у вас были открыты сервисы в ufw
их нужно будет также открыть в firewalld
systemctl stop firewalld systemctl enable firewalld systemctl start firewalld systemctl status firewalld
По умолчанию используется зона public,
поэтому здесь она используется.
Проверяем что открыто
firewall-cmd --list-all
Открываем нужные сервисы
firewall-cmd --add-service=smtp --permanent firewall-cmd --add-service=smtps --permanent
Если нужно то pop3 и imap
firewall-cmd --add-service=imap --permanent firewall-cmd --add-service=imaps --permanent firewall-cmd --add-service=pop3 --permanent firewall-cmd --add-service=pop3s --permanent
Применяем правила
firewall-cmd --reload
Настраиваем fail2ban
cd /etc/fail2ban/ vi jail.local
[exim-pf] enabled = true filter = exim action = exim-pf logpath = /var/log/exim4/mainlog ignoreip = 192.168.150.0/24 maxretry = 5 findtime = 30m bantime = 2880m
Проверяем, что фильтр exim существует
ls /etc/fail2ban/filter.d/ | grep exim
Вывод будет примерно следующий, нужно чтобы был файл exim.conf
его не трогаем, он нужен чтобы находить нарушителей в логах Exim
exim-common.conf exim.conf exim-spam.conf
Создаем конфиг для action
cd /etc/fail2ban/action.d/ vi exim-pf.conf
[Definition] actionban = /usr/bin/firewall-cmd --add-rich-rule='rule family="ipv4" source address=<ip> reject' actionunban = /usr/bin/firewall-cmd --remove-rich-rule='rule family="ipv4" source address=<ip> reject'
Конечно iptables намного гибче и можно блокировать по портам, но его чуть дольше настраивать.
Включаем fail2ban
systemctl enable fail2ban systemctl start fail2ban
Проверяем
fail2ban-client status exim-pf
Забанить IP
fail2ban-client set exim-pf banip 92.118.38.55
Разбанить
fail2ban-client set exim-pf unbanip 92.118.38.55
Прим.:
Название exim-pf взято из fail2ban с pf во FreeBSD, название не стал менять