Fail2Ban позволяет обезопасить сервер от взлома путём подбора пароля. Уже писал про принцип действия в статье "Защита от подбора пароля к SSH", но решил описать процесс настройки более подробно. Всё будем делать для популярной системы Centos6. Для других систем команды установки могут отличаться.
Устанавливаем Fail2Ban
yum install fail2ban-server
Настраиваем
Заходим в папку /etc/fail2ban/ и находим там файл jail.conf. Это файл настроек программы. Он содержит настройки "по умолчанию" и перезаписывается при каждом обновлении fail2ban, поэтому не стоит в нём ничего менять. Необходимо скопировать этот файл в jail.local, в ту же папку:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
В jail.local будут хранится наши настройки. Файл можно изменять и он не будет затираться при обновлении. Если в jail.local укажем не все настройки, то недостающие будут браться из jail.conf.
Fail2Ban работает через файлы логов. К примеру, если хотим обезопасить вход по ssh, то fail2ban откроет логи входа на сервер и выяснит всё о неудачных попытках входа через ssh. А именно: периодичность неудачных входов и количество попыток. Эти данные будут использоваться для блокировки нарушителей.
Ставим защиту на ssh
Открываем jail.local и видим довольно подробные инструкции. Сначала выставим пороговые значения неудачных попыток и время, на которое нарушитель будет попадать в блокировку. Для этого находим строку (примерно 50-ая в файле):
# "bantime" is the number of seconds that a host is banned.
bantime = 3600
После нескольких неудачных попыток входа ip адрес входящего будет попадать в бан лист на час. И все подключения от этого ip будут сбрасываться. Я редко ошибаюсь при вводе пароля, поэтому установил это bantime = 360000 (блокировка на 4 дня)
Чуть ниже идут два параметра:
# A host is banned if it has generated "maxretry" during the last "findtime" seconds.
findtime = 3600# "maxretry" is the number of failures before a host get banned.
maxretry = 3
Нарушителем будет считаться тот, кто попытается сделать maxretry неудачных попыток входа в течении findtime. Т.е. если в течении 3600 секунд сделаешь 3 неудачные попытки входа, то неминуемо отправляешься в бан. Мои настройки установлены на maxretry = 2 и findtime = 36000 (2 неудачные попытки за 10 часов).
С определением наказания для нарушителей и критерием их отлова закончили. Теперь необходимо применить это наказание. Но тут нас ждёт обилие выбора (файл jail.local ниже 200-ой строки). Мы можем установить защиту на ssh, ftp, roundcube, groupoffice, drupal, sendmail, mysqld и даже counter-strike. Механизм везде одинаковый, поэтому рассмотрим на примере ssh. Находим строку [sshd] и вставляем после неё enabled = true, чтобы получилось:
[sshd]
enabled = true
Сохраняем файл jail.local. И перезапускаем fail2ban:
sudo service fail2ban restart
Скорость запуска программы зависит от размера лог файла. Ведь при каждом запуске происходит сканирование на предмет нарушений. Если вы несколько дней назад делали неудачные попытки входа и они есть в логах, то тоже попадёте в бан. Поэтому рекомендую проверить логи, чтобы не заблокировать себя любимого.
Если fail2ban настроен верно, то можно дать команду серверу fail2ban-client status. Появится список активированных "тюрем" (jail):
Чтобы посмотреть содержание тюрьмы "sshd" можно ввести:
fail2ban-client status sshd
Теперь проверим действительно ли работает Fail2Ban и запросим список заблокированных адресов через команду iptables -L
Конечно, необходимо чтобы в файле логов (по умолчанию /var/log/secure) были не успешные попытки входа. Иначе список заблокированных в iptables будет пуст.
Напоследок не забудем прописать Fail2Ban в автозагрузку командой:
chkconfig fail2ban on
Разблокировать IP
Чтобы удалить ip из бан листа ssh, необходимо ввести следующую команду в консоли:
fail2ban-client set sshd unbanip 123.123.123.123
Вместо sshd поставьте название jail, в которую попал ip адрес.
Итог
Fail2Ban обезопасит сервер от взлома путём подбора пароля. Программа довольно эффективна и не требует постоянного присмотра. Категорически рекомендую.
fail2ban - это отличный инструмент. Но пользоваться им нужно только в том случае, если ip входящего пользователя неизвестен. К примеру, на сервере с множеством сайтов ставят fail2ban для бана ботов, которые подбирают пароль к FTP.
А если вы используете статичный ip и являетесь единственным или одним из немногих пользователей, которые входят на сервер по SSH, то не стоит использовать fail2ban. Можно сэкономить системные ресурсы, если просто настроить правила фильтрации подключения через iptables. Чтобы к порту SSH имели доступ только вы со своим ip. Читайте об этом в статье: https://www.alexgur.ru/articles/5043/
При установке fail2ban на Centos через yum он ещё устанавливает за собой firewalld. Поэтому следует устанавливать fail2ban-server, а не fail2ban.