Fail2ban — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей.
Установка
Данная инструкция написана для ОС семейства Debian.
Этот пакет есть в репозитории, и базовая установка очень проста:
sudo apt-get install fail2ban
По умолчанию защита от брутфорса для SSH включена.
Основная идея Fail2ban — при превышении заданного числа неудачных вводов пароля подряд (по умолчанию — 6) бан IP, с которого были попытки подбора на заданное время (по умолчанию — 600 секунд).
Настройка
Параметры можно посмотреть и поменять в файле /etc/fail2ban/jail.conf. Существующие фильтры (т.е. правила, по которым определяется неудачная попытка ввода пароля) лежат в директории /etc/fail2ban/filter.d (можно их править или на их основе делать свои фильтры), а существующие правила реагирования — в директории /etc/fail2ban/action.d. Все файлы довольно хорошо откомментированы.
Ниже приведено несколько примеров конфигурации /etc/fail2ban/jail.conf.
Удалённый доступ
[ssh-iptables] enabled = true filter = sshd action = iptables[name=SSH, port=ssh, protocol=tcp] logpath = /var/log/secure maxretry = 3
Пример конфигурации для веб-сервера nginx
Создаем правило для бана неудачных попыток подбора доступа к не существующим ресурсам nano /etc/fail2ban/jail.d/nginx-404.conf
[nginx-404] enabled = true port = http,https filter = nginx-404 action = iptables-allports logpath = %(nginx_access_log)s bantime = 7d findtime = 10m maxretry = 3
Создаем фильтр для нашего правила nano /etc/fail2ban/filter.d/nginx-404.conf
[Definition]
failregex = ^<HOST> -.*"(GET|POST|HEAD).*HTTP.*" 404
ignoreregex =
datepattern = {^LN-BEG}
В конце всех настроек не забываем перезапустить службу для применения изменений в конфигурации systemctl restart fail2ban.service.
Дабы исключить возможность самому попасть в бан советую добавить в белый список свой IP адрес в конфигурационном файле /etc/fail2ban/jail.conf
# "ignoreip" can be a list of IP addresses, CIDR masks or DNS hosts. Fail2ban # will not ban a host which matches an address in this list. Several addresses # can be defined using space (and/or comma) separator. ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24
Комментарии