Мило, мило.
Я так сделал:
(только относящиеся к делу строчки)
# Generated by iptables-save v1.3.8 on Wed Sep 15 23:59:54 2010
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:SSH_CHECK - [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 192.168.17.0/255.255.255.0 -i ! eth0 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j SSH_CHECK
...
-A INPUT -i ! eth0 -j LOG
-A SSH_CHECK -m recent --set --name SSH --rsource
-A SSH_CHECK -m recent --update --seconds 60 --hitcount 3 --name SSH --rsource -j DROP
-A SSH_CHECK -j ACCEPT
COMMIT
# Completed on Wed Sep 15 23:59:54 2010
Все новые соединения направляются на проверку на предмет долбёжки.
Чтобы ускорить процесс долбления, в
/etc/ssh/sshd_config стоит добавить
MaxAuthTries 1
- тогда брутфорсеров будет скипать после двух неудачных логинов (вместо семи по умолчанию) и частота реконнектов увеличится.
Эту же цепочку, так как в ней не используется явного определения портов, можно использовать для любого порта, который надо прикрыть от долбления.
Просто написать вместо -j ACCEPT - -j SSH_CHECK...
-A INPUT -p tcp -m tcp --dport 2401 -m state --state NEW -j SSH_CHECK
добавит проверку дятлов на порту CVS сервера.