Настройка fail2ban для защиты от атак

Материал из ARK-HOSTER.RU | Документация хостинга
Версия от 08:31, 15 октября 2025; Admin (обсуждение | вклад) (Новая страница: «= Настройка fail2ban для защиты от атак = == 1. Подготовка системы == * Войдите в систему под уче…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Настройка fail2ban для защиты от атак

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.

2. Установка fail2ban =

Обновление системы

1. Обновите систему: sudo apt update

2. Установите fail2ban: sudo apt install -y fail2ban

3. Проверьте версию: fail2ban-client --version

4. Запустите и включите автозапуск: sudo systemctl start fail2ban sudo systemctl enable fail2ban

5. Проверьте статус: sudo systemctl status fail2ban

3. Базовая конфигурация =

Создание конфигурационного файла

1. Создайте локальный конфигурационный файл: sudo nano /etc/fail2ban/jail.local

2. Добавьте базовую конфигурацию: [DEFAULT]

  1. Игнорировать IP адреса

ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24

  1. Время блокировки в секундах

bantime = 3600

  1. Время поиска в секундах

findtime = 600

  1. Максимальное количество попыток

maxretry = 3

  1. Backend для поиска в логах

backend = systemd

  1. Email уведомления

destemail = admin@example.com sender = fail2ban@example.com action = %(action_mwl)s

Настройка email уведомлений

1. Установите почтовый клиент: sudo apt install -y mailutils

2. Настройте почту: sudo nano /etc/fail2ban/action.d/sendmail-common.conf

3. Добавьте настройки: [Definition] actionstart = printf %%b "Hi,\n

             The jail <name> has been started successfully.\n
             Regards,\n
             Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: started on <fq-hostname>" <dest>

actionstop = printf %%b "Hi,\n

            The jail <name> has been stopped.\n
            Regards,\n
            Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: stopped on <fq-hostname>" <dest>

actioncheck =

actionban = printf %%b "Hi,\n

           The IP <ip> has just been banned by Fail2Ban after
           <failures> attempts against <name>.\n
           Regards,\n
           Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: banned <ip> from <fq-hostname>" <dest>

actionunban = printf %%b "Hi,\n

             The IP <ip> has been unbanned by Fail2Ban from <name>.\n
             Regards,\n
             Fail2Ban" | /usr/bin/mail -s "[Fail2Ban] <name>: unbanned <ip> from <fq-hostname>" <dest>

4. Настройка защиты SSH =

Базовая защита SSH

1. Добавьте в jail.local: [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 findtime = 600

Расширенная защита SSH

1. Создайте фильтр для SSH: sudo nano /etc/fail2ban/filter.d/sshd.conf

2. Добавьте правила: [Definition] failregex = ^%(__prefix_line)s(?:error: PAM: )?[aA]uthentication (?:failure|error) for .* from <HOST>(?: port \d*)?(?: ssh\d*)?(?: on \S+)?\s*$

           ^%(__prefix_line)s(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$
           ^%(__prefix_line)sFailed \w+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?(?: on \S+)?\s*$
           ^%(__prefix_line)sROOT LOGIN REFUSED.* from <HOST>\s*$
           ^%(__prefix_line)s[iI](?:llegal|nvalid) user .* from <HOST>\s*$
           ^%(__prefix_line)sUser .* from <HOST> not allowed because not listed in AllowUsers\s*$
           ^%(__prefix_line)sauthentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
           ^%(__prefix_line)srefused connect from <HOST>\s*$
           ^%(__prefix_line)sAddress <HOST> .* POSSIBLE BREAK-IN ATTEMPT!\s*$

ignoreregex =

3. Настройте jail для SSH: [sshd-ddos] enabled = true port = ssh filter = sshd-ddos logpath = /var/log/auth.log maxretry = 6 bantime = 3600 findtime = 600

5. Защита веб-серверов =

Защита Apache

1. Создайте фильтр для Apache: sudo nano /etc/fail2ban/filter.d/apache-auth.conf

2. Добавьте правила: [Definition] failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (401|403) .*$

           ^<HOST> -.*"(GET|POST).*HTTP.*" (400|404|500) .*$
           ^<HOST> -.*"GET.*HTTP.*" (200|301|302) .*".*".*$

ignoreregex =

3. Настройте jail для Apache: [apache-auth] enabled = true port = http,https filter = apache-auth logpath = /var/log/apache2/*error.log maxretry = 3 bantime = 3600 findtime = 600

[apache-noscript] enabled = true port = http,https filter = apache-noscript logpath = /var/log/apache2/*access.log maxretry = 3 bantime = 3600 findtime = 600

[apache-overflows] enabled = true port = http,https filter = apache-overflows logpath = /var/log/apache2/*error.log maxretry = 3 bantime = 3600 findtime = 600

Защита Nginx

1. Создайте фильтр для Nginx: sudo nano /etc/fail2ban/filter.d/nginx-http-auth.conf

2. Добавьте правила: [Definition] failregex = ^<HOST> -.*"(GET|POST).*HTTP.*" (401|403) .*$

           ^<HOST> -.*"(GET|POST).*HTTP.*" (400|404|500) .*$

ignoreregex =

3. Настройте jail для Nginx: [nginx-http-auth] enabled = true port = http,https filter = nginx-http-auth logpath = /var/log/nginx/error.log maxretry = 3 bantime = 3600 findtime = 600

[nginx-limit-req] enabled = true port = http,https filter = nginx-limit-req logpath = /var/log/nginx/error.log maxretry = 3 bantime = 3600 findtime = 600

6. Защита баз данных =

Защита MySQL

1. Создайте фильтр для MySQL: sudo nano /etc/fail2ban/filter.d/mysql-auth.conf

2. Добавьте правила: [Definition] failregex = ^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$

           ^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$
           ^.*\[Warning\].*Access denied for user '.*'@'<HOST>'.*$

ignoreregex =

3. Настройте jail для MySQL: [mysql-auth] enabled = true port = 3306 filter = mysql-auth logpath = /var/log/mysql/error.log maxretry = 3 bantime = 3600 findtime = 600

Защита PostgreSQL

1. Создайте фильтр для PostgreSQL: sudo nano /etc/fail2ban/filter.d/postgresql.conf

2. Добавьте правила: [Definition] failregex = ^.*FATAL: password authentication failed for user ".*" from <HOST>.*$

           ^.*FATAL:  no pg_hba.conf entry for host "<HOST>", user ".*", database ".*", SSL off.*$

ignoreregex =

3. Настройте jail для PostgreSQL: [postgresql] enabled = true port = 5432 filter = postgresql logpath = /var/log/postgresql/postgresql-*.log maxretry = 3 bantime = 3600 findtime = 600

7. Защита почтовых серверов =

Защита Postfix

1. Создайте фильтр для Postfix: sudo nano /etc/fail2ban/filter.d/postfix.conf

2. Добавьте правила: [Definition] failregex = ^.*HOST=<HOST>.*REJECT.*$

           ^.*HOST=<HOST>.*REJECT.*$
           ^.*HOST=<HOST>.*REJECT.*$

ignoreregex =

3. Настройте jail для Postfix: [postfix] enabled = true port = smtp,465,submission filter = postfix logpath = /var/log/mail.log maxretry = 3 bantime = 3600 findtime = 600

Защита Dovecot

1. Создайте фильтр для Dovecot: sudo nano /etc/fail2ban/filter.d/dovecot.conf

2. Добавьте правила: [Definition] failregex = ^.*authentication failure.*rip=<HOST>.*$

           ^.*Login attempt.*rip=<HOST>.*$

ignoreregex =

3. Настройте jail для Dovecot: [dovecot] enabled = true port = pop3,pop3s,imap,imaps,submission,465,sieve filter = dovecot logpath = /var/log/mail.log maxretry = 3 bantime = 3600 findtime = 600

8. Продвинутые настройки =

Настройка whitelist

1. Добавьте в jail.local: [DEFAULT] ignoreip = 127.0.0.1/8 ::1 192.168.1.0/24 10.0.0.0/8

2. Создайте файл whitelist: sudo nano /etc/fail2ban/ignoreip.local

3. Добавьте IP адреса: # Доверенные IP адреса 192.168.1.100 192.168.1.101 10.0.0.50

Настройка blacklist

1. Создайте файл blacklist: sudo nano /etc/fail2ban/blacklist.local

2. Добавьте IP адреса: # Заблокированные IP адреса 192.168.1.200 192.168.1.201

3. Настройте jail для blacklist: [blacklist] enabled = true port = ssh,http,https filter = blacklist logpath = /var/log/fail2ban.log maxretry = 1 bantime = -1 findtime = 1

Настройка кастомных фильтров

1. Создайте кастомный фильтр: sudo nano /etc/fail2ban/filter.d/custom.conf

2. Добавьте правила: [Definition] failregex = ^.*<HOST>.*FAILED.*$

           ^.*<HOST>.*ERROR.*$
           ^.*<HOST>.*DENIED.*$

ignoreregex =

3. Настройте jail для кастомного фильтра: [custom] enabled = true port = ssh,http,https filter = custom logpath = /var/log/custom.log maxretry = 3 bantime = 3600 findtime = 600

9. Мониторинг и управление =

Просмотр статуса

1. Просмотр активных jail: sudo fail2ban-client status

2. Просмотр статуса конкретного jail: sudo fail2ban-client status sshd

3. Просмотр заблокированных IP: sudo fail2ban-client status sshd

Управление jail

1. Запуск jail: sudo fail2ban-client start sshd

2. Остановка jail: sudo fail2ban-client stop sshd

3. Перезапуск jail: sudo fail2ban-client restart sshd

4. Перезагрузка конфигурации: sudo fail2ban-client reload

Управление IP адресами

1. Разблокировка IP: sudo fail2ban-client set sshd unbanip 192.168.1.100

2. Блокировка IP: sudo fail2ban-client set sshd banip 192.168.1.100

3. Просмотр заблокированных IP: sudo fail2ban-client get sshd banned

10. Настройка логирования =

Настройка логов fail2ban

1. Настройте логирование: sudo nano /etc/fail2ban/fail2ban.conf

2. Измените параметры: loglevel = INFO logtarget = /var/log/fail2ban.log

3. Настройте ротацию логов: sudo nano /etc/logrotate.d/fail2ban

4. Добавьте конфигурацию: /var/log/fail2ban.log {

   daily
   missingok
   rotate 52
   compress
   delaycompress
   notifempty
   create 644 root root
   postrotate
       systemctl reload fail2ban
   endscript

}

Создание скрипта мониторинга

1. Создайте скрипт мониторинга: sudo nano /usr/local/bin/fail2ban-monitor.sh

2. Добавьте содержимое: #!/bin/bash

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

if ! systemctl is-active --quiet fail2ban; then

   echo "Fail2ban is down!" | mail -s "Fail2ban Alert" admin@example.com

fi

  1. Проверка количества заблокированных IP

BLOCKED_COUNT=$(sudo fail2ban-client status sshd | grep "Currently banned:" | awk '{print $4}') if [ $BLOCKED_COUNT -gt 10 ]; then

   echo "High number of blocked IPs: $BLOCKED_COUNT" | mail -s "Fail2ban Alert" admin@example.com

fi

  1. Проверка логов на ошибки

ERROR_COUNT=$(grep -c "ERROR" /var/log/fail2ban.log 2>/dev/null || echo 0) if [ $ERROR_COUNT -gt 5 ]; then

   echo "Fail2ban errors detected: $ERROR_COUNT" | mail -s "Fail2ban Alert" admin@example.com

fi

3. Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/fail2ban-monitor.sh

4. Добавьте в crontab: sudo crontab -e

5. Добавьте задачу: */5 * * * * /usr/local/bin/fail2ban-monitor.sh

11. Настройка уведомлений =

Настройка Slack уведомлений

1. Создайте Slack webhook: sudo nano /etc/fail2ban/action.d/slack.conf

2. Добавьте конфигурацию: [Definition] actionstart = curl -X POST -H 'Content-type: application/json' --data '{"text":"Fail2ban jail <name> started on <fq-hostname>"}' <slack_webhook_url>

actionstop = curl -X POST -H 'Content-type: application/json' --data '{"text":"Fail2ban jail <name> stopped on <fq-hostname>"}' <slack_webhook_url>

actioncheck =

actionban = curl -X POST -H 'Content-type: application/json' --data '{"text":"IP <ip> banned by Fail2ban after <failures> attempts against <name>"}' <slack_webhook_url>

actionunban = curl -X POST -H 'Content-type: application/json' --data '{"text":"IP <ip> unbanned by Fail2ban from <name>"}' <slack_webhook_url>

3. Настройте jail с Slack уведомлениями: [sshd] enabled = true port = ssh filter = sshd logpath = /var/log/auth.log maxretry = 3 bantime = 3600 findtime = 600 action = slack

Настройка Telegram уведомлений

1. Создайте Telegram бота и получите токен 2. Создайте конфигурацию: sudo nano /etc/fail2ban/action.d/telegram.conf

3. Добавьте настройки: [Definition] actionstart = curl -s -X POST "https://api.telegram.org/bot<bot_token>/sendMessage" -d chat_id=<chat_id> -d text="Fail2ban jail <name> started on <fq-hostname>"

actionstop = curl -s -X POST "https://api.telegram.org/bot<bot_token>/sendMessage" -d chat_id=<chat_id> -d text="Fail2ban jail <name> stopped on <fq-hostname>"

actioncheck =

actionban = curl -s -X POST "https://api.telegram.org/bot<bot_token>/sendMessage" -d chat_id=<chat_id> -d text="IP <ip> banned by Fail2ban after <failures> attempts against <name>"

actionunban = curl -s -X POST "https://api.telegram.org/bot<bot_token>/sendMessage" -d chat_id=<chat_id> -d text="IP <ip> unbanned by Fail2ban from <name>"

12. Устранение неполадок =

Частые проблемы

1. Fail2ban не запускается:

  • Проверьте конфигурацию: sudo fail2ban-client -t
  • Проверьте логи: sudo journalctl -u fail2ban
  • Проверьте права доступа к файлам

2. Jail не работает:

  • Проверьте фильтры: sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
  • Проверьте пути к логам
  • Проверьте права доступа к логам

3. Ложные срабатывания:

  • Настройте whitelist
  • Измените параметры maxretry и findtime
  • Проверьте фильтры

Диагностика

1. Проверка статуса: sudo systemctl status fail2ban

2. Проверка конфигурации: sudo fail2ban-client -t

3. Тестирование фильтров: sudo fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

4. Проверка логов: sudo tail -f /var/log/fail2ban.log

5. Проверка iptables: sudo iptables -L -n

Заключение

Fail2ban успешно настроен и готов к работе! Теперь у вас есть мощная защита от атак с возможностями мониторинга, уведомлений и гибкой настройки.

Для размещения ваших защищенных серверов на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой fail2ban и обеспечением безопасности ваших серверов!