ОГЛАВЛЕНИЕ
Основные команды Fail2Ban
Что такое Fail2Ban
Fail2Ban установка и настройка
Fail2Ban
Список полезных команд для управления и мониторинга Fail2Ban:
Проверка статуса Fail2Ban:
sudo systemctl status fail2banЗапуск Fail2Ban:
sudo systemctl start fail2banОстановка Fail2Ban:
sudo systemctl stop fail2banПерезапуск Fail2Ban:
Перезагрузка конфигурации Fail2Ban без остановки службы:
Проверка состояния всех jail'ов:
sudo fail2ban-client statusПроверка состояния конкретного jail:
sudo fail2ban-client status <название_jail>Пример для SSH:
sudo fail2ban-client status sshdПросмотр заблокированных IP-адресов для конкретного jail:
sudo fail2ban-client status <название_jail> | grep "Banned IP list"Разблокировка IP-адреса (напр. для jail 'sshd'):
sudo fail2ban-client set <название_jail> unbanip <IP-адрес>Пример:
sudo fail2ban-client set sshd unbanip 192.168.1.100Получение информации о конкретном jail:
sudo fail2ban-client get <название_jail> <параметр>Пример для получения настроек
bantimejail'а:sudo fail2ban-client get sshd bantimeТестирование конфигурации Fail2Ban: Вы можете протестировать конфигурацию Fail2Ban на наличие синтаксических ошибок, не запуская службу:
sudo fail2ban-regex <путь_к_логу> <путь_к_фильтру>Просмотр логов Fail2Ban: Логи Fail2Ban обычно находятся в
/var/log/fail2ban.log. Вы можете просматривать их с помощью:sudo tail -f /var/log/fail2ban.log
Проверить статус Fail2Ban:
sudo systemctl status fail2banПроверить состояние jail для SSH:
sudo fail2ban-client status sshdРазблокировать IP-адрес 192.168.1.100 для jail 'sshd':
sudo fail2ban-client set sshd unbanip 192.168.1.100
Эти команды помогут вам эффективно управлять Fail2Ban, контролировать состояние системы безопасности и выполнять задачи по администрированию.
Fail2Ban — это инструмент для повышения безопасности серверов и сетевых систем. Его основная функция заключается в предотвращении атак типа brute force и других видов несанкционированного доступа путем автоматической блокировки IP-адресов, которые демонстрируют подозрительное поведение.
Fail2Ban — это программное обеспечение, которое следит за логами системных сервисов и обнаруживает подозрительное поведение, такое как многочисленные неудачные попытки входа. При обнаружении такого поведения, Fail2Ban автоматически добавляет правила в фаервол, чтобы заблокировать IP-адреса злоумышленников.
Мониторинг логов:
Fail2Ban анализирует журналы логов различных сервисов (например, SSH, Apache, Nginx) в поисках признаков атак или неудачных попыток входа.
Обнаружение подозрительного поведения:
Когда Fail2Ban обнаруживает определённое количество неудачных попыток входа или другие подозрительные действия, он определяет, что IP-адрес нарушителя должен быть заблокирован.
Блокировка IP-адресов:
Fail2Ban автоматически добавляет правила в фаервол (например, iptables), чтобы блокировать доступ с этих IP-адресов на определённое время.
Оповещение:
Fail2Ban может также отправлять уведомления администраторам о подозрительном поведении и блокировках.
Защита от атак brute force:
Fail2Ban защищает серверы от атак brute force, при которых злоумышленники пытаются подобрать пароли с использованием автоматизированных инструментов.
Повышение безопасности:
За счёт автоматической блокировки подозрительных IP-адресов Fail2Ban снижает риск успешного взлома системы и увеличивает общую безопасность сервера.
Снижение нагрузки на администраторов:
Автоматическая блокировка устраняет необходимость вручную отслеживать и блокировать злонамеренные IP-адреса, что экономит время и усилия системных администраторов.
Настройка и гибкость:
Fail2Ban предоставляет возможность настройки различных фильтров и действий в зависимости от конкретных потребностей, таких как блокировка различных сервисов и использование разных фаерволов.
Фильтры:
Определяют, какие строки в логах являются подозрительными. Фильтры настраиваются в виде регулярных выражений.
Действия:
Определяют, что делать, когда обнаружено подозрительное поведение, например, блокировать IP-адрес с помощью iptables.
Jail'ы:
Определяют, какие фильтры и действия применяются к каким сервисам. Каждый jail соответствует конкретному сервису (например, SSH, Apache) и имеет свои собственные настройки.
Fail2Ban является важным инструментом для обеспечения безопасности серверов и сетевых систем, помогая предотвращать атаки и защищать ресурсы от несанкционированного доступа.
Установка скриптом
После выполнения скрипта переходим в раздел “Основная конфигурация” и следуем дальнейшим инструкция.
bash <(curl -s https://raw.githubusercontent.com/odanoder/scripts/main/firewall/fail2ban/install_fail2ban.sh)
Ручная установка
Обновите список пакетов:
sudo apt update && sudo apt upgrade -y
Установите Fail2Ban:
sudo apt install fail2ban -y
Проверка статуса Fail2Ban. Должно быть Active: inactive (dead). Статус inactive (dead) для службы Fail2Ban означает, что служба не запущена:
sudo systemctl status fail2ban
Создайте резервную копию оригинального конфигурационного файла или создать собственный фаил. Оригинальный файл конфигурации jail.conf содержит стандартные настройки Fail2Ban, которые могут быть перезаписаны при обновлениях пакета. Чтобы избежать изменений в оригинальном файле и сохранить возможность легко возвращаться к стандартным настройкам, создайте резервную копию и используйте файл jail.local (предназначен для добавления и изменения настроек без изменения оригинального файла jail.conf) для пользовательских настроек:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
/etc/fail2ban/jail.conf:
Назначение: Основной конфигурационный файл с заводскими настройками. Изменения в этом файле могут быть перезаписаны при обновлениях пакета, поэтому не рекомендуется изменять его напрямую.
/etc/fail2ban/jail.local:
Назначение: Файл для пользовательских настроек и переопределения настроек из jail.conf. Используется для добавления или изменения настроек, чтобы изменения не были утеряны при обновлениях.
/var/log/fail2ban.log:
Назначение: Лог-файл Fail2Ban, где записываются все события и действия. Полезен для диагностики и мониторинга активности Fail2Ban.
/etc/fail2ban/filter.d/:
Назначение: Директория с фильтрами для различных сервисов. Фильтры определяют, какие строки в логах считаются подозрительными.
/etc/fail2ban/action.d/:
Назначение: Директория с действиями, которые Fail2Ban выполняет при обнаружении подозрительной активности (например, блокировка IP через iptables).
Откройте файл
jail.localдля редактирования:sudo nano /etc/fail2ban/jail.localНастройка разделе
[DEFAULT]найдите строчки\параметры:ВНИМАНИЕ: Параметры которые указываются в разделе
[DEFAULT]применяются ко всем параметрам которые мы будем активировать. Но если мы укажем параметры внутри раздела (например в[sshd]) - то эти параметры будут иметь более высокий приоритет над[DEFAULT].Параметры:
bantimefindtimemaxretry- настройте на свое усмотрение или оставьте по умолчанию.# "bantime" is the number of seconds that a host is banned. bantime = 10m # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 10m # "maxretry" is the number of failures before a host get banned. maxretry = 5bantime:Параметр
bantimeопределяет, на какое время IP-адрес будет заблокирован после того, как количество неудачных попыток входа превысит допустимый лимит.Значение:
10mозначает 10 минут. Это значит, что IP-адрес будет заблокирован на 10 минут.Пример: Если IP-адрес нарушает правила и превышает лимит попыток входа, он будет заблокирован на 10 минут.
findtime:Параметр
findtimeуказывает, за какой период времени Fail2Ban будет проверять логи на наличие неудачных попыток входа.Значение:
10mозначает 10 минут. Это значит, что Fail2Ban будет искать неудачные попытки входа за последние 10 минут.Пример: Если Fail2Ban обнаруживает, что IP-адрес имеет больше неудачных попыток входа за последние 10 минут, этот адрес будет заблокирован.
maxretry:Параметр
maxretryзадает максимальное количество неудачных попыток входа, после достижения которого IP-адрес будет заблокирован.Значение:
5означает, что если IP-адрес совершил 5 неудачных попыток входа за указанныйfindtime, он будет заблокирован.Пример: Если IP-адрес совершает 5 неудачных попыток входа за 10 минут, Fail2Ban заблокирует этот IP-адрес на 10 минут.
Сценарий работы:
Представим, что:
bantimeустановлено на 10 минут,findtimeустановлено на 10 минут,maxretryустановлено на 5 попыток.Сценарий: IP-адрес A пытается войти в систему и делает 5 неудачных попыток входа в течение 10 минут. Fail2Ban видит, что этот IP-адрес нарушил правила (
maxretry) в течение заданного времени (findtime). IP-адрес A будет заблокирован на 10 минут (bantime).Параметр
ignoreip =, найдите его, уберите перед ним символ#и впишите через пробел ip адреса. Эти ip будут игнорироваться и не будут блокироваться. Для примера, допусти , 160.160.160.160 - мой домашний адрес, 99.99.99.99 - адрес моего второго сервера)[DEFAULT] # "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 160.160.160.160 ignoreip = 127.0.0.1/8 ::1 160.160.160.160 99.99.99.99Параметр
enabled =напротив должно быть значениеfalse.[DEFAULT] # true: jail will be enabled and log files will get monitored for changes # false: jail is not enabled enabled = false
Настройка защиты SSH:
Найдите раздел
[sshd]и убедитесь, что он включен и настроен правильно:# # JAILS # # # SSH servers # [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 port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)s [dropbear] port = ssh logpath = %(dropbear_log)s backend = %(dropbear_backend)s [selinux-ssh] port = ssh logpath = %(auditd_log)sВносим изменения
[sshd] #mode = normal enabled = true port = ssh logpath = %(sshd_log)s backend = %(sshd_backend)sОбъяснение параметров:
enabled = true: Включает защиту для SSH.port = ssh: Использует стандартный порт для SSH, если используется нестандартный порт (например 2222),sshзаменить на2222logpath = %(sshd_log)s: Определяет путь к логам SSH.
Настройка защиты для других сервисов будем производить позже.
Перезапустите Fail2Ban для применения изменений:
Проверка статуса сервиса.
sudo systemctl status fail2ban
Должно быть
Active:active (running). Статусactive (running)для службы Fail2Ban означает, что служба не запущена.
Пример вывода:
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2024-09-04 09:00:00 UTC; 1h ago
Docs: man:fail2ban(1)
Main PID: 1234 (fail2ban-server)
Tasks: 5 (limit: 2359)
Memory: 20.0M
CGroup: /system.slice/fail2ban.service
└─1234 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Sep 04 09:00:00 your-server systemd[1]: Started Fail2Ban Service.
Sep 04 09:00:00 your-server fail2ban-server[1234]: Server ready
Проверка версии Fail2Ban. Пример вывода:
Fail2Ban v0.11.2
sudo fail2ban-client version
Проверка доступности Fail2Ban. Пример вывода:
pong
sudo fail2ban-client ping
Проверка активных ловушек. Чтобы получить список всех активных jail'ов:
sudo fail2ban-client status
Пример вывода:
Status
|- Number of jail: 1
`- Jail list: sshd, apache-auth, nginx-http-auth
#цифра 1 - означает что у нас есть 1 активные ловушки.
Подробная информация о конкретном jail, в нашем случае ssh. Чтобы получить подробную информацию о заблокированных IP-адресах для конкретного jail, например, для
sshd:
sudo fail2ban-client status sshd
Пример вывода, после того как сервис поработает какое-то время и будут неудачные попытки подключения:
Status for the jail: sshd
|- Filter
| |- File list: /var/log/auth.log
| |- DateTime: 2024-09-04 10:00:00
| |- Log Level: INFO
| |- LogPath: /var/log/auth.log
| |- Failregex: ^%(__prefix_line)s(?:error:|fatal:|warning:|crit:) \\[sshd\\] \\[.*\\]: Failed password for invalid user .* from <HOST>
|
|- Actions
| |- Ban action: iptables-multiport[name=sshd, port="ssh", protocol="tcp"]
|
|- Currently banned:
| |- 192.168.1.10
| |- 203.0.113.5
|
|- Total banned: 2
Попробуйте подключиться с другого ip адреса и проверьте, корректность работы Fail2Ban.
После того как вы убедились что все работает и сохранили все настройки. Выйдите полностью из системы (закройте консоль) и попробуйте выполнить авторизацию. Если все получилось отлично. Если что-то пошло не так, просто перезагрузит ваш сервер. Fail2Ban на включен на автоматическую активацию после перезагрузки или выключения сервера. По идее с данными параметрами все должно работать правильно.
Включение Fail2Ban для автоматического запуска после сбоя или рестарта сервера:
sudo systemctl enable fail2ban sudo systemctl start fail2banПроверка статуса Fail2Ban. Вы должны увидеть ответ
enabled, что подтверждает, что Fail2Ban настроен для автоматического запуска.:sudo systemctl is-enabled fail2ban
Дополнительные настройки (опционально)
Разблокировка IP
Сброс настроек Fail2Ban
Удаление Fail2Ban
Настройка того же файла jail.local
sudo nano /etc/fail2ban/jail.local
Находим раздел [recidive] и добавляем изменения
[recidive] — это специальный jail в Fail2Ban, который предназначен для обработки IP-адресов, которые были забанены в разных jail'ах. Его задача — обнаруживать и наказывать IP-адреса, которые систематически пытаются нарушить безопасность, даже если они избегают банов в других конкретных jail'ах.
# Jail for more extended banning of persistent abusers
# !!! WARNINGS !!!
# 1. Make sure that your loglevel specified in fail2ban.conf/.local
# is not at DEBUG level -- which might then cause fail2ban to fall into
# an infinite loop constantly feeding itself with non-informative lines
# 2. Increase dbpurgeage defined in fail2ban.conf to e.g. 648000 (7.5 days)
# to maintain entries for failed logins for sufficient amount of time
[recidive]
enabled = true
logpath = /var/log/fail2ban.log
banaction = %(banaction_allports)s
maxretry = 10
bantime = 3d
findtime = 1d
enabled: Указывает, включен ли данный jail. Если true, он будет активен.
bantime: Время, на которое IP-адрес будет заблокирован после достижения maxretry. Указывается в секундах, минутах, часах или днях. Например, 3d — это 3 дня.
maxretry: Количество попыток, после которых IP-адрес будет заблокирован, если нарушения продолжаются в течение findtime.
findtime: Период времени, в течение которого будет учитываться количество попыток (maxretry). Например, 1d — это 1 день.
Для разблокировки IP-адреса, который был забанен Fail2Ban, используйте команду fail2ban-client:
sudo fail2ban-client set <jail_name> unbanip <ip_address>
Замените <jail_name> на имя конкретного jail'а (например, sshd), а <ip_address> на IP-адрес, который вы хотите разблокировать.
Пример:
sudo fail2ban-client set sshd unbanip 192.168.1.100
Посмотреть заблокированные IP-адреса для всех jail'ов
sudo iptables -L -n --line-numbers
Посмотреть заблокированные IP-адреса для конкретного jail SSH
sudo fail2ban-client status sshd
Если вы хотите сбросить настройки Fail2Ban, чтобы вернуть его к исходным настройкам, вы можете перезапустить Fail2Ban и очистить его текущие данные. Для этого выполните следующие шаги:
Очистка текущих данных Fail2Ban (например, сброс логов и состояния). Удалите файлы блокировки (например, чтобы сбросить все заблокированные IP-адреса):
sudo rm -f /var/lib/fail2ban/fail2ban.sqlite3
Перезапустите Fail2Ban после очистки:
Чтобы полностью удалить Fail2Ban с вашего сервера, выполните следующие шаги:
Удаление скриптом
bash <(curl -s https://raw.githubusercontent.com/odanoder/scripts/main/firewall/fail2ban/remove_fail2ban.sh)
Удаление вручную
sudo systemctl stop fail2ban.service
sudo systemctl disable fail2ban.service
sudo rm /lib/systemd/system/fail2ban.service
sudo systemctl daemon-reload
Удалите пакет Fail2Ban:
sudo apt remove fail2ban -y
Удалите остаточные файлы конфигурации и логи:
sudo rm -rf /etc/fail2ban
sudo rm -rf /var/log/fail2ban
sudo rm -rf /var/lib/fail2ban
Удалите пакеты зависимостей (если нужно) (ОПЦИОНАЛЬНО), если не понимаете пропустите этот шаг. Чтобы удалить пакеты, которые были установлены вместе с Fail2Ban и больше не нужны, выполните:
sudo apt-get autoremove
Проверьте статус Fail2Ban (чтобы убедиться, что он удален):
sudo systemctl status fail2ban
Описание
