Настройка 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 сервера от перебора паролей будет включена по умолчанию. Но лучше всё-же внести некоторые изменения следуя рекомендациям ниже.
У программы два основных файла конфигурации:
/etc/fail2ban/fail2ban.conf
— отвечает за настройки запуска процесса Fail2ban./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 минут). Проблема в том, что ботнеты, участвующие в «медленном брутфорсе», умеют обманывать стандартное значение. Иначе говоря, при
Прежде чем вносить изменения следуя рекомендациям, отметим, что не стоит редактировать основной файл настроек 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/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
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
Убедитесь, что ваша система обновлена, и установите репозиторий EPEL:
yum update -y && yum install epel-release -y
Установить Fail2Ban:
yum установить fail2ban
Установите Sendmail, если вам дополнительно нужна поддержка по электронной почте. Sendmail не требуется для использования Fail2Ban.:
yum install sendmail
Запустите и включите Fail2ban и, при необходимости, Sendmail:
systemctl start fail2ban systemctl включить fail2ban systemctl запустить sendmail systemctl включить sendmail
ПримечаниеЕсли вы столкнулись с ошибкой
, что нет каталога /var/run/fail2ban, содержащего файл сокета /var/run/fail2ban/fail2ban. sock
, создайте каталог вручную:mkdir /var/run/fail2ban
Debian
Убедитесь, что ваша система обновлена:
apt-get update && apt-get upgrade -y
Установить Fail2ban:
apt-get установить fail2ban
Служба запускается автоматически.
(Необязательно) Если вам нужна поддержка по электронной почте, установите 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')
Федора
Обновите свою систему:
обновление dnf
Установить Fail2ban:
dnf установить fail2ban
(Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:
dnf install sendmail
Запустите и включите Fail2ban и, при необходимости, Sendmail:
systemctl start fail2ban systemctl включить fail2ban systemctl запустить sendmail systemctl включить sendmail
Убунту
Убедитесь, что ваша система обновлена:
apt-get update && apt-get upgrade -y
Установить Fail2ban:
apt-get установить fail2ban
Служба запускается автоматически.
(Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:
apt-get install sendmail
Разрешить доступ SSH через UFW, а затем включить брандмауэр:
ufw разрешить ssh ufw включить
Как настроить Fail2ban
В этом разделе приведены примеры распространенных конфигураций Fail2ban с использованием файлов fail2ban.local
и jail.local
. Fail2ban сначала читает файлы конфигурации .conf
, затем файлы .local
переопределяют любые настройки. По этой причине все изменения в конфигурации обычно выполняются в файлах .local
, оставляя файлы .conf
нетронутыми.
Настройка fail2ban.local
fail2ban.conf
содержит профиль конфигурации по умолчанию. Настройки по умолчанию дают вам разумную рабочую настройку. Если вы хотите внести какие-либо изменения, лучше всего сделать это в отдельном файлеfail2ban. local
, который переопределяетfail2ban.conf
. Переименуйте копиюfail2ban.conf
вfail2ban.local
.cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
Отсюда вы можете редактировать определения в
fail2ban.local
, чтобы соответствовать желаемой конфигурации. Можно изменить следующие значения:-
loglevel
: уровень детализации, предоставляемый журналами Fail2ban, может быть установлен на 1 (ошибка), 2 (предупреждение), 3 (информация) или 4 (отладка). -
logtarget
: записывает действия в определенный файл. Значение по умолчанию/var/log/fail2ban.log
помещает все журналы в определенный файл. В качестве альтернативы вы можете изменить значение на:-
STDOUT
: вывод любых данных -
STDERR
: вывод любых ошибок -
SYSLOG
: ведение журнала на основе сообщений -
ФАЙЛ
: вывод в файл
-
- : вывод в файл
-
- : вывод в файл
-
pidfile
: расположение файла PID.
Конфигурация серверной части Fail2ban
Файл
jail.conf
включает Fail2ban для SSH по умолчанию для Debian и Ubuntu, но не для CentOS. Все остальные протоколы и конфигурации (HTTP, FTP и т. д.) закомментированы. Если вы хотите изменить это, создайтеjail.local
для редактирования:cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
При использовании 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 должны работать с:
Различные типы журналов, созданные различным программным обеспечением
Различные конфигурации и несколько операционных систем
В дополнение к вышесказанному, они также должны быть независимыми от формата журнала, должны быть защищены от 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
Перейдите на ваш веб-сайт
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
IP-адрес, с которого произошла неудачная попытка, всегда определяется как
- - \[ \
перед[
означает, что квадратную скобку следует читать буквально.Следующий раздел, дата попытки входа в систему, может быть записан в виде сгруппированных выражений с использованием регулярных выражений. Первая часть,
01
в этом примере, может быть записана как(\d{2})
: скобки группируют выражение, а\d
ищет любые числовые цифры.{2}
отмечает, что выражение ищет две цифры подряд, т. е. день месяца.На данный момент у вас должно быть:
- - \[(\d{2}) Следующая косая черта затем вызывается с помощью буквальной косой черты, за которой следует
\w{3}
, которая ищет серию из3
буквенно-цифровых символов (т. е. A-Z, 0-9, в любом регистре) . Следующая косая черта также должна быть буквальной:- - \[(\d{2})/\w{3}/ Раздел для года должен быть написан аналогично дню, но без необходимости группы захвата и для четырех последовательных символов (и буквального двоеточия):
<ХОСТ> - - \[(\d{2})/\w{3}/\d{4}:
Следующая последовательность представляет собой ряд двузначных чисел, составляющих время. Поскольку мы определили день месяца как двузначное число в группе захвата (круглые скобки), мы можем ссылаться на него, используя
\1
(поскольку это первая группа захвата ). Опять же, двоеточие является литералом:- - \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 Если вы не хотите использовать обратные ссылки, это также можно записать как:
- - \[\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} Сегмент
-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 его необходимо добавить в фильтр.
Перейдите в каталог
filter.d
Fail2ban:cd /etc/fail2ban/filter.d
Создайте файл с именем
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.