Использование fail2ban в Linux
fail2ban
/etc/fail2ban/fail2ban.conf - основной конфигурационный файл
Менять его не рекомендуется и для настройки лучше использовать файлы из каталога /etc/fail2ban/jail.d
#Установка
apk add fail2ban
#Автозапуск
rc-update add fail2ban
#Запуск
/etc/init.d/fail2ban start
#После изменений правил в конфигурации
/etc/init.d/fail2ban restart
Пример настройки по умолчанию
Параметры берутся из настроек [DEFAULT]. Если их нужно переопределить, просто добавляем их при описании правила
Далее пример настройки по умолчанию в файле /etc/fail2ban/jail.d/default.conf
[DEFAULT]
maxretry = 4
findtime = 480
bantime = 720
action = iptables
ignoreip = 127.0.0.1/8
maxretry — количество действий, которые разрешено совершить до бана
findtime — время в секундах, в течение которого учитывается maxretry
bantime — время, на которое будет блокироваться IP-адрес
action — действия, которое будет выполняться, если Fail2ban обнаружит активность, соответствующую критериям поиска
ignoreip — игнорировать защиту, если запросы приходят с перечисленных адресов
В данном примере, если в течение 8 минут (480) будет найдено 5 строк (maxretry = 4), содержащих критерий фильтра, Fail2ban заблокирует IP-адрес, с которого идет подключение на 12 минут (720);
В секции [DEFAULT] хранятся общие настройки для всех правил. Каждую из настроек можно переопределить при конфигурировании самого правила
Настройка правила
/etc/fail2ban/jail.d/service.conf
[ssh]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp]
logpath = /var/log/auth.log
maxretry = 10
findtime = 600
ssh — название для правила;
enabled позволяет быстро включать (true) или отключать (false) правило;
port — порт целевого сервиса. Принимается буквенное или цифирное обозначение;
filter — фильтр (критерий поиска), который будет использоваться для поиска подозрительных действий. По сути, это имя файла из каталога /etc/fail2ban/filter.d без .conf на конце;
action — действие, совершаемое в случае срабатывания правила. В квадратных скобках указаны название для правила, сетевой порт и протокол для блокирования;
logpath — расположение лог-файла, в котором фильтр будет искать подозрительную активность на основе описанных критериев.
В данной конфигурации переопределили параметры по умолчанию maxretry, findtime и action
Исключения
Для гарантии, что fail2ban не заблокирут компьютер администратора или другой важный узел, предусмотрена настройка исключений с помощью опции ignoreip. Опция может быть применена как на глобальном уровне (default), так и для конкретного правила
Для того, чтобы задать общую настроку, откроем наш файл default:
/etc/fail2ban/jail.d/default.conf
#Добавим ip администратора в исключение
ignoreip = 127.0.0.1/8 192.168.0.0/24 95.95.95.95
Исключения для конкретного правила ( сервиса )
[ssh]
...
ignoreip = 192.168.1.22
Действия
Файлы с настройкой действий находятся в каталоге /etc/fail2ban/action.d. Чтобы блокировать адрес, Fail2ban создает правило в брандмауэре netfilter. Для этого, чаще всего, используются утилиты iptables или firewall-cmd
iptables — создание простого правила в netfilter с помощью одноименной утилиты;
iptables-multiport — использование модуля multiports, позволяющий добавлять диапазоны портов для блокировки;
iptables-ipset — использование ipset для придания более лаконичного вида правилам;
iptables-allports — блокирует для адреса все порты;
Фильтры
Фильтры, в основном, представляют набор регулярных выражений для поиска ключевых слов в log-файлах. Они находятся в каталоге /etc/fail2ban/filter.d.
Для создания и настройки своих фильтров, можно использовать имеющиеся файлы в качестве шпаргалки.
Заблокированные адреса
#Получить список правил
sudo fail2ban-client status
#Заблокировать ip вручную
fail2ban-client set jail_name banip xx.xx.xx.xx
#Например
fail2ban-client set sshd banip 223.178.96.155
#Статистика заблокированных адресов для конкретного правила
fail2ban-client status <имя правила>
#Чтобы получить весь список заблокированных адресов
fail2ban-client banned
#Список заблокированных адресов через iptables
iptables -L -n --line
#Удаление адреса из списка
fail2ban-client set <имя правила> unbanip
#Удаление адреса из списка через iptables
iptables -D <цепочка правил> -s IP-адрес
Примеры фильтров и правил
ssh
failregex = Failed [-/\w]+ for .* from port \d* ssh2
sshd\[.*\]: Invalid user .* from port \d*
sshd\[.*\]: banner exchange: Connection from port \d*
sshd\[.*\]: ssh_dispatch_run_fatal: Connection from port \d*
sshd\[.*\]: Failed password for invalid user .* port \d*
sshd\[.*\]: Connection closed by port \d*
sshd\[.*\]: Connection reset by port \d*
sshd\[.*\]: Received disconnect from port \d*:[0-9]+: \[preauth\]
sshd\[.*\]: Disconnected from invalid user .* port \d* \[preauth\]
#Правило
[sshd]
enabled = true
filter = alpine-sshd
port = ssh
logpath = /var/log/messages
maxretry = 5
bantime = 1w
findtime = 1w
ignoreip = 127.0.0.1/8 184.217.198.21 196.91.20.167 80.87.198.14
[sshd-ddos]
enabled = true
filter = alpine-sshd-ddos
port = ssh
logpath = /var/log/messages
maxretry = 5
bantime = 1w
findtime = 1w
ignoreip = 127.0.0.1/8 184.217.198.21 196.91.20.167 80.87.198.14
[recidive]
enabled = true
ignoreip = 127.0.0.1/8 184.217.198.21 196.91.20.167 80.87.198.14
Источники
Связанные темы
Поиск уязвимостей и следов взлома в Linux
Использование iptables в linux
Базовые понятие о настройках и безопасности в сети
Саздание сертификатов SSL (TLS) для сайта
Мониторинг событий в linux с помощью auditd