Разное

Fail2Ban настройка: Настройка Fail2ban для защиты SSH

22.03.2023

Содержание

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

Fail2ban — простой в использовании локальный сервис, который отслеживает log–файлы запущенных программ, и на основании различных условий блокирует по IP найденных нарушителей.

Программа умеет бороться с различными атаками на все популярные *NIX–сервисы, такие как Apache, Nginx, ProFTPD, vsftpd, Exim, Postfix, named, и т.д.

Но в первую очередь Fail2ban известен благодаря готовности «из коробки» к защите SSH–сервера от атак типа «bruteforce», то есть к защите SSH от перебора паролей.

Установка Fail2ban

Готовые пакеты Fail2ban можно найти в официальных репозиториях всех популярных Linux дистрибутивов.

Установка Fail2ban на Debian/Ubuntu:

apt-get install fail2ban

Установка Fail2ban на CentOS/Fedora/RHEL:

yum install fail2ban

Конфигурация Fail2ban

На данном этапе Fail2ban уже готов к работе, базовая защита SSH сервера от перебора паролей будет включена по умолчанию. Но лучше всё-же внести некоторые изменения следуя рекомендациям ниже.

У программы два основных файла конфигурации:

  1. /etc/fail2ban/fail2ban.conf — отвечает за настройки запуска процесса Fail2ban.
  2. /etc/fail2ban/jail.conf — содержит настройки защиты конкретных сервисов, в том числе sshd.

Файл jail.conf поделён на секции, так называемые «изоляторы» (jails), каждая секция отвечает за определённый сервис и тип атаки:

[DEFAULT]
ignoreip = 127.0.0.1/8
bantime  = 600
maxretry = 3
banaction = iptables-multiport

