Установка настройка Fail2ban
Зачем нужен Fail2ban
Что бы изменять правила брандмауэра для временной блокировки айпи-адресов с которых происходят многократные неудачные попытки ввода пароля. А так же попытки сканировать на уязвимости, назойлевых ботов. Из коробки Fail2Ban поставляется с фильтрами для различных сервисов (apache, courier, ssh и т.д.). Приложение работает на основе анализа логов сервисов установленных на сервере и использует правила заданные пользователем или по умолчанию, для блокировки подозрительной активности идущей с ip адресов. Это очень нужный и обязательный сервис для сервера.
Установка Fail2ban в Debian
Перед установкой обновляем пакеты и устанавливаем само приложение, оно доступно из репозитория Дебиан:
Код: Выделить всё
sudo apt update
sudo apt upgrade -y
sudo apt install fail2ban -y
Конфигурационные файлы по умолчанию не изменяют, потому что при следующем обновлении все ваши настройки будут потеряны. Поэтому для настроек создается отдельный файл в котором производятся пользовательские настройки. Создать файл пользовательских настроек Fail2ban скопировав основной файл с настройками:
Код: Выделить всё
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Код: Выделить всё
sudo nano /etc/fail2ban/jail.local
ignoreip - по умолчанию ignoreip = 127.0.0.1/8 ::1 здесь указываем список ip адресов, которые нужно исключить из алгоритмов Fail2ban. К ним не будут применяться ограничения. Диапазоны и IP адресов стоит разделить пробелом. Сюда можно добавить локальный ip, а также свою домашнюю подсеть, чтобы у вас не возникло проблем при входе. Например ignoreip = 127.0.0.1/8 192.168.0.0/24, но надо быть осторожным с этим разрешением и не включать его, мало ли злоумышленники будут иметь доступ в вашу локальную сеть. Главное не забаниться самому, поэтому для доступа по ssh обязательно настроить вход по ключу и для еще более большей надежности сделать двухфакторную аутентификацию.
bantime - по умолчанию bantime = 10m указывает время, на которое клиенту буде закрыт доступ к серверу, если он не сможет авторизоваться, принимает значение в секундах, можно указать h - час , m - минут
findtime - по умолчанию findtime = 10m время в секундах, на протяжении которого рассчитывается maxretry
maxretry - по умолчанию maxretry = 5 указывает количество попыток перед тем, как доступ будет заблокирован
С такими настройками по умолчанию блокировка произойдет,на 10 минут (bantime), если в течении 10 минут (findtime) 5 раз (maxretry) будут неудачные попытки ввода данных, например логин/пароль.
Для активации защиты определенного сервиса необходимо включить соответствующий jail это можно сделать несколькими способами непосредственно в файле /etc/fail2ban/jail.local или создать в папке /etc/fail2ban/jail.d/ свой файл с настройками джаилов, например my-jail.conf
Активация JAIL в файле jail.local
Все названия джайлов заключены в квадратные скобки. По умолчанию включен только sshd причем включён в файле defaults-debian.conf . Команда на включения jail - enabled = true. Открыть и закомментировать включение джайла ssh потому что включим его в jail.local .
Код: Выделить всё
sudo nano /etc/fail2ban/jail.d/defaults-debian.conf
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Для примера включим джайл для ssh и настроим. Находим в файле sudo nano /etc/fail2ban/jail.local запись [sshd] это название джайла и после него дописываем следующие строки:
Включение джайла
Код: Выделить всё
enabled = true
Правило парсинга лога для выявления атаки. Все правила парсинга для различных jail находятся в каталоге /etc/fail2ban/filter.d вдаваться в подробности их создания это уже другая тема.
Код: Выделить всё
filter = sshd
Код: Выделить всё
maxretry = 3
Код: Выделить всё
findtime = 5m
Код: Выделить всё
bantime = 24h
Код: Выделить всё
[sshd]
# To use more aggressive sshd modes set filter parameter "mode" in jail.local:
# normal (default), ddos, extra or aggressive (combines all).
# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details.
#mode = normal
enabled = true
filter = sshd
maxretry = 3
findtime = 5m
bantime = 24h
port = ssh
logpath = %(sshd_log)s
backend = %(sshd_backend)s
logpath - путь к файлу логов оставляем по умолчанию. Если что логи авторизации по ssh записываются в /var/log/auth.log. Если путь менялся его нужно указать, ибо по ним анализируются возможные атаки.
banaction = iptables-multiport - действие по бану дописывать не стал, он и так по умолчанию прописан. Все действия по бану находятся в каталоге /etc/fail2ban/action.d и это то же отдельная тема для ее раскрытия.
Активация JAIL в пользовательском файле
ВНИМАНИЕ - если сервис не установлен, а к нему активируется джайл, ошибки при проверки конфигурации не будет. А Fail2ban работать не будет в статусе будет ошибка.
Я считаю активация джайлов в отдельных файлах более наглядна и легче редактируемая, можно все записать в отдельный файл или дать каждому джайлу свой именной файл для простоты его включения или выключения, или редактирования, чем листать длинную портянку с записями.
По умолчанию джайлы для апач разделены на несколько частей, находятся под общим закомментированым названием HTTP servers, сделаем файл в каталоге sudo nano /etc/fail2ban/jail.d/apache.conf и включим некоторые из джайлов для сервера апач.
Код: Выделить всё
# выявляем неудачные попытки ввода пароля
[apache-auth]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 3
bantime = 12h
# выявляем потенциальные сканирования для применения эксплойтов и php уязвимостей
[apache-noscript]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 3
bantime = 12h
# выявляем попытки переполнения Апача
[apache-overflows]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 2
bantime = 12h
# выявляем неудачные попытки в поиске домашней директории на сервере
[apache-nohome]
enabled = true
port = http,https
logpath = %(apache_error_log)s
maxretry = 2
bantime = 12h
Закомментировал правило [apache-auth] потому что оно меня блокирует, когда редактирую страницы в вордпресс. Причины выясняю. Можно не комментировать, а добавить строчку в этом джайле ignoreip = мой_айпи. Но это не вариант, потому что у меня динамический айпи, каждый раз сюда бегать и править не вариант.
В плагине WP-Security- Файрвол убрал галку Полностью блокировать доступ к XMLRPC и все заработало, точнее меня файл2бан перестал банить.
Это не все jail , будет время напишу про остальные.
Проверка конфигурации и перезапуск Fail2ban
После любых изменений в конфигурации необходимо ее проверить командой:
Код: Выделить всё
sudo fail2ban-client -d
Код: Выделить всё
sudo systemctl restart fail2ban
Код: Выделить всё
sudo systemctl status fail2ban
Код: Выделить всё
sudo journalctl -b -u fail2ban
Код: Выделить всё
sudo nano /var/log/fail2ban.log
Код: Выделить всё
sudo fail2ban-client status
Код: Выделить всё
Status
|- Number of jail: 1
***- Jail list: sshd
Код: Выделить всё
sudo fail2ban-client status sshd
Разбанить / забанить вручную
Снять блокировку с айпи-адреса можно командой
Код: Выделить всё
sudo fail2ban-client set sshd unbanip IPADDRESS
Код: Выделить всё
sudo fail2ban-client set sshd banip IPADDRESS