DevOps: Защита сервера с Fail2Ban: ssh. Базовая настройка.

ОГЛАВЛЕНИЕ

Основные команды Fail2Ban

Что такое Fail2Ban

Fail2Ban установка и настройка

Fail2Ban


Основные команды Fail2Ban

Список полезных команд для управления и мониторинга Fail2Ban:

Основные команды Fail2Ban

  1. Проверка статуса Fail2Ban:

    sudo systemctl status fail2ban
    
  2. Запуск Fail2Ban:

    sudo systemctl start fail2ban
    
  3. Остановка Fail2Ban:

    sudo systemctl stop fail2ban
    
  4. Перезапуск Fail2Ban:

    sudo systemctl restart fail2ban
    
  5. Перезагрузка конфигурации Fail2Ban без остановки службы:

    sudo systemctl reload fail2ban
    
  6. Проверка состояния всех jail'ов:

    sudo fail2ban-client status
    
  7. Проверка состояния конкретного jail:

    sudo fail2ban-client status <название_jail>
    

    Пример для SSH:

    sudo fail2ban-client status sshd
    
  8. Просмотр заблокированных IP-адресов для конкретного jail:

    sudo fail2ban-client status <название_jail> | grep "Banned IP list"
    
  9. Разблокировка IP-адреса (напр. для jail 'sshd'):

    sudo fail2ban-client set <название_jail> unbanip <IP-адрес>
    

    Пример:

    sudo fail2ban-client set sshd unbanip 192.168.1.100
    
  10. Получение информации о конкретном jail:

    sudo fail2ban-client get <название_jail> <параметр>
    

    Пример для получения настроек bantime jail'а:

    sudo fail2ban-client get sshd bantime
    
  11. Тестирование конфигурации Fail2Ban: Вы можете протестировать конфигурацию Fail2Ban на наличие синтаксических ошибок, не запуская службу:

    sudo fail2ban-regex <путь_к_логу> <путь_к_фильтру>
    
  12. Просмотр логов 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?

Fail2Ban — это инструмент для повышения безопасности серверов и сетевых систем. Его основная функция заключается в предотвращении атак типа brute force и других видов несанкционированного доступа путем автоматической блокировки IP-адресов, которые демонстрируют подозрительное поведение.

Что такое Fail2Ban?

Fail2Ban — это программное обеспечение, которое следит за логами системных сервисов и обнаруживает подозрительное поведение, такое как многочисленные неудачные попытки входа. При обнаружении такого поведения, Fail2Ban автоматически добавляет правила в фаервол, чтобы заблокировать IP-адреса злоумышленников.

Как это работает?

  1. Мониторинг логов:

    • Fail2Ban анализирует журналы логов различных сервисов (например, SSH, Apache, Nginx) в поисках признаков атак или неудачных попыток входа.
  2. Обнаружение подозрительного поведения:

    • Когда Fail2Ban обнаруживает определённое количество неудачных попыток входа или другие подозрительные действия, он определяет, что IP-адрес нарушителя должен быть заблокирован.
  3. Блокировка IP-адресов:

    • Fail2Ban автоматически добавляет правила в фаервол (например, iptables), чтобы блокировать доступ с этих IP-адресов на определённое время.
  4. Оповещение:

    • Fail2Ban может также отправлять уведомления администраторам о подозрительном поведении и блокировках.

Зачем нужен Fail2Ban?

  1. Защита от атак brute force:

    • Fail2Ban защищает серверы от атак brute force, при которых злоумышленники пытаются подобрать пароли с использованием автоматизированных инструментов.
  2. Повышение безопасности:

    • За счёт автоматической блокировки подозрительных IP-адресов Fail2Ban снижает риск успешного взлома системы и увеличивает общую безопасность сервера.
  3. Снижение нагрузки на администраторов:

    • Автоматическая блокировка устраняет необходимость вручную отслеживать и блокировать злонамеренные IP-адреса, что экономит время и усилия системных администраторов.
  4. Настройка и гибкость:

    • Fail2Ban предоставляет возможность настройки различных фильтров и действий в зависимости от конкретных потребностей, таких как блокировка различных сервисов и использование разных фаерволов.

Основные компоненты Fail2Ban:

  • Фильтры:

    • Определяют, какие строки в логах являются подозрительными. Фильтры настраиваются в виде регулярных выражений.
  • Действия:

    • Определяют, что делать, когда обнаружено подозрительное поведение, например, блокировать IP-адрес с помощью iptables.
  • Jail'ы:

    • Определяют, какие фильтры и действия применяются к каким сервисам. Каждый jail соответствует конкретному сервису (например, SSH, Apache) и имеет свои собственные настройки.

Fail2Ban является важным инструментом для обеспечения безопасности серверов и сетевых систем, помогая предотвращать атаки и защищать ресурсы от несанкционированного доступа.


Fail2Ban установка

Инструкция по установке и настройке Fail2Ban.

Шаг 1: Установка 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

Шаг 2: Основная конфигурация

Важные файлы и их назначение

/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).


  1. Откройте файл jail.local для редактирования:

    sudo nano /etc/fail2ban/jail.local
    

    Настройка разделе [DEFAULT] найдите строчки\параметры:

    ВНИМАНИЕ: Параметры которые указываются в разделе[DEFAULT] применяются ко всем параметрам которые мы будем активировать. Но если мы укажем параметры внутри раздела (например в [sshd]) - то эти параметры будут иметь более высокий приоритет над [DEFAULT].

  2. Параметры: 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).

  3. Параметр 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
    
  4. Параметр enabled = напротив должно быть значение false .

    [DEFAULT]
    # true:  jail will be enabled and log files will get monitored for changes
    # false: jail is not enabled
    enabled = false
    

Шаг 3: Настройка SSH в Fail2Ban

  1. Настройка защиты 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.

    Настройка защиты для других сервисов будем производить позже.


Шаг 4: Перезапуск и проверка Fail2Ban

  1. Перезапустите Fail2Ban для применения изменений:
sudo systemctl restart fail2ban
  1. Проверка статуса сервиса.
sudo systemctl status fail2ban
  1. Должно быть 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
  1. Проверка версии Fail2Ban. Пример вывода: Fail2Ban v0.11.2
sudo fail2ban-client version
  1. Проверка доступности Fail2Ban. Пример вывода: pong
sudo fail2ban-client ping
  1. Проверка активных ловушек. Чтобы получить список всех активных jail'ов:
sudo fail2ban-client status

Пример вывода:

Status
|- Number of jail:   1
`- Jail list:  sshd, apache-auth, nginx-http-auth
#цифра 1 - означает что у нас есть 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

Завершающий этап настройки Fail2Ban

  1. Попробуйте подключиться с другого ip адреса и проверьте, корректность работы Fail2Ban.

  2. После того как вы убедились что все работает и сохранили все настройки. Выйдите полностью из системы (закройте консоль) и попробуйте выполнить авторизацию. Если все получилось отлично. Если что-то пошло не так, просто перезагрузит ваш сервер. Fail2Ban на включен на автоматическую активацию после перезагрузки или выключения сервера. По идее с данными параметрами все должно работать правильно.

  3. Включение 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

Для разблокировки 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 и очистить его текущие данные. Для этого выполните следующие шаги:

Очистка текущих данных Fail2Ban (например, сброс логов и состояния). Удалите файлы блокировки (например, чтобы сбросить все заблокированные IP-адреса):

sudo rm -f /var/lib/fail2ban/fail2ban.sqlite3

Перезапустите Fail2Ban после очистки:

sudo systemctl restart fail2ban

Удаление 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

Описание


Subscribe to OdaNoder
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.