[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6

Параметры из секции [DEFAULT] применяются ко всем остальным секциям, если не будут переопределены.

Секция [ssh] отвечает за защиту SSH от повторяющихся неудачных попыток авторизации на SSH–сервере, проще говоря, «brute–force».

Подробнее по каждому из основных параметров файла jail. conf:

ignoreip — IP–адреса, которые не должны быть заблокированы. Можно задать список IP-адресов разделённых пробелами, маску подсети, или имя DNS–сервера.

bantime — время бана в секундах, по истечении которого IP–адрес удаляется из списка заблокированных.

maxretry — количество подозрительных совпадений, после которых применяется правило. В контексте

[ssh] — это число неудавшихся попыток логина, после которых происходит блокировка.

enabled — значение true указывает что данный jail активен, false выключает действие изолятора.

port — указывает на каком порту или портах запущен целевой сервис. Стандартный порт SSH–сервера — 22, или его буквенное наименование — ssh.

filter — имя фильтра с регулярными выражениями, по которым идёт поиск «подозрительных совпадений» в журналах сервиса.

Фильтру sshd соответствует файл /etc/fail2ban/filter.d/sshd.conf.

logpath — путь к файлу журнала, который программа Fail2ban будет обрабатывать с помощью заданного ранее фильтра. Вся история удачных и неудачных входов в систему, в том числе и по SSH, по умолчанию записывается в log–файл /var/log/auth.log.

Рекомендации по настройке Fail2ban

Не рекомендуется оставлять параметр ignoreip со значением по умолчанию 127.0.0.1/8, это создаёт очевидную угрозу в многопользовательских системах — если злоумышленник получил доступ хотя–бы к одному shell–аккаунту, то он имеет возможность беспрепятственно запустить bruteforce–программу для атаки на root или других пользователей прямо с этого–же сервера.

Новая опция findtime — определяет длительность интервала в секундах, за которое событие должно повториться определённое количество раз, после чего санкции вступят в силу. Если специально не определить этот параметр, то будет установлено значение по умолчанию равное 600 (10 минут). Проблема в том, что ботнеты, участвующие в «медленном брутфорсе», умеют обманывать стандартное значение. Иначе говоря, при

maxretry равным 6, атакующий может проверить 5 паролей, затем выждать 10 минут, проверить ещё 5 паролей, повторять это снова и снова, и его IP забанен не будет. В целом, это не угроза, но всё же лучше банить таких ботов.

Прежде чем вносить изменения следуя рекомендациям, отметим, что не стоит редактировать основной файл настроек jail.conf, для этого предусмотрены файлы с расширением *.local, которые автоматически подключаются и имеют высший приоритет.

nano /etc/fail2ban/jail.local
[DEFAULT]
## Постоянный IP-адрес.
## Если не переопределить ignoreip здесь,
## то стоит закомментировать этот параметр в jail.conf.
ignoreip = 57.66.158.131

[ssh]
## если в течении 1 часа:
findtime    = 3600
## произведено 6 неудачных попыток логина:
maxretry    = 6
## то банить IP на 24 часа:
bantime     = 86400

Осталось перезапустить Fail2ban:

service fail2ban restart
* Restarting authentication failure monitor fail2ban        [ OK ]
tail /var/log/fail2ban. log
2013-01-20 22:00:35,911 fail2ban.jail   : INFO   Jail 'ssh' stopped
2013-01-20 22:00:35,916 fail2ban.server : INFO   Exiting Fail2ban
2013-01-20 22:00:36,257 fail2ban.server : INFO   Changed logging target to
/var/log/fail2ban.log for Fail2ban v0.8.6
2013-01-20 22:00:36,258 fail2ban.jail   : INFO   Creating new jail 'ssh'
2013-01-20 22:00:36,259 fail2ban.jail   : INFO   Jail 'ssh' uses poller
2013-01-20 22:00:36,271 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2013-01-20 22:00:36,271 fail2ban.filter : INFO   Set maxRetry = 6
2013-01-20 22:00:36,272 fail2ban.filter : INFO   Set findtime = 3600
2013-01-20 22:00:36,272 fail2ban.actions: INFO   Set banTime = 86400
2013-01-20 22:00:36,298 fail2ban.jail   : INFO   Jail 'ssh' started

Заключение

В статье затронуты только базовые возможности Fail2Ban, применимые для защиты SSH на типовом Linux–сервере. Более подробную документацию по программе вы можете найти в официальной Wiki на авторском веб–сайте.

Настройка Fail2Ban в Linux для защиты SSH, Apache, MySQL, Exim

Fail2ban позволяет блокировать доступ к серверу или запущенным службам на основе анализа логов доступа и подключений. Fail2Ban автоматически может создавать правила файервола для блокировки конкретных IP адресов, если действия с этого IP определяются как подозрительные. Так, Fail2Ban может защитить ваш сервер от перебора паролей по SSH, DDoS атак, попыток эксплуатации эксплоитов, выполнении запрещенных действий.

Любой сервис сервера, порты которого открыты во внешний мир, потенциально уязвим. Порты некоторых сервисов можно закрыть, но так можно поступить не со всеми. Например, если вы хотите, чтобы у вас полноценно работала почтовая SMTP служба, вы не можете отключить ее или заблокировать порт на firewall и время от времени в логах можно наблюдать записи о попытке подбора пароля к учетной записи. Так происходит и с другими сервисами.

Обычно на всех своих серверах, я закрываю SSH доступа с наружи, т. к. подключаюсь к своим серверам со своего статического IP-адреса или через OpenVPN подключение. Но это не всегда возможно. На помощь приходит замена стандартных портов, либо настройка на сервере службы fail2ban. В этом примере мы покажем, как установить и использовать fail2ban в CentOS, однако вы можете использовать эту инструкцию и для других дистрибутивов Linux.

Содержание:

  • Установка и первичная настройка Fail2Ban в CentOS 8/7
  • Использование Fail2Ban для защиты SSH от перебора паролей
  • Логи Fail2Ban
  • Защита Apache с помощью Fail2Ban
  • Настройка связки Fail2Ban и Nginx
  • Защита MySQL с помощью Fail2Ban
  • Правила Fail2Ban для Exim
  • Белый список IP в Fail2Ban, разблокировка IP-адресов

Установка и первичная настройка Fail2Ban в CentOS 8/7

Пакет для установки fail2ban находится в репозитории Epel, подключим его:

# yum install epel-release -y

После подключения репозитория, можно установить fail2ban через yum или dnf (в CentOS 8):

# yum install fail2ban -y

Как и любой другой сервис, fail2ban нужно добавить в автозагрузку, чтобы он автоматически запускался при рестарте системы:

[[email protected] ~]# systemctl enable fail2ban

Created symlink /etc/systemd/system/multi-user. target.wants/fail2ban.service → /usr/lib/systemd/system/fail2ban.service.

Служба fail2ban

хранит файлы конфигурации в директории /etc/fail2ban. Главный файл конфигурации — /etc/fail2ban/jail.conf. Так как данный файл может быть перезаписан при обновлении сервиса, для работы нужно создать файл jail.local. Также файлы в директории /etc/fail2ban/jail.d/ могут использоваться для переопределения настроек в выше указанных файлах. Файлы применяются в следующем порядке:

  • /etc/fail2ban/jail.conf
  • /etc/fail2ban/jail.d/*.conf
  • /etc/fail2ban/jail.local
  • /etc/fail2ban/jail.d/*.local

Использование Fail2Ban для защиты SSH от перебора паролей

Создадим файл и внесем настройки:

# nano /etc/fail2ban/jail.local

И добавим в него содержимое:

[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail. d/00-firewalld.conf:
banaction = iptables-multiport
[sshd]
enabled = true

Данная конфигурация устанавливает новое время для блокировки IP адресовм для всех служб, устанавливает использование iptables для блокировок и включается защиту для sshd.

Чтобы использовать для фильтрации firewalld, укажите:

banaction = firewallcmd-ipset

После изменения настроек перезапустите сервис:

# systemctl restart fail2ban

Чтобы посмотреть статус fail2ban, и проверить список защищаемых службы, выполните команду:

[[email protected] ~]# fail2ban-client status

Status
|- Number of jail: 1
`- Jail list: sshd

Вы можете запросить текущий статус блокировок fail2ban для конкретной службы:

# fail2ban-client status sshd

В файле jail.conf можно описать общие параметры, которые не будут переопределяться в jail.local.

Разблокируйте строку:

ignoreip = 127. 0.0.1/8

Измените следующие значения:
bantime = 10m

— время на которое будет заблокирован IP
findtime = 10m — время, в течение которого будут подсчитываться неудачные попытки авторизации.
maxretry = 3 — количество попыток до блокировки

Чтобы получать оповещения по электронной почте, вам нужно настроить следующие параметры:
destemail = [email protected] –получатель
sender = [email protected] — отправитель
mta = postfix — SMTP служба, через которую осуществляется отправка

Чтобы настроить блокировку для отдельных сервисов, в файле /etc/fail2ban/jail.local после блока [DEFAULT] создается блок для нужного сервиса, например, как с sshd. Добавим в него некоторые настройки:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s

Мы указали какой порт блокировать и куда писать логи блокировки. Обратите внимание на директорию /etc/fail2ban/filter. d, там описываются фильтры с помощью которых будут анализироваться записи в журнале и проверять, указывает ли та или иная запись на неудачную аутентификацию. Если вывести список файлов в каталоге, можно обнаружить правила fail2ban для большинство популярных сервисов:
# ls /etc/fail2ban/filter.d

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

Логи Fail2Ban

Чтобы проверить журнал fail2ban, выполните команду:

# journalctl -b -u fail2ban

Так же можно проверить логи в реальном времени:

# tail -F /var/log/fail2ban.log

Вывод из лога:

2019-12-05 12:13:26,914 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 222.186.180.17
2019-12-05 12:13:26,930 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 222.186.180.223
2019-12-05 12:13:26,944 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 36.72.82.10
2019-12-05 12:13:26,958 fail2ban. actions [9750]: NOTICE [sshd] Restore Ban 40.117.135.57
2019-12-05 12:13:26,973 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 45.55.155.224
2019-12-05 12:13:26,988 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 67.205.135.127
2019-12-05 12:13:27,003 fail2ban.actions [9750]: NOTICE [sshd] Restore Ban 83.171.107.216
2019-12-05 12:13:43,362 fail2ban.filter [9750]: INFO [sshd] Found 183.87.134.98 - 2019-12-05 12:13:42
2019-12-05 12:13:45,571 fail2ban.filter [9750]: INFO [sshd] Found 183.87.134.98 - 2019-12-05 12:13:45
2019-12-05 12:15:46,109 fail2ban.filter [9750]: INFO [sshd] Found 112.64.170.178 - 2019-12-05 12:15:45
2019-12-05 12:17:05,317 fail2ban.actions [9750]: NOTICE [sshd] Unban 222.186.175.216

Как видите, fail2ban работает и периодически блокирует или убирает блокировку для IP адресов.

Чтобы проверить, какие IP адреса заблокированы в iptables службой fail2ban, выполните:

# iptables -L

Как видите, с открытым наружу ssh, время от времени кто-то пытается подобрать пароль и авторизоваться. Если проверить статистику через какое-то время, видно, что количество заблокированных IP растет.

Защита Apache с помощью Fail2Ban

Если вы хотите настроить fail2ban для вашего apache (httpd), добавьте следующие настройки в jail.local:

# выявляем неудачные попытки ввода пароля
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/httpd/error_log
maxretry = 3
# блокирует IP, которые напрямую обращаются к скриптам с расширением php, asp, exe, pl, cgi, scgi
[apache-noscript]
enabled = true
port= http,https
filter = apache-noscript
logpath = /var/log/httpd/error_log
maxretry = 3
# выявляем попытки переполнения Апача
[apache-overflows]
enabled = true
port= http,https
filter = apache-overflows
logpath = /var/log/httpd/error_log
maxretry = 2
# выявляем неудачные попытки поиска в домашней директории на сервере
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/httpd/*error_log
maxretry = 2

После изменения конфигурационного файла, выполняем рестарт сервиса и проверяем статус:

[[email protected] ~]# fail2ban-client status apache

Status for the jail: apache
|- Filter
| |- Currently failed: 0
| |- Total failed: 0
| `- File list: /var/log/httpd/error_log
`- Actions
|- Currently banned: 0
|- Total banned: 0
`- Banned IP list:

Для теста, я установил на сервер Joomla, после чего пытался открыть несуществующий файл и fail2ban меня заблокировал:

[[email protected] httpd]# fail2ban-client status apache-noscript

Status for the jail: apache-noscript
|- Filter
| |- Currently failed: 1
| |- Total failed: 6
| `- File list: /var/log/httpd/error_log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: *. *.*.*

Настройка связки Fail2Ban и Nginx

Если веб-сервером у вас выступает nginx и на сайте есть разделы требующие авторизации, у вас так же могут быть проблемы с попытками перебора паролей. Для fail2ban мы можем указать использовать файл nginx-http-auth.conf, По умолчанию он уже описан в конфигурационном файле /etc/fail2ban/jail.conf:

[[email protected] ~]# cat /etc/fail2ban/jail.conf | grep nginx

[nginx-http-auth]
logpath = %(nginx_error_log)s
# To use 'nginx-limit-req' jail you should have `ngx_http_limit_req_module`
# and define `limit_req` and `limit_req_zone` as described in nginx documentation
# http://nginx.org/en/docs/http/ngx_http_limit_req_module.html
# or for example see in 'config/filter.d/nginx-limit-req.conf'
[nginx-limit-req]
logpath = %(nginx_error_log)s
[nginx-botsearch]
logpath = %(nginx_error_log)s
logpath = %(nginx_access_log)s

Нам нужно ли включить его в конфигурационном файле /etc/fail2ban/jail. local добавив:

[nginx-http-auth]
enabled = true

После все проведенных настроек, не забываем выполнять перезагрузку сервиса:

# systemctl restart fail2ban

Защита MySQL с помощью Fail2Ban

Для защиты MySQL нужно добавить отдельный блок в конфигурационный файл jail.local:

[mysqld-auth]
enabled = true
filter = mysqld-auth
port = 3306
logpath = /var/log/mysql/error.log

Данная настройка защитит вас от перебора паролей для пользователя mysql (это очень частый брутфорс).

Правила Fail2Ban для Exim

Чтобы настроить защиту для почтового сервиса exim, внесите следующую конфигурацию:

[exim]
enabled = true
filter = exim
action = iptables-multiport[name=exim,port="25,465,587"]
logpath = /var/log/exim/mainlog

Таким образом вы можете настроить fail2ban для работы практически со всеми популярными сервисами и ваш сервер станет максимально безопасен.

Белый список IP в Fail2Ban, разблокировка IP-адресов

Чтобы разблокировать IP, который попал в блокировку fail2ban, используйте команду:

# fail2ban-client set SECTION unbanip IP — где SECTION название секции в конфигурационном файле, по правилам которого был заблокирован ваш IP адрес. Например:

# fail2ban-client set apache-noscript unbanip 185.*.*.*

Вы можете добавить определенные IP адреса в исключения fail2ban (белый список). Для этого в конфигурационном файле jail.conf внесите IP в строку:

ignoreip =185.*.*.*

Добавив свой IP-адрес в исключения, я выполнил несколько атак подобно предыдущей и блокировки не произошло.

Как вы видите, fai2ban довольно просто в настройке, но вполне эффективное средство дополнительной защиты вашего сервера от злоумышленников. Для Windows к сожалению, я не видел бесплатных программ с подобным функционалом (можно попробовать реализовать блокировку IP адресов с помощью PowerShell – см. статью Защита RDP от перебора паролей).

Настройка Fail2Ban для служб → Отличная документация » Webdock.io

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

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

Fail2Ban отслеживает файлы журналов сервера (такие как /var/log/auth.log, /var/log/apache/access.log) на наличие попыток вторжения и других подозрительных действий. Как только на удаленном хосте будет обнаружено предопределенное количество сбоев, Fail2Ban автоматически блокирует их IP-адрес на определенное время. Fail2Ban может найти любые удаленные IP-адреса, которые пытаются сделать слишком много попыток входа в систему. После обнаружения оскорбительного IP-адреса Fail2Ban может выполнять несколько действий, таких как обновление правил брандмауэра Iptable, добавление IP-адреса в таблицу hosts.deny TCP Wrapper, отправка уведомлений по электронной почте и любые другие определяемые пользователем действия.

Fail2Ban обеспечивает защиту различных служб, таких как FTP, SSH, Apache, Webmin, Docker, WordPress и, по существу, любой службы, которая записывает информацию в файлы журнала от атак методом грубой силы.

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

Обратите внимание: выполнение этих действий может временно отключить ваш сервер. Выполняйте эти действия с осторожностью на действующем сайте.

Предварительные условия

  • Экземпляр Ubuntu 20. 04 в облаке Webdock с установленным LEMP или LAMP.
  • У вас есть доступ через оболочку (SSH) к вашему VPS.

Как установить Fail2Ban

По умолчанию Fail2Ban устанавливается в стек Webdock LAMP/LEMP. Если он не установлен, вы можете установить его с помощью следующей команды:

$ sudo apt install fail2ban -y 

После установки Fail2Ban вы можете проверить статус Fail2Ban с помощью следующей команды:

$ sudo systemctl статус fail2ban 

Вывод:

● fail2ban.service — служба Fail2Ban
     Загружено: загружено (/lib/systemd/system/fail2ban.service; включено; предустановка поставщика: включена)
     Активно: активно (работает) с понедельника 24 мая 2021 г., 12:08:07 UTC; 3 мин 5 с назад
       Документы: man:fail2ban(1)
   Основной PID: 341 (f2b/сервер)
      Заданий: 7 (лимит: 464145)
     Память: 14,6 Мб
     Группа CG: /system.slice/fail2ban.service
             └─341 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

24 мая 12:08:07 ubuntu systemd[1]: запуск службы Fail2Ban. ..
24 мая, 12:08:07 Ubuntu systemd[1]: запущена служба Fail2Ban.
24 мая 12:08:08 ubuntu fail2ban-server[341]: сервер готов
 

Как настроить Fail2Ban?

Файлы конфигурации Fail2Ban находятся в каталоге /etc/fail2ban. Вы можете проверить их с помощью следующей команды:

$ sudo ls -l /etc/fail2ban/ 

Вы должны увидеть следующий вывод:

drwxr-xr-x 2 root root 65 4 июня 2020 г. action.d
-rw-r--r-- 1 root root 2817 11 января 2020 г. fail2ban.conf
drwxr-xr-x 2 root root 2 2 марта 2020 г. fail2ban.d
drwxr-xr-x 3 root root 90 4 июня 2020 г. filter.d
-rw-r--r-- 1 root root 25740 11 января 2020 г. jail.conf
drwxr-xr-x 2 root root 4 4 июня 2020 г. jail.d
-rw-r--r-- 1 root root 645 11 января 2020 г. paths-arch.conf
-rw-r--r-- 1 root root 2827 11 января 2020 г. paths-common.conf
-rw-r--r-- 1 root root 573 11 января 2020 г. paths-debian.conf
-rw-r--r-- 1 root root 738 11 января 2020 г. paths-opensuse.conf
 

Где jail.conf — это основной файл конфигурации со всеми доступными опциями. В файле jail.conf содержится конфигурация тюрьмы для многих сервисов, таких как HTTP, FTP, SSH, Squid, Monit, Horde, Drupal и других. Вам просто нужно добавить «enabled = true» под каждым разделом конфигурации джейла, чтобы включить конкретный джейл.

Ниже приводится краткое описание наиболее часто используемых параметров конфигурации:

  • порт: Определите имя службы или порт службы.
  • путь к журналу: Укажите имя файла журнала, который проверяет fail2ban.
  • bantime: Определите количество секунд, в течение которых хост будет заблокирован fail2ban.
  • maxretry: Определить максимальное количество неудачных попыток входа в систему, разрешенных хосту, прежде чем он будет заблокирован.
  • ignoreip: Определите IP-адреса, которые fail2ban будет игнорировать.

Рекомендуется настроить Fail2Ban, создав новый файл конфигурации с именем каталога конкретной службы /etc/fail2ban/jail. d/ вместо редактирования существующего файла jail.conf.

Настроить Fail2Ban для SSH

В Ubuntu Fail2Ban для SSH должен автоматически включаться после установки Fail2Ban, но вы можете проверить, действительно ли он включен в основном файле jail.conf или проверив состояние тюрьмы с помощью инструмента CLI, как показано в разделах ниже.

Чтобы вручную настроить Fail2Ban для SSH, вам потребуется создать файл jail.local:

$ sudo nano /etc/fail2ban/jail.d/sshd.conf 

Добавьте следующие строки:

[сшд]
включено = верно
порт = ssh
фильтр = sshd
путь к журналу = /var/log/auth.log
максимальная попытка = 3
бантайм = 120
ignoreip = белый список-IP
 

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

$ sudo systemctl restart fail2ban 

Приведенная выше конфигурация заблокирует удаленные IP-адреса после трех неудачных попыток входа на ваш сервер через SSH. IP-адрес удаленного хоста будет заблокирован на 120 секунд.

Настройка Fail2Ban для Webmin

Чтобы защитить Webmin с помощью Fail2Ban, отредактируйте файл jail.local, как показано ниже:

$ sudo nano /etc/fail2ban/jail.d/webmin.conf 

Добавьте следующие строки:

[вебмин-аутентификация]
включено = верно
порт = 10000
фильтр = webmin-авторизация
путь к журналу = /var/log/auth.log
максимальная попытка = 3
бантайм = 120
 

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

$ sudo systemctl restart fail2ban 

Эта конфигурация будет отслеживать файлы /var/log/auth на предмет неудачных попыток входа в Webmin и блокировать их на 120 секунд.

Настройка Fail2Ban для WordPress

Чтобы защитить панель администратора WordPress с помощью Fail2Ban, вам необходимо загрузить файл конфигурации фильтра Fail2ban для WordPress. Вы можете скачать его с помощью следующей команды:

$ sudo wget https://plugins. svn.wordpress.org/wp-fail2ban/trunk/filters.d/wordpress-hard.conf -O /etc/fail2ban/filter.d/wordpress.conf 

Затем создайте Jail для WordPress, отредактировав файл jail.local:

$ sudo nano /etc/fail2ban/jail.d/wordpress.conf 

Добавьте следующие строки:

[Вордпресс]
включено = верно
фильтр = вордпресс
путь к журналу = /var/log/auth.log
максимальная попытка = 3
порт = http,https
бантайм = 300
 

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

$ sudo systemctl restart fail2ban 

Настройка Fail2Ban для ProFTP

Чтобы настроить Fail2Ban для ProFTP, отредактируйте файл jail.local:

$ sudo nano /etc/fail2ban/jail.d/proftp.conf 

Добавьте следующие строки:

[профтпд]

включено = верно
порт = ftp, ftp-данные, ftps, ftps-данные
фильтр = proftpd
путь к журналу = /var/log/proftpd/proftpd.log
максимальная попытка = 3
бантайм = 300
 

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

$ sudo systemctl restart fail2ban 

Как проверить статус Jail

Вы можете просмотреть список всех активированных джейлов Fail2Ban, выполнив следующую команду:

$ sudo fail2ban-client status 

Вы должны получить все активированные джейлы в следующем выводе:

Положение дел
|- Количество тюрем: 6
`- Список джейлов: proftpd, pure-ftpd, sshd, webmin-auth, wordpress
 

Если вы хотите проверить статус блокировки конкретной тюрьмы Fail2Ban (SSH), выполните следующую команду:

$ sudo fail2ban-клиент статус sshd 

Вы должны увидеть все IP-адреса, заблокированные Fail2Ban, в следующем выводе:

Статус для джейла: sshd
|- Фильтр
| |- В настоящее время не удалось: 1
| |- Всего неудачно: 14
| `- Список файлов: /var/log/auth.log
`- Действия
   |- В настоящее время забанено: 3
   |- Всего забанено: 3
   `- Список запрещенных IP-адресов: 209.208.62.183 221.181.185.19 222.186.30.112
 

Вы также можете проверить журнал Fail2Ban на наличие заблокированных IP-адресов:

$ sudo tail -f /var/log/fail2ban. log 

Вывод:

2021-05-24 12:32:53,084 fail2ban.filter [8715]: INFO [ssh] Found 222.186.30.112 - 2021-05-24 12:32:53
2021-05-24 12:32:53,117 fail2ban.actions [8715]: УВЕДОМЛЕНИЕ [ssh] Бан 222.186.30.112
 

Если вы хотите вручную заблокировать любой удаленный IP-адрес для службы SSH, выполните следующую команду:

$ sudo fail2ban-client set sshd banip remote-ip-address 

Вы также можете проверить правила Iptables, добавленные Fail2Ban, с помощью следующей команды:

$ sudo iptables -nL 

Вывод:

...
Цепочка f2b-sshd (1 ссылка)
целевая защита выбор источника назначения
REJECT all -- 222.186.42.7 0.0.0.0/0
ВОЗВРАТ все -- 0.0.0.0/0 0.0.0.0/0
 

Как разблокировать IP-адреса, заблокированные Fail2Ban

По умолчанию Fail2ban автоматически разблокирует заблокированные IP-адреса через заранее определенный интервал времени, указанный в файле jail.local.

Чтобы разблокировать заблокированный IP вручную, выполните следующую команду:

$ sudo fail2ban-client set sshd unbanip remote-ip-address 

Вы также можете добавить доверенные удаленные IP-адреса в файл jail. local, чтобы Fail2Ban игнорировал эти IP-адреса.

$ sudo nano /etc/fail2ban/jail.local 

Добавьте следующие строки вверху файла:

[ПО УМОЛЧАНИЮ]

ignoreip = доверенный-ip1 доверенный-ip2
 

Сохраните и закройте файл. Затем перезапустите Fail2Ban, чтобы применить конфигурацию.

$ sudo systemctl restart fail2ban 

Заключение

В приведенном выше руководстве вы узнали, как установить и настроить Fail2Ban для различных служб на веб-сервере Ubuntu. Мы надеемся, что это поможет вам настроить Fail2Ban для других служб, чтобы злоумышленники не смогли взломать ваш сайт. Если есть услуга, которую вы хотите включить в эту статью, оставьте комментарий ниже или свяжитесь со службой поддержки Webdock.

Как использовать Fail2ban для защиты сервера (учебник) | Линод

Что такое Fail2Ban

Fail2ban — это приложение для разбора журналов, которое отслеживает системные журналы на наличие симптомов автоматической атаки на ваш Linode. В этом руководстве вы узнаете, как использовать Fail2ban для защиты вашего сервера.

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

Fail2ban в первую очередь ориентирован на SSH-атаки, хотя его можно дополнительно настроить для работы с любой службой, которая использует файлы журналов и может быть взломана.

Примечание

Для действий, описанных в этом руководстве, требуются привилегии root. Обязательно выполните приведенные ниже шаги как root или с префиксом sudo . Дополнительные сведения о привилегиях см. в нашем руководстве «Пользователи и группы».

Важно!

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

Как установить Fail2ban

Следуйте руководству по началу работы, чтобы настроить базовый сервер. Перед началом работы вы также можете просмотреть руководство «Защита вашего сервера».

Операционные системы на базе CentOS/CentOS Stream/RHEL

  1. Убедитесь, что ваша система обновлена, и установите репозиторий EPEL:

     yum update -y && yum install epel-release -y
     
  2. Установить Fail2Ban:

     yum установить fail2ban
     
  3. Установите Sendmail, если вам дополнительно нужна поддержка по электронной почте. Sendmail не требуется для использования Fail2Ban.:

     yum install sendmail
     
  4. Запустите и включите Fail2ban и, при необходимости, Sendmail:

     systemctl start fail2ban
    systemctl включить fail2ban
    systemctl запустить sendmail
    systemctl включить sendmail
     
    Примечание

    Если вы столкнулись с ошибкой , что нет каталога /var/run/fail2ban, содержащего файл сокета /var/run/fail2ban/fail2ban. sock , создайте каталог вручную:

     mkdir /var/run/fail2ban
     

Debian

  1. Убедитесь, что ваша система обновлена:

     apt-get update && apt-get upgrade -y
     
  2. Установить Fail2ban:

     apt-get установить fail2ban
     

    Служба запускается автоматически.

  3. (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:

     apt-get install sendmail-bin sendmail
     
    Примечание

    Текущая версия Sendmail в Debian Jessie имеет ошибку восходящего потока, которая вызывает следующие ошибки при установке sendmail-bin . Установка зависает на минуту, но затем завершается.

     Создание /etc/mail/sendmail.cf...
    ОШИБКА: FEATURE() должна стоять перед MAILER() MAILER('local') должна стоять после FEATURE('always_add_domain')
    ОШИБКА: FEATURE() должна стоять перед MAILER() MAILER('local') должна стоять после FEATURE('allmasquerade')
     

Федора

  1. Обновите свою систему:

     обновление dnf
     
  2. Установить Fail2ban:

     dnf установить fail2ban
     
  3. (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:

     dnf install sendmail
     
  4. Запустите и включите Fail2ban и, при необходимости, Sendmail:

     systemctl start fail2ban
    systemctl включить fail2ban
    systemctl запустить sendmail
    systemctl включить sendmail
     

Убунту

  1. Убедитесь, что ваша система обновлена:

     apt-get update && apt-get upgrade -y
     
  2. Установить Fail2ban:

     apt-get установить fail2ban
     

    Служба запускается автоматически.

  3. (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:

     apt-get install sendmail
     
  4. Разрешить доступ SSH через UFW, а затем включить брандмауэр:

     ufw разрешить ssh
    ufw включить
     

Как настроить Fail2ban

В этом разделе приведены примеры распространенных конфигураций Fail2ban с использованием файлов fail2ban.local и jail.local . Fail2ban сначала читает файлы конфигурации .conf , затем файлы .local переопределяют любые настройки. По этой причине все изменения в конфигурации обычно выполняются в файлах .local , оставляя файлы .conf нетронутыми.

Настройка fail2ban.local

  1. fail2ban.conf содержит профиль конфигурации по умолчанию. Настройки по умолчанию дают вам разумную рабочую настройку. Если вы хотите внести какие-либо изменения, лучше всего сделать это в отдельном файле fail2ban. local , который переопределяет fail2ban.conf . Переименуйте копию fail2ban.conf в fail2ban.local .

     cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
     
  2. Отсюда вы можете редактировать определения в fail2ban.local , чтобы соответствовать желаемой конфигурации. Можно изменить следующие значения:

    • loglevel : уровень детализации, предоставляемый журналами Fail2ban, может быть установлен на 1 (ошибка), 2 (предупреждение), 3 (информация) или 4 (отладка).
    • logtarget : записывает действия в определенный файл. Значение по умолчанию /var/log/fail2ban.log помещает все журналы в определенный файл. В качестве альтернативы вы можете изменить значение на:
      • STDOUT : вывод любых данных
      • STDERR : вывод любых ошибок
      • SYSLOG : ведение журнала на основе сообщений
      • ФАЙЛ : вывод в файл
    • : вывод в файл
  3. : вывод в файл
  4. pidfile : расположение файла PID.

Конфигурация серверной части Fail2ban

  1. Файл jail.conf включает Fail2ban для SSH по умолчанию для Debian и Ubuntu, но не для CentOS. Все остальные протоколы и конфигурации (HTTP, FTP и т. д.) закомментированы. Если вы хотите изменить это, создайте jail.local для редактирования:

     cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
     
  2. При использовании CentOS или Fedora вам необходимо изменить параметр backend в jail.local с auto на systemd . В Debian 8 или Ubuntu 16.04 в этом нет необходимости, хотя обе они также используют systemd.

Файл: /etc/fail2ban/jail.local
 1
2
3
4
5
6
7
 
 # "backend" указывает серверную часть, используемую для модификации файлов. 
# Доступные варианты: «pyinotify», «gamin», «polling», «systemd» и «auto».
# Эту опцию также можно переопределить в каждой тюрьме.
. . .
backend = systemd 
Примечание

Если для конфигурации backend установлено значение auto , Fail2ban отслеживает файлы журналов, сначала используя pyinotify . Далее он пробует gamin . Если ни один из них недоступен, алгоритм опроса решает, что делать дальше.

По умолчанию в CentOS 7 тюрьмы не включены. Например, чтобы включить тюрьму демона SSH, раскомментируйте следующие строки в jail.local :

Файл: /etc/fail2ban/jail.local
 1
2
 
 [ссд]
enable = true 

Fail2ban jail.local Configurations

Чтобы лучше ознакомиться с доступными настройками Fail2ban, откройте файл jail. local и просмотрите доступные конфигурации.

Файл: /etc/fail2ban/jail.local
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
 
 [ПО УМОЛЧАНИЮ]
    игнорип = 127.0.0.1/8
    бантайм = 600
    найти время = 600
    максимальная попытка = 3
    бэкенд = авто
    usedns = предупреждать
    destemail = root@localhost
    отправитель = Fail2Ban
    banaction = iptables-мультипорт
    mta = отправка почты
    протокол = TCP
    цепочка = ВВОД
    action_ = %(запрет)...
    action_mw = %(запрет)...
    протокол="%(протокол)s"...
    action_mwl = %(banaction)s... 

Например, если вы установите для параметра usedns значение no , Fail2ban не будет использовать обратный DNS для установки своих запретов, а вместо этого заблокирует IP-адрес. Если установлено значение warn , Fail2ban выполняет обратный поиск имени хоста и использует его для выполнения бана.

Параметр chain относится к серии правил iptables, где в бан-действиях должны быть добавлены переходы. По умолчанию установлена ​​цепочка INPUT . Подробнее о цепочках iptables можно прочитать в нашем руководстве «Что такое iptables».

Конфигурация отбрасывания трафика Fail2ban Chain

Вы можете использовать параметр --line-numbers iptables для просмотра правил Fail2ban.

 iptables -L f2b-sshd -v -n --номера строк
 

Вы должны получить аналогичный вывод:

 Цепь fail2ban-SSH (1 ссылка)
num pkts bytes target prot opt ​​in out source target
1 19 2332 УДАЛИТЬ все -- * * 192.0.0.0 0.0.0.0/0
2 16 1704 УДАЛИТЬ все -- * * 192.0.0.1 0.0.0.0/0
3 15 980 УДАЛИТЬ все -- * * 192.0.0.2 0.0.0.0/0
4 6 360 УДАЛИТЬ все -- * * 192.0.0.3 0.0.0.0/0
5 8504 581K RETURN all -- * * 0.0.0.0/0 0.0.0.0/0 

Вы можете удалить правило, примененное к IP-адресу, с помощью команды iptables -D chain rulenum . Замените rulenum на соответствующий номер правила IP-адреса из столбца num . Например, чтобы удалить IP-адрес 192.0.0.1 введите следующую команду:

 iptables -D fail2ban-SSH 2
 

Время бана и количество повторных попыток Конфигурация Fail2Ban

Установите bantime , findtime и maxretry для определения обстоятельств и продолжительности бана:

Файл: /etc/albanjail.fail2
 1
2
3
4
5
6
7
 
 # "bantime" - это количество секунд, в течение которых хост находится в бане.
бантайм = 600
# Хост забанен, если он сгенерировал "maxretry" во время последнего "findtime"
# секунд.
найти время = 600
максимальная попытка = 3 
  • findtime : Промежуток времени между попытками входа в систему до установки запрета. Например, если Fail2ban настроен на блокировку IP-адреса после пяти (5) неудачных попыток входа в систему, эти 5 попыток должны произойти в течение установленного 10-минутного ограничения findtime . Значение findtime должно быть заданным количеством секунд.

  • maxretry : Fail2ban использует findtime и maxretry , чтобы решить, когда бан оправдан. Если количество попыток превышает лимит, установленный в maxretry и находится в пределах лимита времени findtime , бан устанавливается Fail2ban. По умолчанию установлено значение 3 .

  • bantime : Время в секундах, на которое блокируется IP-адрес. Если установлено отрицательное число, бан будет постоянным. Значение по умолчанию 600 установлено для блокировки IP-адреса на 10 минут.

ignoreip Fail2ban Configurations

Чтобы игнорировать определенные IP-адреса, добавьте их в строку ignoreip . По умолчанию эта команда не блокирует локальный хост. Если вы часто работаете с одного IP-адреса, может быть полезно добавить его в список игнорирования:

Файл: /etc/fail2ban/jail.local
 1
2
3
4
5
6
 
 [ПО УМОЛЧАНИЮ]
# "ignoreip" может быть IP-адресом, маской CIDR или хостом DNS. Fail2ban не будет
# забанить хост, который соответствует адресу в этом списке. Можно несколько адресов
# определено с использованием разделителя пробелов.
ignoreip = 127.0.0.1/8 123.45.67.89 

ignoreip : Этот параметр помогает определить IP-адреса, которые должны быть исключены из правил Fail2ban. Чтобы игнорировать определенные IP-адреса, добавьте их в список ignoreip конфигурация, как показано в примере. По умолчанию эта команда не блокирует localhost . Если вы часто работаете с одного IP-адреса, вам следует добавить его в список игнорирования.

Если вы хотите разрешить IP-адреса только для определенных джейлов, это можно сделать с помощью команды fail2ban-client . Замените JAIL на имя вашей тюрьмы, а 192.0.0.1 на IP-адрес, который вы хотите разрешить.

 fail2ban-client установить JAIL addignoreip 192.0.0.1
 

Оповещения по электронной почте Fail2ban

Это руководство может включать отправку электронной почты из вычислительного экземпляра. В целях борьбы со спамом Linode может ограничивать исходящие соединения на портах 25, 465 и 587 на вычислительных инстансах для новых учетных записей, созданных после 5 ноября 2019 г. Для получения дополнительной информации см. раздел Отправка электронной почты на Linode.

Чтобы получать электронную почту при срабатывании fail2ban, настройте параметры электронной почты:

  • destemail : адрес электронной почты, на который вы хотите получать электронные письма.

  • sendername : Имя, под которым отображается электронное письмо.

  • отправитель : адрес электронной почты, с которого Fail2ban отправляет электронные письма.

Примечание

Если вы не знаете, что указать под отправителем , выполните команду sendmail -t [email protected] , заменив [email protected] своим адресом электронной почты. Проверьте свою электронную почту (включая папки со спамом, если необходимо) и просмотрите письмо отправителя. Этот адрес можно использовать для вышеуказанной конфигурации.

Также необходимо настроить параметр action , определяющий, какие действия происходят при достижении порога для бана. По умолчанию %(action_)s блокирует только пользователя. %(action_mw)s банит и отправляет электронное письмо с отчетом WhoIs; в то время как %(action_mwl)s банит и отправляет электронное письмо с отчетом WhoIs и всеми соответствующими строками в файле журнала. Это также может быть изменено для конкретной тюрьмы.

Блокировка Fail2ban и конфигурация портов

Помимо приведенного выше адреса основных настроек, jail.local также содержит различные конфигурации тюрьмы для ряда распространенных служб, включая SSH и iptables. По умолчанию включен только SSH, и действие заключается в том, чтобы заблокировать нарушающий хост/IP-адрес, изменив правила брандмауэра iptables.

Средняя конфигурация тюрьмы выглядит следующим образом:

Файл: /etc/fail2ban/jail.local
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
 
 # Действие по умолчанию для блокировки (например, iptables, iptables-new,
# iptables-multiport, Shorewall и т. д.) Используется для определения
# переменные action_*. Может быть переопределен глобально или
# раздел в файле jail.local
banaction = iptables-мультипорт
banaction_allports = iptables-allports
[сш]
включено = верно
порт = ssh
фильтр = sshd
путь к журналу = /var/log/auth. log
maxretry = 6 
  • banaction : определяет действие, которое следует использовать при достижении порога. Если вы настроили брандмауэр для использования firewalld, установите значение firewallcmd-ipset и, если вы настроили брандмауэр для использования UFW, установите значение ufw .
  • banaction_allports : Блокирует удаленный IP-адрес на каждом порту. Если вы настроили брандмауэр для использования firewalld, установите значение firewallcmd-ipset .
  • включено : Определяет, включен фильтр или нет.
  • порт : порт Fail2ban должен указывать на сервис. Если используется порт по умолчанию, то здесь можно разместить имя службы. При использовании нетрадиционного порта это должен быть номер порта. Например, если вы переместите свой порт SSH на 3456, вы замените сш с 3456 .
  • filter : Имя файла, расположенного в /etc/fail2ban/filter. d , который содержит информацию об отказоустойчивом выражении, используемую для надлежащего анализа файлов журнала. Суффикс .conf включать необязательно.
  • logpath : Указывает расположение журналов службы.
  • maxretry : переопределит глобальное значение maxretry для определенной службы. findtime и bantime также можно добавить.
  • действие : Это можно добавить как дополнительную настройку, если действие по умолчанию не подходит для джейла. Дополнительные действия можно найти в папке action.d .
Примечание

Jails также можно настроить как отдельные файлы .conf , помещенные в каталог jail.d . Формат остается прежним.

Использование фильтров Fail2ban для защиты сервера

В этом разделе вы исследуете фильтры Fail2ban вашей системы, определенные в их конфигурационных файлах.

В зависимости от версии Fail2ban вашей системы вы можете найти системные фильтры либо в файле /etc/fail2ban/jail.conf , либо в файле /etc/fail2ban/jail.d/defaults-*.conf .

Откройте файл /etc/fail2ban/jail.conf и проверьте фильтр ssh/sshd :

Файл: /etc/fail2ban/jail.conf
2 3 4 5 6 7
 [сш]
включено = верно
порт = ssh
фильтр = sshd
путь к журналу = /var/log/auth.log
максимальная попытка = 5 

Если вы используете версию Fail2ban выше 0.8 , проверьте оба файла defaults-*.conf и jail.conf . 1 2 3 4

 [ссд]
порт = ssh
путь к журналу = %(sshd_log)s 

Наконец, система, использующая Fail2ban 0. 8 или выше, имеет defaults-*.conf , который включает следующие фильтры:

Файл: /etc/fail2ban/jail.d/defaults-*.conf
 1
2
3
4
 
 [ссд]
включено = верно
maxretry = 3 

Вы можете протестировать существующие фильтры, запустив пример команды и заменив logfile , failregex и игнорируют регулярное выражение с вашими собственными значениями.

 файл журнала fail2ban-regex failregex ignoreregex
 

Используя примеры из начала этого раздела, команда выглядит следующим образом:

 fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf
 

Ваши фильтры Fail2ban должны работать с:

  1. Различные типы журналов, созданные различным программным обеспечением

  2. Различные конфигурации и несколько операционных систем

В дополнение к вышесказанному, они также должны быть независимыми от формата журнала, должны быть защищены от DDoS и должны быть совместимы с будущими версиями программного обеспечения.

Настройка конфигурации ignoreregex

Перед внесением изменений в конфигурацию failregex необходимо настроить ignoreregex . Fail2ban необходимо знать, что считается нормальной активностью сервера, а что нет.

Например, чтобы исключить выполнение cron активности на вашем сервере или исключить MySQL, вы можете настроить ignoreregex для фильтрации журналов, созданных этими двумя программами:

Файл: /etc/fail2ban/filter.d/sshd.conf
 1
2
3
4
 
 ignoreregex = : pam_unix\((cron|sshd):session\): сеанс (открытый|закрытый)ed для пользователя (daemon|munin|mysql|root)( by \(uid=0\))?$
            : успешное выполнение su для (mysql) пользователем root$
            Новая сессия \d+ пользователя (mysql)\.$
            Удалена сессия \d+\.$ 

Теперь, когда вы отфильтровали журналы каждой программы, вы можете настроить failregexs , чтобы заблокировать то, что вы хотите.

Настройка Failregexs

Хотя Fail2ban поставляется с несколькими фильтрами, вы можете дополнительно настроить эти фильтры или создать свои собственные в соответствии со своими потребностями. Fail2ban использует регулярные выражения (регулярные выражения) для анализа файлов журналов, ища случаи попыток взлома и неудачных паролей. Fail2ban использует расширения регулярных выражений Python.

Лучший способ понять, как работает failregex, это написать его. Хотя мы не рекомендуем, чтобы Fail2ban отслеживал ваш WordPress access.log на веб-сайтах с интенсивным трафиком из-за проблем с процессором, он предоставляет экземпляр простого для понимания файла журнала, который вы можете использовать, чтобы узнать о создании любого failregex.

Напишите регулярное выражение для Fail2ban

  1. Перейдите на ваш веб-сайт access.log (обычно находится по адресу /var/www/example.com/logs/access.log ) и найдите неудачную попытку входа в систему. Это выглядит так:

    Файл: /var/www/example.com/logs/access.log
     123.45.67.89 - - [01/октября/2015:12:46:34 -0400] "POST /wp- login.php HTTP/1.1" 200 1906 "http://example.com/wp-login.php" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0" 

    Обратите внимание, что вам нужно отслеживать только до 200 :

    Файл: /var/www/example.com/logs/access.log
     123.45.67.89 - - [01/октября 2015:12:46:34 -0400] "POST /wp-login.php HTTP/1.1" 200 
  2. IP-адрес, с которого произошла неудачная попытка, всегда определяется как . Следующие несколько символов не изменяются и могут быть введены как литералы:

      - - \[
     

    \ перед [ означает, что квадратную скобку следует читать буквально.

  3. Следующий раздел, дата попытки входа в систему, может быть записан в виде сгруппированных выражений с использованием регулярных выражений. Первая часть, 01 в этом примере, может быть записана как (\d{2}) : скобки группируют выражение, а \d ищет любые числовые цифры. {2} отмечает, что выражение ищет две цифры подряд, т. е. день месяца.

    На данный момент у вас должно быть:

      - - \[(\d{2})
     

    Следующая косая черта затем вызывается с помощью буквальной косой черты, за которой следует \w{3} , которая ищет серию из 3 буквенно-цифровых символов (т. е. A-Z, 0-9, в любом регистре) . Следующая косая черта также должна быть буквальной:

      - - \[(\d{2})/\w{3}/
     

    Раздел для года должен быть написан аналогично дню, но без необходимости группы захвата и для четырех последовательных символов (и буквального двоеточия):

     <ХОСТ> - - \[(\d{2})/\w{3}/\d{4}:
     
  4. Следующая последовательность представляет собой ряд двузначных чисел, составляющих время. Поскольку мы определили день месяца как двузначное число в группе захвата (круглые скобки), мы можем ссылаться на него, используя \1 (поскольку это первая группа захвата ). Опять же, двоеточие является литералом:

      - - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1
     

    Если вы не хотите использовать обратные ссылки, это также можно записать как:

      - - \[\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2}
     
  5. Сегмент -0400 должен быть написан аналогично году, с дополнительным литералом - : -\d{4} . Наконец, вы можете закрыть квадратную скобку (сначала экранируя обратной косой чертой) и закончить остальную часть литеральной строкой:

      - - \[(\d{2})/\w{3}/\d {4}:\1:\1:\1 -\d{4}\] "POST /wp-login.php HTTP/1.1" 200
     

    Или:

      - - \[\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} -\ d{4}\] "POST /wp-login.php HTTP/1.1" 200
     

Применить Failregex

После создания failregex его необходимо добавить в фильтр.

  1. Перейдите в каталог filter.d Fail2ban:

     cd /etc/fail2ban/filter.d
     
  2. Создайте файл с именем wordpress.conf и добавьте свой failregex:

Файл: /etc/fail2ban/filter.d/wordpress.conf
8 2 3 4 5 6
 # Фильтр Fail2Ban для WordPress
[Определение]
failregex =  - - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] "POST /wp- логин.php HTTP/1.1" 200
ignoreregex = 
 Сохранить и выйти.
 1
2
3
4
5
 
 [Вордпресс]
включено = верно
фильтр = вордпресс
logpath = /var/www/html/andromeda/logs/access.log
порт = 80 443 

При этом используется запрет по умолчанию и действие по электронной почте. Другие действия можно определить, добавив строку action = .

Сохраните и выйдите, затем перезапустите Fail2ban.

Использовать клиент Fail2ban

Fail2ban предоставляет команду fail2ban-client , которую можно использовать для запуска Fail2ban из командной строки:

 fail2ban-client КОМАНДА
 
  • start : Запускает сервер Fail2ban и тюрьмы.
  • reload : перезагружает файлы конфигурации Fail2ban.
  • reload JAIL : Заменяет JAIL на название тюрьмы Fail2ban; это перезагружает тюрьму.
  • стоп : завершает работу сервера.
  • статус : Показывает статус сервера и включает тюрьмы.
  • статус JAIL : Показывает статус тюрьмы, включая все заблокированные IP-адреса.

Например, чтобы проверить, работает ли Fail2Ban и включен ли джейл SSHd, выполните:

 статус клиента fail2ban
 

Вывод должен быть:

 Статус
|- Количество тюрем: 1
`- Список джейлов: sshd
 

Для получения дополнительной информации о командах fail2ban-client см. вики Fail2ban.

Восстановление при блокировке

В случае, если вы обнаружите, что ваш Linode заблокирован из-за fail2ban, вы все равно можете получить доступ с помощью нашей внеполосной консоли Lish.

Отсюда вы можете просмотреть правила своего брандмауэра, чтобы убедиться, что именно fail2ban заблокировал ваш IP, а не что-то еще. Для этого введите следующую команду:

 iptables -n -L
 

Найдите свой IP-адрес в столбце source любой цепочки fail2ban (всегда с префиксом f2b или fail2ban ), чтобы убедиться, что вы были заблокированы службой fail2ban:

 Цепочка f2b-sshd (1 Рекомендации)
целевая защита выбор источника назначения
REJECT all -- 203.0.113.0 0.0.0.0/0 reject-with icmp-e 

Чтобы удалить свой IP-адрес из тюрьмы, вы можете использовать следующую команду, заменив 203.0.113.0 и jailname с IP-адресом и названием тюрьмы, которую вы хотите разбанить:

 fail2ban-client set jailname unbanip 203.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *