Fail2ban — защита от брутфорса ( подбора пароля) в Ubuntu или Debian.
ail2ban — это инструмент, который отслеживает в log-файлах попытки обратится к сервисам, таким, как SSH, FTP, SMTP, HTTP и другим, и если находит постоянно повторяющиеся неудачные попытки авторизации с одного и того же IP-адреса или хоста, fail2ban блокирует дальнейшие попытки с этого IP-адреса/хоста, с помощью правила iptables(ipfw) или host.deny.
$ apt-get install fail2ban
По умолчанию мы уже получаем намного более защищенный ssh. После 3х попыток неправильного ввода пароля с одного ip адреса — он отправляется в бан. Тут же есть уже готовые примеры для ssh, exim, postfix, cyrus-imap, apache, lighttpd, named. Рассмотрим более детально некоторые параметры. Основная часть настроек fail2ban хранится в конфигурационном файле
/etc/fail2ban/jail.conf $ nano /etc/fail2ban/jail.conf
# destemail - email-адрес, на который будут отсылаться уведомления о блокировании хостов. destemail = root@localhost # mta через что отправлять письма о банах, пишем тут тот MTA, который стоит у вас на сервере Exim/sendmail/etc; mta = sendmail
# рассмотрим одну секцию [ssh] # включаем сервис enabled = true port = ssh filter = sshd # какой лог парсить, на тот случай, если вы изменяли дефолтный путь logpath = /var/log/auth.log # количество попыток, после которых банят. maxretry = 4
Не забываем перезапускать fail2ban после изменения конфигурации командой:
$ /etc/init.d/fail2ban restart
Если Вы используете правила iptables для fail2ban, в логах будут ошибки:
2011-11-03 15:36:18,402 fail2ban.jail : INFO Jail 'ssh-ddos' started 2011-11-03 15:36:18,410 fail2ban.jail : INFO Jail 'ssh' started 2011-11-03 15:51:41,522 fail2ban.actions.action: ERROR iptables -D INPUT -p tcp -m multiport --dports ssh -j fail2ban-ssh-ddos iptables -F fail2ban-ssh-ddos iptables -X fail2ban-ssh-ddos returned 100 2011-11-03 15:51:41,523 fail2ban.jail : INFO Jail 'ssh-ddos' stopped 2011-11-03 15:51:42,450 fail2ban.actions.action: ERROR iptables -D INPUT -p tcp -m multiport --dports ssh -j fail2ban-ssh iptables -F fail2ban-ssh iptables -X fail2ban-ssh returned 100
Фиксим эти ошибки. Открываем /usr/bin/fail2ban-client. Находим:
beautifier.setInputCmd(c)
и выше добавляем строку:
time.sleep(0.1)
Должно выглядеть примерно так:
def __processCmd(self, cmd, showRet = True): beautifier = Beautifier() for c in cmd: time.sleep(0.1) beautifier.setInputCmd(c)
После рестарт fail2ban:
/etc/init.d/fail2ban restart
Смотрим логи теперь, в котором уже есть заблокированные IP :
2011-11-01 03:49:47,223 fail2ban.actions: WARNING [vsftpd] Ban 64.59.72.176 2011-11-01 06:40:54,290 fail2ban.actions: WARNING [ssh] Ban 58.62.173.159 2011-11-02 02:17:28,560 fail2ban.actions: WARNING [ssh] Ban 87.204.34.123 2011-11-02 06:02:45,437 fail2ban.actions: WARNING [ssh] Ban 180.139.138.178 2011-11-02 11:10:45,424 fail2ban.actions: WARNING [ssh] Ban 196.22.160.48 2011-11-02 20:20:45,118 fail2ban.actions: WARNING [ssh] Ban 184.164.158.82 2011-11-03 08:35:48,926 fail2ban.actions: WARNING [ssh] Ban 174.46.89.102
Как удалить из fail2ban заблокированный ip
Вывести список заблокированных ip адресов можно с помощью команды:
# iptables -L -n
Удалить, например, из таблицы fail2ban-roundcube ip можно с помощью команды:
# iptables -D fail2ban-roundcube -s xxx.xxx.xxx.xxx -j DROP
или
# iptables -D fail2ban-ssh -s 91.205.177.62 -j REJECT
- где xxx.xxx.xxx.xxx - ip адрес который надо разблокировать.
Защита Postfix & SASL AUTH
- В новой версии не работает фильтр postfix-sasl, необходимо внести правку в /etc/fail2ban/filter.d/postfix-sasl.conf
[INCLUDES] before = common.conf [Definition] _daemon = postfix(-\w+)?/\w+(?:/smtp[ds])? failregex = (?i): warning: unknown+\[<HOST>\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: authentication failure) ignoreregex =
- В /etc/fail2ban/jail.conf
... [postfix-sasl] enabled = true filter = postfix-sasl mode = aggressive port = smtp,465,submission,imap,imaps,pop3,pop3s action = iptables[name=Postfix-sals, port=smtp, protocol=tcp] logpath = /var/log/mail.log bantime = 60m maxretry = 3 findtime = 60m ...