ОГЛАВЛЕНИЕ
Основные команды Fail2Ban
Что такое Fail2Ban
Fail2Ban установка и настройка
Fail2Ban
Список полезных команд для управления и мониторинга Fail2Ban:
Проверка статуса Fail2Ban:
sudo systemctl status fail2ban
Запуск Fail2Ban:
sudo systemctl start fail2ban
Остановка Fail2Ban:
sudo systemctl stop fail2ban
Перезапуск Fail2Ban:
sudo systemctl restart fail2ban
Перезагрузка конфигурации Fail2Ban без остановки службы:
sudo systemctl reload 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> <параметр>
Пример для получения настроек bantime
jail'а:
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-адреса злоумышленников.
Мониторинг логов:
Обнаружение подозрительного поведения:
Блокировка IP-адресов:
Оповещение:
Защита от атак brute force:
Повышение безопасности:
Снижение нагрузки на администраторов:
Настройка и гибкость:
Фильтры:
Действия:
Jail'ы:
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]
.
Параметры: bantime
findtime
maxretry
- настройте на свое усмотрение или оставьте по умолчанию.
# "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 = 5
bantime
:
Параметр 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
заменить на 2222
logpath = %(sshd_log)s
: Определяет путь к логам SSH.
Настройка защиты для других сервисов будем производить позже.
sudo systemctl restart 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 v0.11.2
sudo fail2ban-client version
pong
sudo fail2ban-client ping
sudo fail2ban-client status
Пример вывода:
Status
|- Number of jail: 1
`- Jail list: sshd, apache-auth, nginx-http-auth
#цифра 1 - означает что у нас есть 1 активные ловушки.
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 после очистки:
sudo systemctl restart 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
Описание