Fail2Ban – это программа для защиты серверов от Brute force атак методом перебора паролей, отслеживая попытки обращения к сервисам и при повторяющихся неудачных попытках авторизации блокирует доступ к ресурсу с этого IP - адреса, с помощью правила iptables(ipfw) или host.deny.
Содержание статьи
- Поддерживаемые сервисы
- Установка fail2ban
- Настройка конфигурационных файлов решения
- Примеры настроек под определённые службы
- Создание и проверка правила
- Вывод
Поддерживаемые сервисы
В Fail2ban присутствуют фильтры для следующих сервисов:
Установка fail2ban
В репозиториях Ubuntu присутствует этот пакет:
apt show fail2ban
Устанавливаем пакет:
apt install fail2ban
Проверяем статус службы:
systemctl status fail2ban
Должно быть: Active
Настройка конфигурационных файлов решения
Основные конфигурационные параметры можно посмотреть и поменять в файле /etc/fail2ban/jail.conf
Существующие фильтры по программному обеспечению находятся по адресу /etc/fail2ban/filter.d
Фильтры при необходимости можно править или на основе готовых делать свои фильтры
Существующие правила реагирования находятся в директории /etc/fail2ban/action.d
Примеры настроек под определённые службы
Примеры настроек блокировки попыток подбора паролей в конфигурационном файле /etc/fail2ban/jail.conf
Удалённый доступ по SSH
[ssh-iptables]
enabled = true //фильтр включен
filter = sshd //имя фильтра
action = iptables[name=SSH, port=ssh, protocol=tcp] //параметры правила блокировки для файрволла
logpath = /var/log/secure //Лог файл
findtime = 300 //промежуток времени, в течении которого должны быть зарегистрированы 3 неудачные попытки авторизации для блокировки адресата.
maxretry = 3 //3 неудачные попытки
bantime = 7200 //время блокировки в секундах
Почтовый сервер - Dovecot
[dovecot-iptables]
enabled = true
filter = dovecot
action = iptables-multiport[name=DCOT, port="pop3,pop3s,imap,imaps", protocol=tcp]
logpath = /var/log/maillog
findtime = 300
maxretry = 5
bantime = 3600
Почтовый сервер - Postfix
[postfix-iptables]
enabled = true
filter = postfix
action = iptables-multiport[name=PFIX, port="smtp,smtps", protocol=tcp]
logpath = /var/log/maillog
findtime = 300
maxretry = 5
bantime = 3600
База данных MySQL
[mysqld-auth]
enabled = true
filter = mysqld-auth
port = 3306
logpath = /var/log/mysql/error.log
Создание и проверка правила
Создаем конфигурационный файл service_1C.conf в директории /etc/fail2ban/jail.conf:
# имя сервиса
[service_1C]
# включаем фильтр
enabled = true
# используемые порты
port = http,https
# имя фильтра
filter = service_1C
# лог файл сервиса для анализа
logpath = /var/log/myservice.log
# правило блокировки: 3 неудачных попытки авторизации в течении 5-ти минут
maxretry = 3
findtime = 300
# блокируем на час адресата
bantime = 3600
ctrl+o, ctrl+x
Перезапускаем fail2ban:
systemctl restart fail2ban
Проверим статус клиентского приложения:
fail2ban-client status
выводим
fail2ban-client status myservice
Работа со списком заблокированных адресов
Получить список правил можно командой:
fail2ban-client status
Получаем список заблокированных адресов для конкретного правила:
fail2ban-client status <имя правила>
При наличие в списке заблокированных адресов мы увидим:
`- action
|- Currently banned: 2
| `- IP list: 8.8.8.8 8.8.4.4
С помощью iptables:
iptables -L -n --line
Удаление адресов из списка блокировки
Средствами fail2ban:
fail2ban-client set ssh unbanip 8.8.8.8
С помощью iptables:
iptables -D fail2ban-ssh -s 8.8.8.8
С помощью ufw:
Вывод
Fail2ban отличное решение позволяющее на основе анализа логов блокировать тех, кто пытается получить несанкционированный доступ, подобрав пароль к вашему сервису. Например, защитить почтовые ящики от взлома путем перебора паролей или многократного запроса какого-либо ресурса.
Базовая настройка
Основной конфигурационный файл находится по пути /etc/fail2ban/jail.conf. Однако, его не рекомендуется менять и для настройки используют подключаемые файлы из каталога /etc/fail2ban/jail.d.
Для начала создаем первый дефолтный файл, настройки которого будут применяться ко:
nano /etc/fail2ban/jail.d/default.conf
Приведем его к виду. Настройка будет немного отличаться в зависимости от операционной системы.
[DEFAULT]
maxretry = 3
findtime = 500
bantime = 3600
action = iptables
ignoreip = 127.0.0.1/8
Расшифровка параметров конфигурации:
- maxretry — количество неудачных попыток до блокировки адресата
- findtime — время в течение которого учитываются неудачные попытки авторизации
- bantime — время, на которое блокируется адресат
- action — действия, которое будет выполняться при срабатывании блокировки
- ignoreip - ip адреса запросы от которых не обрабатываются системой
* В секции [DEFAULT] хранятся общие настройки для всех правил. Каждую из настроек можно переопределить при конфигурировании самого правила.
Настройка правил
Для нового правила необходимо создать конфигурационный файл в каталоге /etc/fail2ban/jail.d, например:
nano /etc/fail2ban/jail.d/srv_1c.conf
[srv_1c]
enabled = true
port = 1540,1541,1560-1569
filter = srv_1c
action = iptables[name=srv_1c, port=1540,1541,1560-1569, 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 автоматически создается правило для SSH, поэтому нет необходимости его создавать. Получить список всех правил можно командами, описанными ниже.
Чтобы изменения вступили в силу, перезапускаем сервис:
systemctl restart fail2ban
* в старых версиях service fail2ban restart.
Исключения
Для гарантии, что fail2ban не заблокирут компьютер администратора или другой важный узел, предусмотрена настройка исключений с помощью опции ignoreip. Опция может быть применена как на глобальном уровне (default), так и для конкретного правила.
Для того, чтобы задать общую настроку, откроем наш файл default:
vi /etc/fail2ban/jail.d/default.conf
... и добавим:
[DEFAULT]
...
ignoreip = 192.168.0.0/24 95.95.95.95
* в данном примере под фильтры не будут попадать адреса с 192.168.0.1 по 192.168.0.255 и адрес 95.95.95.95.
Для конкретного правила настройки будут, примерно, следующие:
vi /etc/fail2ban/jail.d/ssh.conf
[ssh]
...
ignoreip = 192.168.1.22
* в данном примере мы добавили в белый список один адрес 192.168.1.22, который не будет блокироваться.
Обязательно перезагружаемся, чтобы настройки применились:
systemctl restart fail2ban
Действия и фильтры
Файлы с настройкой действий находятся в каталоге /etc/fail2ban/action.d. Чтобы блокировать адрес, Fail2ban создает правило в брандмауэре netfilter. Для этого, чаще всего, используются утилиты iptables
Примеры правил
SSH (iptables)
nano /etc/fail2ban/jail.d/ssh.conf
[ssh]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd]
logpath = /var/log/auth.log
Asterisk
nano /etc/fail2ban/jail.d/asterisk.conf
[asterisk]
enabled = true
filter = asterisk
action = iptables-allports[name=asterisk, protocol=all]
logpath = /var/log/asterisk/messages
NGINX
nano /etc/fail2ban/jail.d/nginx.conf
[nginx]
enabled = true
port = http,https
filter = nginx-http-auth
action = iptables-multiport[name=nginx, port="http,https", protocol=tcp]
logpath = /var/log/nginx/error.log