Установка Fail2ban
CentOS 7
- Убедитесь, что ваша система обновлена и установите EPEL репозиторий:
yum update && yum install epel-release
- Установите Fail2Ban:
yum install fail2ban
- Установите Sendmail, если вам дополнительно нужна поддержка по электронной почте. Sendmail не требуется использовать Fail2Ban .:
yum install sendmail
- Запустите и включите Fail2ban и, если необходимо, Sendmail:
systemctl start fail2ban systemctl enable fail2ban systemctl start sendmail systemctl enable sendmail
Заметка
Если вы столкнулись с ошибкой, что « отсутствует каталог / var / run / fail2ban для файла сокета /var/run/fail2ban/fail2ban.sock », создайте каталог вручную:
mkdir /var/run/fail2ban
Debian
- Убедитесь, что ваша система обновлена:
apt-get update && apt-get upgrade -y
- Установите Fail2ban:
apt-get install fail2ban
Сервис запустится автоматически.
- (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:
apt-get install sendmail-bin sendmail
Заметка
Текущая версия Sendmail в Debian Jessie имеет вышестоящую ошибку, которая вызывает следующие ошибки при установкеsendmail-bin
. Установка будет зависать на минуту, но затем завершится.
Creating /etc/mail/sendmail.cf... ERROR: FEATURE() should be before MAILER() MAILER('local') must appear after FEATURE('always_add_domain') ERROR: FEATURE() should be before MAILER() MAILER('local') must appear after FEATURE('allmasquerade')
Fedora
- Обновите вашу систему:
dnf update
- Установите Fail2ban:
dnf install fail2ban
- (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:
dnf install sendmail
- Запустите и включите Fail2ban и, если необходимо, Sendmail:
systemctl start fail2ban systemctl enable fail2ban systemctl start sendmail systemctl enable sendmail
Ubuntu
- Убедитесь, что ваша система обновлена:
apt-get update && apt-get upgrade -y
- Установите Fail2ban:
apt-get install fail2ban
Сервис автоматически запустится.
- (Необязательно) Если вам нужна поддержка по электронной почте, установите Sendmail:
apt-get install sendmail
- Разрешите SSH доступ через UFW и затем включите брандмауэр:
ufw allow ssh ufw enable
Настроить Fail2ban
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
: ведение журнала сообщенийFILE
: вывод в файл
socket
: Расположение файла сокета.pidfile
: Расположение файла PID.
Настройка параметров jail.local
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
По умолчанию в CentOS 7 не включены тюрьмы. Например, чтобы включить тюрьму демона SSH, раскомментируйте следующие строки в
jail.local
:
Белый список IP
Чтобы игнорировать конкретные IP-адреса, добавьте их в ignoreip
строку. По умолчанию эта команда не блокирует локальный хост. Если вы часто работаете с одного IP-адреса, может быть полезно добавить его в список игнорируемых:
- /etc/fail2ban/jail.local
Если вы хотите вносить белый список IP-адресов только для определенных джейлов, это можно сделать с помощью fail2ban-client
команды. Замените JAIL
на имя вашей тюрьмы и 123.45.67.89
IP-адрес, который вы хотите добавить в белый список.
fail2ban-client set JAIL addignoreip 123.45.67.89
Время запрета и количество повторов
Установить bantime
, findtime
и maxretry
определить обстоятельства и продолжительность запрета:
- /etc/fail2ban/jail.local
-
# "bantime" is the number of seconds that a host is banned. bantime = 600 # A host is banned if it has generated "maxretry" during the last "findtime" # seconds. findtime = 600 maxretry = 3
bantime
: Промежуток времени в секундах, на который IP-адрес запрещен. Если установлено отрицательное число, бан будет постоянным. По умолчанию600
установлено, что IP-адрес запрещен на 10 минут.findtime
: Промежуток времени между попытками входа в систему до установки бана. Например, если Fail2ban настроен на запрет IP после пяти (5) неудачных попыток входа в систему, эти 5 попыток должны произойти в пределах установленного 10-минутногоfindtime
ограничения.findtime
Значение должно быть определенное количество секунд.maxretry
: Сколько попыток может быть сделано для доступа к серверу с одного IP-адреса до введения запрета. По умолчанию установлено значение 3.
Оповещения по электронной почте
Примечание об электронной почте в Линоде
Это руководство может включать или привести к отправке электронной почты. Стремясь бороться со спамом, Linode ограничивает исходящие соединения через порты 25, 465 и 587 на всех линодах для новых учетных записей, созданных после 5 ноября 2019 года. Для получения дополнительной информации см. Отправка электронной почты на Linode .
Чтобы получать электронную почту при запуске fail2ban, настройте параметры электронной почты:
destemail
: Адрес электронной почты, на который вы хотели бы получать электронные письма.sendername
: Имя, под которым появляется электронная почта.sender
: Адрес электронной почты, с которого Fail2ban будет отправлять электронные письма.
Заметка
Если вы не уверены в том, что ставитьsender
, запустите командуsendmail -t user@email.com
, заменив ееuser@email.com
адресом электронной почты. Проверьте свою электронную почту (включая папки со спамом, если необходимо) и просмотрите электронную почту отправителя. Этот адрес может быть использован для вышеуказанной конфигурации.
Вам также нужно будет настроить action
параметр, который определяет, какие действия происходят при достижении порога для бана. По умолчанию, %(action_)s
только запрет пользователя. %(action_mw)s
забанит и отправит письмо с отчетом WhoIs; while %(action_mwl)s
забанит и отправит электронное письмо с отчетом WhoIs и всеми соответствующими строками в файле журнала. Это также может быть изменено в зависимости от тюрьмы.
Другие настройки Jail
Помимо адреса основных настроек, приведенного выше, он jail.local
также содержит различные конфигурации тюрьмы для ряда общих служб, включая SSH и iptables. По умолчанию включен только SSH, и действие состоит в том, чтобы запретить хост / IP-адрес, который нарушает работу, путем изменения правил брандмауэра iptables.
Средняя конфигурация тюрьмы будет выглядеть следующим образом:
- /etc/fail2ban/jail.local
banaction
: Определяет действие, используемое при достижении порога. Если вы настроили брандмауэр на использование firewalld, установите значение,firewallcmd-ipset
а если вы настроили брандмауэр на использование UFW, то установите значениеufw
.banaction_allports
: Блокирует удаленный IP-адрес в каждом порту. Если вы настроили брандмауэр на использование firewalld, установите значениеfirewallcmd-ipset
.enabled
: Определяет, включен ли фильтр.port
: Порт Fail2ban должен ссылаться на сервис. Если используется порт по умолчанию, то имя службы можно указать здесь. Если используется нетрадиционный порт, это должен быть номер порта. Например, если вы переместили ваш SSH-порт на 3456, вы бы заменилиssh
на3456
.filter
: Имя файла, в/etc/fail2ban/filter.d
котором содержится информация о failregex, используемая для надлежащего анализа файлов журнала..conf
Суффикс не обязательно должен быть включен.logpath
: Дает местоположение журналов службы.maxretry
: Переопределит глобальныйmaxretry
для определенной службы.findtime
иbantime
также могут быть добавлены.action
: Это можно добавить в качестве дополнительного параметра, если действие по умолчанию не подходит для тюрьмы. Дополнительные действия можно найти вaction.d
папке.
Заметка
Тюрьмы также можно настроить как отдельные.conf
файлы, размещенные вjail.d
каталоге. Формат останется прежним.
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
Обратите внимание, что вам нужно будет отслеживать только
200
: - IP-адрес, с которого произошла неудачная попытка, всегда будет определяться как
. Последующие несколько символов неизменны и могут быть введены как литералы:
- - [ Знак
перед
[
означает, что квадратная скобка должна читаться буквально. - Следующий раздел, дата попытки входа в систему, может быть записан в виде сгруппированных выражений с использованием выражений регулярных выражений. Первая часть
01
в этом примере может быть записана как(d{2})
: круглые скобки группируют выражение, аd
ищет любые числовые цифры.{2}
отмечает, что выражение ищет две цифры подряд, т. е. день месяца.Пока что вы должны иметь:
- - [(d{2}) Следующая прямая косая черта будет вызываться с буквальной косой чертой, за
w{3}
которой следует поиск серии3
буквенно-цифровых символов (т. Е. AZ, 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 его необходимо добавить в фильтр.
- Перейдите в каталог Fail2ban
filter.d
:
cd /etc/fail2ban/filter.d
- Создайте файл с именем
wordpress.conf
и добавьте ваш failregex:- /etc/fail2ban/filter.d/wordpress.conf
-
# Fail2Ban filter for WordPress # # [Definition] failregex =
- - [(d{2})/w{3}/d{4}:1:1:1 -d{4}] "POST /wp-login.php HTTP/1.1" 200 ignoreregex =
Сохранить и выйти.
- Добавьте раздел WordPress в
jail.local
:- /etc/fail2ban/jail.local
-
[wordpress] enabled = true filter = wordpress logpath = /var/www/html/andromeda/logs/access.log port = 80,443
Это будет использовать бан по умолчанию и действие по электронной почте. Другие действия могут быть определены путем добавления
action =
строки.
Сохраните и выйдите, затем перезапустите Fail2ban.
Используйте клиент Fail2ban
Fail2ban предоставляет команду, fail2ban-client
которую можно использовать для запуска Fail2ban из командной строки:
fail2ban-client COMMAND
start
: Запускает сервер Fail2ban и тюрьмы.reload
: Перезагрузка файлов конфигурации Fail2ban.reload JAIL
: ЗаменяетсяJAIL
именем тюрьмы Fail2ban; это перезагрузит тюрьму.stop
Завершает работу сервера.status
: Покажет состояние сервера и включит тюрьмы.status JAIL
: Покажет статус тюрьмы, включая любые заблокированные на данный момент IP-адреса.
Например, чтобы проверить, что Fail2Ban запущен и SSHd jail включен, выполните:
fail2ban-client status
Status
|- Number of jail: 1
`- Jail list: sshd
Дополнительную информацию о fail2ban-client
командах смотрите в вики Fail2ban .
Восстановление блокировки
В том случае, если вы оказываетесь заперты из вашего Linode из — за Fail2ban, вы можете получить доступ с помощью нашей вне зоны Лиша консоли .
Отсюда вы можете просмотреть правила брандмауэра, чтобы убедиться, что именно fail2ban заблокировал ваш IP, а не что-то еще. Для этого введите следующую команду:
iptables -n -L
Найдите свой IP-адрес в source
столбце цепочек fail2ban (всегда с префиксом f2b
или fail2ban
), чтобы подтвердить, заблокирован ли вами сервис fail2ban:
Chain f2b-sshd (1 references)
target prot opt source destination
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.0.113.0
Заметка
Если вы не можете вспомнить свое имя тюрьмы, то вы всегда можете использовать следующую команду для вывода списка всех тюрьм:
fail2ban-client status
Если вы обнаружите, что хотите прекратить использование службы fail2ban в любое время, вы можете ввести следующее:
fail2ban-client stop
CentOS 7 и Fedora дополнительно потребуют две дополнительные команды для полной остановки и отключения:
systemctl stop fail2ban
systemctl disable fail2ban