Admin » 08 май 2022, 12:44
Обсуждение статьи
Fail2ban
Установка настройка Fail2ban
Зачем нужен Fail2ban
Что бы изменять правила брандмауэра для временной блокировки айпи-адресов с которых происходят многократные неудачные попытки ввода пароля. А так же попытки сканировать на уязвимости, назойлевых ботов. Из коробки Fail2Ban поставляется с фильтрами для различных сервисов (apache, courier, ssh и т.д.). Приложение работает на основе анализа логов сервисов установленных на сервере и использует правила заданные пользователем или по умолчанию, для блокировки подозрительной активности идущей с ip адресов. Это очень нужный и обязательный сервис для сервера.
Установка Fail2ban в Debian
Перед установкой обновляем пакеты и устанавливаем само приложение, оно доступно из репозитория Дебиан:
Код: Выделить всё
sudo apt update
sudo apt upgrade -y
sudo apt install fail2ban -y
Настройка Fail2ban в Debian
Конфигурационные файлы по умолчанию не изменяют, потому что при следующем обновлении все ваши настройки будут потеряны. Поэтому для настроек создается отдельный файл в котором производятся пользовательские настройки. Создать файл пользовательских настроек Fail2ban скопировав основной файл с настройками:
Код: Выделить всё
sudo cp /etc/fail2ban/jail.conf /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
Поставить решетку перед #enabled = true
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Для примера включим джайл для ssh и настроим. Находим в файле sudo nano /etc/fail2ban/jail.local запись [sshd] это название джайла и после него дописываем следующие строки:
Включение джайла
Следующие настройки можно не вводить, если вас устраивает, то что установлено по умолчанию. filter -применяется по умолчанию одноименный правилу (джайл), можно написать собственный фильтр на основе логов, но это отдельная тема. Сделаем персональные настройки для ssh отличные от параметров по умолчанию.
Правило парсинга лога для выявления атаки. Все правила парсинга для различных jail находятся в каталоге /etc/fail2ban/filter.d вдаваться в подробности их создания это уже другая тема.
Максимальное число ошибок 3 перед баном
Время 5 минут в течении которого должен ввестись правильный пароль исходя из числа попыток maxretry
Время бана айпи адреса - сутки
Должна получится такая запись. Можно просто скопировать и вставить примерно 280 строка.
Код: Выделить всё
[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
Если изменялся порт доступа к ssh, то обязательно нужно его указать
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
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Закомментировал правило [apache-auth] потому что оно меня блокирует, когда редактирую страницы в вордпресс. Причины выясняю. Можно не комментировать, а добавить строчку в этом джайле ignoreip = мой_айпи. Но это не вариант, потому что у меня динамический айпи, каждый раз сюда бегать и править не вариант.
В плагине WP-Security- Файрвол убрал галку Полностью блокировать доступ к XMLRPC и все заработало, точнее меня файл2бан перестал банить.
Это не все jail , будет время напишу про остальные.
Проверка конфигурации и перезапуск Fail2ban
После любых изменений в конфигурации необходимо ее проверить командой:
Перезапустить Fail2ban , что бы изменения вступили в силу.
Проверка работы Fail2ban
Просмотр логов Fail2ban
Или открыть файл:
Просмотр активных jail и статистика
Вывод будет примерно таким
Код: Выделить всё
Status
|- Number of jail: 1
***- Jail list: sshd
Статистику по активному джайлу можно узнать командой
На выходе увидим путь к файлу логов который обрабатывается, колличество неудачных попыток, колличество забаненых на данный момент и забаненые ip-адреса.
Разбанить / забанить вручную
Снять блокировку с айпи-адреса можно командой
Код: Выделить всё
sudo fail2ban-client set sshd unbanip IPADDRESS
Забанить ip
Код: Выделить всё
sudo fail2ban-client set sshd banip IPADDRESS
Обсуждение статьи [url=https://wildserver.ru/fail2ban/]Fail2ban[/url]
[size=200][b]Установка настройка Fail2ban[/b][/size]
[size=150][b]Зачем нужен Fail2ban[/b][/size]
[size=100]Что бы изменять правила брандмауэра для временной блокировки айпи-адресов с которых происходят многократные неудачные попытки ввода пароля. А так же попытки сканировать на уязвимости, назойлевых ботов. Из коробки Fail2Ban поставляется с фильтрами для различных сервисов (apache, courier, ssh и т.д.). Приложение работает на основе анализа логов сервисов установленных на сервере и использует правила заданные пользователем или по умолчанию, для блокировки подозрительной активности идущей с ip адресов. Это очень нужный и обязательный сервис для сервера.[/size]
[size=150][b]Установка Fail2ban в Debian[/b][/size]
[size=100]Перед установкой обновляем пакеты и устанавливаем само приложение, оно доступно из репозитория Дебиан:[/size]
[code]sudo apt update
sudo apt upgrade -y
sudo apt install fail2ban -y[/code]
[size=150][b]Настройка Fail2ban в Debian[/b][/size]
[size=100]Конфигурационные файлы по умолчанию не изменяют, потому что при следующем обновлении все ваши настройки будут потеряны. Поэтому для настроек создается отдельный файл в котором производятся пользовательские настройки. Создать файл пользовательских настроек Fail2ban скопировав основной файл с настройками:[/size]
[code]sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local[/code]
[size=100]Откроем файл настроек и разберем некоторые настройки:[/size]
[code]sudo nano /etc/fail2ban/jail.local[/code]
[size=100]Некоторые настройки закомментированы. Найдем и включим их убрав символ решетки.[/size]
[size=100][b][i]ignoreip[/i][/b] - по умолчанию [b][i]ignoreip = 127.0.0.1/8 ::1[/i][/b] здесь указываем список ip адресов, которые нужно исключить из алгоритмов Fail2ban. К ним не будут применяться ограничения. Диапазоны и IP адресов стоит разделить пробелом. Сюда можно добавить локальный ip, а также свою домашнюю подсеть, чтобы у вас не возникло проблем при входе. Например [b][i]ignoreip = 127.0.0.1/8 192.168.0.0/24[/i][/b], но [b][i]надо быть осторожным с этим разрешением[/i][/b] и не включать его, мало ли злоумышленники будут иметь доступ в вашу локальную сеть. Главное не забаниться самому, поэтому для доступа по [b][i]ssh[/i][/b] обязательно [url=https://wildserver.ru/ssh-server/]настроить вход по ключу[/url] и для еще более большей надежности сделать двухфакторную аутентификацию.[/size]
[size=100][b][i]bantime[/i][/b] - по умолчанию [b][i]bantime = 10m[/i][/b] указывает время, на которое клиенту буде закрыт доступ к серверу, если он не сможет авторизоваться, принимает значение в секундах, можно указать [b][i]h[/i][/b] - час , [b][i]m[/i][/b] - минут[/size]
[size=100][b][i]findtime[/i][/b] - по умолчанию [b][i]findtime = 10m[/i][/b] время в секундах, на протяжении которого рассчитывается maxretry[/size]
[size=100][b][i]maxretry[/i][/b] - по умолчанию [b][i]maxretry = 5[/i][/b] указывает количество попыток перед тем, как доступ будет заблокирован[/size]
[size=100]С такими настройками по умолчанию блокировка произойдет,на 10 минут ([b][i]bantime[/i][/b]), если в течении 10 минут ([b][i]findtime[/i][/b]) 5 раз ([b][i]maxretry[/i][/b]) будут неудачные попытки ввода данных, например логин/пароль.[/size]
[size=100]Для активации защиты определенного сервиса необходимо включить соответствующий [b][i]jail[/i][/b] это можно сделать несколькими способами непосредственно в файле [b][i]/etc/fail2ban/jail.local[/i][/b] или создать в папке [b][i]/etc/fail2ban/jail.d/[/i][/b] свой файл с настройками джаилов, например [b][i]my-jail.conf[/i][/b][/size]
[size=125][b]Активация JAIL в файле jail.local[/b][/size]
[size=100]Все названия джайлов заключены в квадратные скобки. По умолчанию включен только sshd причем включён в файле [b][i]defaults-debian.conf[/i][/b] . Команда на включения jail - [b][i]enabled = true[/i][/b]. Открыть и закомментировать включение джайла ssh потому что включим его в [b][i]jail.local[/i][/b] .[/size]
[code]sudo nano /etc/fail2ban/jail.d/defaults-debian.conf[/code]
[size=100]Поставить решетку перед [b][i]#enabled = true[/i][/b][/size]
[size=100]Сохранить файл [b][i]Ctrl+O[/i][/b] [b][i]Enter[/i][/b], закрыть [b][i]Ctrl+X[/i][/b][/size]
[size=100]Для примера включим джайл для [b][i]ssh[/i][/b] и настроим. Находим в файле [b][i]sudo nano /etc/fail2ban/jail.local[/i][/b] запись [b][i][sshd][/i][/b] это название джайла и после него дописываем следующие строки:[/size]
[size=100][b][i]Включение джайла[/i][/b][/size]
[code]enabled = true[/code]
[size=100]Следующие настройки можно не вводить, если вас устраивает, то что установлено по умолчанию. [b][i]filter[/i][/b] -применяется по умолчанию одноименный правилу (джайл), можно написать собственный фильтр на основе логов, но это отдельная тема. Сделаем персональные настройки для ssh отличные от параметров по умолчанию.[/size]
[size=100][b][i]Правило парсинга лога для выявления атаки[/i][/b]. Все правила парсинга для различных [b][i]jail[/i][/b] находятся в каталоге [b][i]/etc/fail2ban/filter.d[/i][/b] вдаваться в подробности их создания это уже другая тема.[/size]
[code]filter = sshd[/code]
[size=100][b][i]Максимальное число ошибок[/i][/b] 3 перед баном[/size]
[code]maxretry = 3[/code]
[size=100][b][i]Время[/i][/b] 5 минут в течении которого должен ввестись правильный пароль исходя из числа попыток [b][i]maxretry[/i][/b][/size]
[code]findtime = 5m[/code]
[size=100][b][i]Время бана[/i][/b] айпи адреса - сутки[/size]
[code]bantime = 24h[/code]
[size=100]Должна получится такая запись. Можно просто скопировать и вставить примерно 280 строка.[/size]
[code][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[/code]
[size=100][b][i]Если изменялся порт доступа к ssh, то обязательно нужно его указать[/i][/b][/size]
[size=100][b][i]logpath[/i][/b] - путь к файлу логов оставляем по умолчанию. Если что логи авторизации по ssh записываются в [b][i]/var/log/auth.log[/i][/b]. Если путь менялся его нужно указать, ибо по ним анализируются возможные атаки.[/size]
[size=100][b][i]banaction = iptables-multiport[/i][/b] - действие по бану дописывать не стал, он и так по умолчанию прописан. Все действия по бану находятся в каталоге [b][i]/etc/fail2ban/action.d[/i][/b] и это то же отдельная тема для ее раскрытия.[/size]
[size=125][b]Активация JAIL в пользовательском файле[/b][/size]
[size=100][b][i]ВНИМАНИЕ[/i][/b] - если сервис не установлен, а к нему активируется джайл, ошибки при проверки конфигурации не будет. А Fail2ban работать не будет в статусе будет ошибка.[/size]
[size=100]Я считаю активация джайлов в отдельных файлах более наглядна и легче редактируемая, можно все записать в отдельный файл или дать каждому джайлу свой именной файл для простоты его включения или выключения, или редактирования, чем листать длинную портянку с записями.[/size]
[size=100]По умолчанию джайлы для апач разделены на несколько частей, находятся под общим закомментированым названием [b][i]HTTP servers[/i][/b], сделаем файл в каталоге [b][i]sudo nano /etc/fail2ban/jail.d/apache.conf[/i][/b] и включим некоторые из джайлов для сервера апач.[/size]
[code]# выявляем неудачные попытки ввода пароля
[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[/code]
[size=100]Сохранить файл [b][i]Ctrl+O[/i][/b] [b][i]Enter[/i][/b], закрыть [b][i]Ctrl+X[/i][/b][/size]
[size=100]Закомментировал правило [b][i][apache-auth][/i][/b] потому что оно меня блокирует, когда редактирую страницы в вордпресс. Причины выясняю. Можно не комментировать, а добавить строчку в этом джайле [b][i]ignoreip = мой_айпи[/i][/b]. Но это не вариант, потому что у меня динамический айпи, каждый раз сюда бегать и править не вариант.[/size]
[size=100]В плагине WP-Security- Файрвол убрал галку [b][i]Полностью блокировать доступ к XMLRPC[/i][/b] и все заработало, точнее меня файл2бан перестал банить.[/size]
[size=100]Это не все [b][i]jail[/i][/b] , будет время напишу про остальные.[/size]
[size=150][b]Проверка конфигурации и перезапуск Fail2ban[/b][/size]
[size=100]После любых изменений в конфигурации необходимо ее проверить командой:[/size]
[code]sudo fail2ban-client -d[/code]
[size=100]Перезапустить Fail2ban , что бы изменения вступили в силу.[/size]
[code]sudo systemctl restart fail2ban[/code]
[size=150][b]Проверка работы Fail2ban[/b][/size]
[code]sudo systemctl status fail2ban[/code]
[size=150][b]Просмотр логов Fail2ban[/b][/size]
[code]sudo journalctl -b -u fail2ban[/code]
[size=100]Или открыть файл:[/size]
[code]sudo nano /var/log/fail2ban.log[/code]
[size=150][b]Просмотр активных jail и статистика[/b][/size]
[code]sudo fail2ban-client status[/code]
[size=100]Вывод будет примерно таким[/size]
[code]Status
|- Number of jail: 1
***- Jail list: sshd[/code]
[size=100]Статистику по активному джайлу можно узнать командой[/size]
[code]sudo fail2ban-client status sshd[/code]
[size=100]На выходе увидим путь к файлу логов который обрабатывается, колличество неудачных попыток, колличество забаненых на данный момент и забаненые ip-адреса.[/size]
[size=150][b]Разбанить / забанить вручную[/b][/size]
[size=100]Снять блокировку с айпи-адреса можно командой[/size]
[code]sudo fail2ban-client set sshd unbanip IPADDRESS[/code]
[size=100]Забанить ip[/size]
[code]sudo fail2ban-client set sshd banip IPADDRESS[/code]