Ставим:
apt-get install -y fail2ban
Сервис сразу же запустится и будет добавлен в автозапуск.
Также fail2ban сразу создаст свою цепочку, через которую будет пропускать трафик (забаниваемые адрес) конкретного сервера (и как следвствие - крайне низкий оверхед, что плюс):
sudo iptables -nvL
Chain INPUT (policy ACCEPT 845 packets, 149K bytes)
pkts bytes target prot opt in out source destination
0 0 fail2ban-ssh tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 22
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 815 packets, 336K bytes)
pkts bytes target prot opt in out source destination
Chain fail2ban-ssh (1 references)
pkts bytes target prot opt in out source destination
0 0 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Открываем конфиг:
vi /etc/fail2ban/jail.conf
Там будет ряд блоков с заголовками вида - [ssh], это блоки правил, описывающих, какие именно сервисы контролируются и защищаются от брутфорса. Стандартно включен лишь один - ssh, он нам и нужен. Обращаю внимание! Что здесь нужно исправить порт, если он у Вас отличается от стандартного (я рекомендую это сделать!).
[ssh]
enabled = true
port = 1022
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
Теперь самое важное - внесите свой IP адрес (если он постоянный) в белый список fail2ban, это делается в том же файле в блоке:
ignoreip = 127.0.0.1 178.xx.yy.zz
Применяем измененный конфиг (если внесли туда коррективы):
/etc/init.d/fail2ban restart
Лог работы сервиса fail2ban можно смотреть так:
tail -f /var/log/fail2ban.log
Теперь настало время проверить fail2ban в деле - пробуем 6 раз ввести неверно ssh пароль со внешнего хоста, чтобы нас забанило.
Забаненые айпи можно смотреть вот так (либо в фаероволле):
sudo fail2ban-client status ssh
Status for the jail: ssh
|- filter
| |- File list: /var/log/auth.log
| |- Currently failed: 1
| `- Total failed: 7
`- action
|- Currently banned: 1
| `- IP list: 188.40.74.10
`- Total banned: 1
Раазбанивать ошибочно забаненых юзеров вот так (криво, да, но прямой механизм в fail2ban появится лишь к 0.9 версии, да и-то не факт):
sudo iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 77613 packets, 15M bytes)
num pkts bytes target prot opt in out source destination
1 974 75898 fail2ban-ssh tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 1022
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 75761 packets, 30M bytes)
num pkts bytes target prot opt in out source destination
Chain fail2ban-ssh (1 references)
num pkts bytes target prot opt in out source destination
1 25 2596 DROP all -- * * 188.xx.xx.xx 0.0.0.0/0
2 949 73302 RETURN all -- * * 0.0.0.0/0 0.0.0.0/0
Разбаниваем (очень аккуратно, чтобы ):
sudo iptables -D fail2ban-ssh 1
Источник:
http://debianclusters.cs.uni.edu/index.php/Fail2Ban:_Preventing_Brute_Force_SSH