Fail2ban

Как защитить свой сервер с помощью fail2ban на centos 8

Configure fail2ban to Secure MariaDB Server:

There are rare cases when we expose MariaDB service port to the network. However, exposing the default port for MariaDB also exposes it to various threats.

Therefore, in such cases, we can use fail2ban to secure MariaDB against brute force, dictionary, DOS and DDOS attacks.

# sed -i "/^\/a\\enabled=true" /etc/fail2ban/jail.local
# systemctl restart fail2ban.service

MariaDB server default log level is 1 and MariaDB does not record failed login attempts in log file when log level is 1.

In this case, fail2ban does not work because it doesn’t find any login failures in MariaDB log file.

Therefore, we have to increase the log level of MariaDB server, so, it can record failed login attempts in log files.

Use the following commands to increase log level of MariaDB server.

# sed -i "/^\/a\\log-warnings=2" /etc/my.cnf
# systemctl restart mariadb.service

Perform multiple login attempts with wrong username/password from another host. The fail2ban will ban the host  for the predefined bantime, because of the suspicious activity.

# mysql -u ahmer -p12a -h 192.168.116.171
ERROR 1045 (28000): Access denied for user 'ahmer'@'192.168.116.152' (using password: YES)
# mysql -u root -p12a -h 192.168.116.171
ERROR 1045 (28000): Access denied for user 'root'@'192.168.116.152' (using password: YES)
# mysql -u root -p12a -h 192.168.116.171
ERROR 1045 (28000): Access denied for user 'root'@'192.168.116.152' (using password: YES)
# mysql -u r1 -p12a -h 192.168.116.171
ERROR 1045 (28000): Access denied for user 'r1'@'192.168.116.152' (using password: YES)
# mysql -u r2 -p12a -h 192.168.116.171
ERROR 1045 (28000): Access denied for user 'r2'@'192.168.116.152' (using password: YES)
# mysql -u r4 -p12a -h 192.168.116.171
ERROR 1045 (28000): Access denied for user 'r4'@'192.168.116.152' (using password: YES)
# mysql -u r5 -p12a -h 192.168.116.171
ERROR 1045 (28000): Access denied for user 'r5'@'192.168.116.152' (using password: YES)
# mysql -u r7 -p12a -h 192.168.116.171
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.116.171' (111)

Check the status of mysqld-jail using fail2ban-client command.

# fail2ban-client status mysqld-auth
Status for the jail: mysqld-auth
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     5
|  `- File list:        /var/log/mariadb/mariadb.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   192.168.116.152

We have successfully installed fail2ban on CentOS 7 and configured fail2ban to secure ssh, Apache, Nginx and MariaDB servers against brute-force, dictionary, DOS and DDOS attacks.

How to Check the Status of Jail

You can list all the activated Fail2Ban jail by running the following command:

$ sudo fail2ban-client status

You should get all activated jail in the following output:

Status
|- Number of jail:	6
`- Jail list:	proftpd, pure-ftpd, sshd, webmin-auth, wordpress

If you want to check the banning status of specific Fail2Ban jail (SSH), run the following command:

$ sudo fail2ban-client status sshd

You should see all IPs banned by Fail2Ban in the following output:

Status for the jail: sshd
|- Filter
|  |- Currently failed:	1
|  |- Total failed:	14
|  `- File list:	/var/log/auth.log
`- Actions
   |- Currently banned:	3
   |- Total banned:	3
   `- Banned IP list:	209.208.62.183 221.181.185.19 222.186.30.112

You can also check the Fail2Ban log for the banned IPs:

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

Output:

2021-05-24 12:32:53,084 fail2ban.filter         : INFO     Found 222.186.30.112 - 2021-05-24 12:32:53
2021-05-24 12:32:53,117 fail2ban.actions        : NOTICE   Ban 222.186.30.112

If you want to block any remote IP address manually for SSH service, run the following command:

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

You can also check the Iptables rules added by Fail2Ban with the following command:

$ sudo iptables -nL

Output:

...
Chain f2b-sshd (1 references)
target     prot opt source               destination         
REJECT     all  --  222.186.42.7         0.0.0.0/0            reject-with icmp-port-unreachable
RETURN     all  --  0.0.0.0/0            0.0.0.0/0           

Configuring Find Time and Max Retry flags

findtime is the duration between the number of failures before a ban is set. For example, if Fail2ban is set to ban an IP Address after five failures (maxretry), those failures must occur within the findtime duration/threshold. In other words, this is our threshold window.

Let’s say our approach is to ban a client for 1 day when there have been 5 failed login attempts within a 10-minute window, you need to change this setting:

bantime = 1dfindtime = 10mmaxretry = 5

Then restart the fail2ban service by running:

systemctl restart fail2ban

and check its status:

root@ubuntu-s-1vcpu-1gb-nyc3–01:~# sudo fail2ban-client status sshdStatus for the jail: sshd|- Filter| |- Currently failed: 0| |- Total failed: 5| `- File list: /var/log/auth.log`- Actions |- Currently banned: 1 |- Total banned: 1 `- Banned IP list: 185.156.74.65

Динамическая защита от ботов при помощи fail2ban

sudo apt-get install fail2ban

cd /etc/fail2ban/ && cp jail.conf jail.local

cd /etc/fail2ban/filter.d/
touch apache-access.conf
touch apache-error.conf

# Apache Access Filter

failregex =
^.* ‹HOST› .*///.*
^.* ‹HOST› .*\\\.*
^.* ‹HOST› .*w00tw00t.*
^.* ‹HOST› .*WinHttpRequest.*
ignoreregex =

# Apache Error Filter

failregex =
^.*\.*w00tw00t.at.ISC.SANS.DFind.*
^.*\.*Lost connection to MySQL server during query.*
^.*\.*client denied by server configuration.*
^.*\.*Invalid URI in request.*
^.*\.*/admin.php’ not found or unable to stat
^.*\.*/wp-login.php’ not found or unable to stat
^.*\.*/vam_rss2_info.php’ not found or unable to stat
^.*\ File does no exist: .*typo3
^.*\ File does no exist: .*hostcmsfiles
^.*\ File does no exist: .*administrator
^.*\ File does no exist: .*bitrix
^.*\ File does no exist: .*bbadmin
^.*\ File does no exist: .*WebAdmin
^.*\ File does no exist: .*webmanage
^.*\ File does no exist: .*fck
^.*\ File does no exist: .*fckeditor
^.*\ File does no exist: .*web
ignoreregex =

enabled = true
port = http,https
filter = apache-access
logpath = /path/to/access.log
maxretry = 1
findtime = 600
bantime = 86400

enabled = true
port = http,https
filter = apache-error
logpath = /path/to/error.log
maxretry = 1
findtime = 600
bantime = 86400

sudo service fail2ban restart

sudo iptables -L

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

Стандартная установка Fail2ban включает два файла конфигурации,

Эти файлы не следует изменять, так как они могут быть перезаписаны при обновлении пакета.

1. Fail2ban читает файлы конфигурации в следующем порядке:

Каждый файл отменяет настройки из файла.

Самый простой способ настроить Fail2ban это скопировать в и изменить файл. Более опытные пользователи могут создать файл конфигурации с нуля. Файл не должен включать в себя все параметры из соответствующего файла, только те , которые вы хотите заменить.

2. Создайте файл конфигурации из файла по умолчанию :

3. Чтобы начать настройку сервера Fail2ban, откройте файл в текстовом редакторе :

Файл включает комментарии, описывающие, что делает каждый параметр конфигурации. В этом примере мы изменим основные настройки.

Добавить IP-адреса в белый список

В директиву можно добавить IP-адреса, диапазоны IP-адресов или хосты, которые вы хотите исключить из запрета . Здесь вы должны добавить IP-адрес вашего локального ПК и всех других машин, которые вы хотите добавить в белый список.

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

/etc/fail2ban/jail.local

Настройки бана

Значения , и варианты определения времени запрета и условия запрета.

— это срок, на который IP заблокирован. Если суффикс не указан, по умолчанию используются секунды. По умолчанию установлено значение 10 минут. Как правило, большинство пользователей хотят установить более длительное время блокировки. Измените значение по своему вкусу:

/etc/fail2ban/jail.local

Чтобы навсегда забанить IP, используйте отрицательное число.

— это промежуток времени между количеством сбоев до установки запрета. Например, если Fail2ban настроен на запрет IP-адреса после пяти сбоев ( см. Ниже), эти сбои должны произойти в течение указанного периода.

/etc/fail2ban/jail.local

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

/etc/fail2ban/jail.local

Уведомления по электронной почте

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

/etc/fail2ban/jail.local

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

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

/etc/fail2ban/jail.local

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

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

По умолчанию в CentOS 8 тюрьмы не включены. Чтобы включить джейл, нужно добавить после заголовка джейла. В следующем примере показано, как включить тюрьму:

/etc/fail2ban/jail.local

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

/etc/fail2ban/jail.local

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

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

Структура конфигурационных файлов Fail2Ban

Конфигурационные файлы программы Fail2Ban для Ubuntu расположены в директории /etc/fail2ban/ и имеют внутри этого каталога следующую структуру:

|-- action.d
|   `-- *.conf
|   `-- ...
|-- fail2ban.d
|-- filter.d
|   |-- ignorecommands
|   `-- *.conf
|   `-- ...
|-- jail.d
|   `-- defaults-debian.conf
|-- fail2ban.conf
|-- jail.conf
|-- paths-common.conf
|-- paths-debian.conf

Где:

  • /etc/fail2ban/action.d/ директория содержит файлы вида *.conf, которые содержат настройки действий программы Fail2Ban при наступлении тех или иных событий.
  • /etc/fail2ban/fail2ban.d/ директория по умолчанию пустая, может содержать пользовательские файлы конфигурации для Fail2Ban
  • /etc/fail2ban/filter.d/ директория содержит файлы вида *.conf в которых описаны регулярные выражения фильтров для jails. Если вы включили правило и при тестировании его регулярного выражения фильтра вы ведите, что оно не срабатывает, то в этой директории нужно искать соответствующий правилу фильтр и править в нем регулярное выражение.
  • /etc/fail2ban/jail.d/ директория содержит файлы вида *.conf которые создаются пользователем и в которых выполняется включение правил/jails и задание для них параметров. По умолчанию в этой директории после установки Fail2Ban находиться только один файл defaults-debian.conf в котором активирован SSH правило/jail. Это значит, что по умолчанию в Ubuntu 16.04 в Fail2Ban сразу включена защита для SSH.
  • /etc/fail2ban/fail2ban.conf файл содержит настройки самой программы Fail2Ban (но не настройки правил/jails) и его, как правило, не приходиться корректировать.
  • /etc/fail2ban/jail.conf файл, в котором заданы настройки правил/jails по умолчанию. Этот файл содержит все правила и параметры для них по умолчанию. В новой версии Fail2Ban 0.9.x предлагается этот файл не редактировать, а вместо этого использовать кастомные конфиги, которые помещенные в директорию /etc/fail2ban/jail.d/ (подробно см. ниже).
  • /etc/fail2ban/paths-common.conf файл с настройками путей для правил/jails, применяется первым.
  • /etc/fail2ban/paths-debian.conf еще один файл с настройками путей для правил/jails, применяется вторым и при пересечении переопределяет настройки из paths-common.conf

Changelog

4.3.0.9

  • Fix incorrect constant for disabling last messages (h/t @kermina).
  • Fix false positive with blocking user enumeration when a Contributor tries to list posts by another user.
  • Fix index issue with ancient versions of MySQL.
  • Fix harmless warning with a defined but empty (h/t @stevegrunwell).
  • Backport new Block event class.
  • Update Freemius library.

4.3.0.8

Workaround issue with user enumeration blocking being triggered by Gutenberg pre-loading Author list. (h/t @brrrrrrrt)

4.3.0.5

  • Fix empty username detection for multisite.
  • Fix harmless warning when activating new multisite install.
  • Fix esoteric edge-case where is loaded via a script run from the CLI in a directory with a file.

4.3.0.4 “Columbo”

  • Add new dashboard widget: last 5 messages.
  • Add full multisite support.
  • Add username login blocking (force login with email).
  • Add separate logging for login attempts with an empty username.
  • Improve user enumeration blocking compatibility with the WordPress block editor (Gutenberg).
  • Bump the minimum PHP version to 5.6.

4.2.8

  • Add link to new support forum.
  • Fix user enumeration conflict with Gutenberg (h/t @dinghy).
  • Fix notices wrt admin menu (h/t @marioivangf).
  • Fix harmless XDebug notice (h/t @dinghy).
  • Update Freemius library.

4.2.6

  • Add support for Remote Tools add-on.
  • Add support for the new ClassicPress security page.
  • Improved user enumeration blocking.

4.2.5

  • Properly fix PHP 5.3 support; tested on CentOS 6. Does not support any UI or Premium features.
  • Fix potential issue with if calling REST API or XMLRPC from admin area.

4.2.4

  • Add filter for login failed message.
  • Fix logging spam comments from admin area.
  • Fix Settings link from Plugins page.
  • Update Freemius library

4.2.3

  • Workaround for some versions of PHP 7.x that would cause s to be ignored.
  • Add config note to settings tabs.
  • Fix documentation links.

4.2.1

  • Completed support for .
  • Add support for 3rd-party plugins; see Developers.
    • Add-on for Contact Form 7 (experimental).
    • Add-on for Gravity Forms (experimental).
  • Change logging for known-user with incorrect password; previously logged as unknown user and matched by filters (due to limitations in older versions of WordPress), now logged as known user and matched by .
  • Bugfix for email-as-username – now logged correctly and matched by , not , filters.
  • Bugfix for regression in code to prevent Free/Premium conflict.

4.0.1

  • Add extra features via Freemius. This is entirely optional. WPf2b works as before, including new features listed here.
  • Add settings summary page (Settings -> WP fail2ban).
  • Add .
  • Add .
  • Add – enable logging for attempted comments on posts which are:
    • not found,
    • closed for commenting,
    • in the trash,
    • drafts,
    • password protected
  • Block user enumeration via REST API.

3.6.0

  • The filter files are now generated from PHPDoc in the code. There were too many times when the filters were out of sync with the code (programmer error) – this should resolve that by bringing the patterns closer to the code that emits them.
  • Added PHPUnit tests. Almost 100% code coverage, with the exception of which is quite hard to test properly.
  • Bugfix for .
  • Add .
  • Add .
  • now supports an array of IPs with PHP 7.
  • Moved all documentation to https://docs.wp-fail2ban.com/.

2.0.0

  • Add experimental support for X-Forwarded-For header; see .
  • Add experimental support for regex-based login blocking; see .

Выбор сервера отправки в зависимости от адреса получателя

Итак, в sender_bcc_map всю локальную почту я оставляю локально, просто указывая адрес отправителя (каждый сайт шлет почту от своего ящика) и локального пользователя, к которому она будет складываться. Если у вас много сайтов, то для каждого сайта будет свой локальный пользователь. Чаще всего это так, потому что разные сайты лучше всего запускать под разными пользователями, от которых работает веб сервер. Файл с записями для sender_bcc_map выглядит так:

 user1
 user2

Если у вас использует разные ящики для отправки, то можете настроить правило для всего домена сразу:

*@site1.ru user1
*@site2.ru user2

Дальше вам нужно выяснить, как выглядит полностью адрес домена для локальной доставки почты. Это имя задается в параметре mydomain в конфиге postfix main.cf. Допустим, там указано имя сервера — websrv.site.ru. Это не принципиально, в нашем случае там можно написать все, что угодно, но лучше использовать полное доменное имя (fqdn) самого веб сервера, которое указано в DNS записи типа А.

Теперь создаем файл transport_map, в котором пишем следующее:

websrv.site.ru local

Мы явно указываем, что всю почту для домена websrv.site.ru отправлять локально. Не забываем построить индексированный файл:

# postmap /etc/postfix/transport_map

Отправляемся в конфиг main.cf и добавляем туда параметр:

transport_maps = hash:/etc/postfix/transport_map
websrv postfix/smtpd: CC8F0602E205: client=localhost
websrv postfix/cleanup: CC8F0602E205: message-id=<>
websrv postfix/qmgr: CC8F0602E205: from=<>, size=874, nrcpt=2 (queue active)
websrv postfix/smtpd: disconnect from localhost ehlo=1 mail=1 rcpt=1 data=1 quit=1 commands=5
websrv postfix/local: CC8F0602E205: to=<>, relay=local, delay=0.07, delays=0.06/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
websrv postfix/smtp: CC8F0602E205: to=<>, relay=smtp.yandex.ru:465, delay=0.93, delays=0.06/0.01/0.23/0.63, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued on myt6-9bdf92ffd111.qloud-c.yandex.net as 1608951012-xOUj8gBhbE-oCJSqvIX)
websrv postfix/qmgr: CC8F0602E205: removed
адрес, с которого сайт ведет отправку почты
итоговый локальный адрес, куда идет пересылка почты
внешний почтовый адрес, куда идет отправление через внешний smtp
smtp.yandex.ru адрес внешнего smtp сервера

Получили в итоге то, что хотели. Внешняя почта отправляется через внешний smtp адрес, указанный в relayhost, а копии сообщений падают в локальный ящик, который находится в файле /var/mail/user1. Конкретно мне это нужно было для отладки, чтобы понять, что именно отправляет сайт.

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

sender_bcc_maps:

*@site1.ru  
*@site2.ru 

transport_map:

backupmail.ru relay::25

В данном случае backupmail.ru это отдельный почтовый домен и почтовый сервер для него для сбора всей вашей почты. Это не обязательно может быть собственноручно настроенный почтовый сервер. Можете использовать ящик в какой-то готовой службе почты. Но имейте ввиду, если это будет какой-то бесплатный сервис, то он вас быстро заблокирует, если будете слать слишком много почты на этот ящик.

Первоначальная настройка Fail2ban

Главный конфигурационный файл находится по адресу /etc/fail2ban/jail.conf, однако настоятельно не рекомендуется сразу вносить в него правки, сначала скопируем его под именем jail.local. Настройку продолжим непосредственно в этом файле, это предусмотрено разработчиками, все что вы сконфигурируете в jail.local будет автоматически перезаписывать настройки в jail.conf:

:~$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

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

:~$ vim /etc/fail2ban/jail.local

Необходимо найти и раскоментировать строку #ignoreip, добавив через пробел свой внешний статический IP адрес. В результате у вас должно получиться следующее:

ignoreip = 127.0.0.1/8 ::1 178.20.***.**

где 178.20.***.** — Ваш IP адрес.

Здесь же, в секции можно задать значения findtime и maxretry, например:

bantime = 600
findtime = 3600
maxretry = 6

Параметры findtime и maxretry определяют условия, при которых будут блокироваться вредоносные пользователи. Maxretry определяет количество попыток входа, а findtime – интервал времени, в течение которого пользователь должен пройти аутентификацию. Если клиент превысил любой из этих показателей, он будет заблокирован. Bantime определяет длительность блокировки в секундах. Эти параметры в статье будут встречаться неоднократно. Если в настройке какого либо из сервисов вы их не зададите, они будут автоматически браться с секции .

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

Важно! Путь к файлу хранения логов (logpath) обязан быть указан правильно, иначе перезапуск Fail2ban завершится ошибкой. В случае отсутствия лог-файла по указанному пути, его можно создать командой touch, например:

:~$ touch /var/log/yourlog.log
:~$ chmod 755 /var/log/yourlog.log

Теперь мы можем перейти к редактированию общих правил защиты сервисов.

Защита postfix с помощью fail2ban

Изначально fail2ban идет с комплектом готовых настроек и фильтров для защиты большинства популярных сервисов. К ним относится и postfix. Но когда я посмотрел в готовый набор с regexp для postfix, я слегка растерялся :) Он просто огромен. И самое главное, что в таком виде он не заработал на моем лог файле.

Мне стало лень ковыряться в этих правилах. Для защиты postfix от перебора паролей почтовых ящиков, достаточно банить ip адреса из следующих строк лога.

Jun 17 03:14:07 mail postfix/smtpd: warning: unknown: SASL LOGIN authentication failed: UGFzc3dvcmQ6

Для этого достаточно относительно простого regexp.

^%(__prefix_line)swarning: +\: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: *={0,2})?\s*$

Его придумал не я. Честно подсмотрел на просторах интернета. Примеров масса и у нас, и в англоязычном гугле. Далее создаем конфигурационный файл с фильтром из этого regexp — /etc/fail2ban/filter.d/postfix-sasl.conf.

before = common.conf

_daemon = postfix/smtpd
failregex = ^%(__prefix_line)swarning: +\: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed(: *={0,2})?\s*$
ignoreregex =

Можно сразу же проверить работу этого фильтра с помощью fail2ban-regex. Эта утилита никого не банит, а просто выводит информацию о работе фильтра.

# fail2ban-regex /var/log/maillog /etc/fail2ban/filter.d/postfix-sasl.conf

Команда успешно отработала и вывела результат.

24327 раз данный фильтр распознал строки, попадающие под работу фильтра. Изначально я напрягся, когда прикинул, что именно такое количество ip адресов поедет в бан с помощью iptables. Это еще не критично большое количество, но все равно достаточно много. По одному добавлять такое количество адресов не стоит. Нужно использовать списки, например, .

На деле зря испугался. Никаких проблем не будет и дальше я покажу почему. Правило обработки лога мы проверили и убедились, что оно работает. Дальше добавляем в jail.conf новую секцию.

enabled	= true
filter	= postfix-sasl
port	= smtp,465,submission,imap,imaps,pop3,pop3s
action	= iptables
logpath	= /var/log/maillog
bantime	= 60m
maxretry = 3
findtime = 60m

Пояснять тут особо нечего и так все понятно. Настройка блокировки будет проверять лог файл и записи в нем за последние 60 минут. Если будут 3 совпадения с regexp из фильтра postfix-sasl, ip адрес будет забанен на 60 минут. Таким образом, список забаненных ip адресов будет не очень большой, так как большая часть адресов будет повторяться.

Запускаем fail2ban и добавляем в автозагрузку.

# systemctl enable --now fail2ban

Проверяем лог файл /var/log/fail2ban.

Смотрим правила iptables.

# iptables -L -v -n

У вас должна появиться отдельная цепочка правил f2b-Postfix-sals с заблокированными ip адресами, которые добавил fail2ban. С защитой postfix с помощью fail2ban все. Переходим к Dovecot.

Структура конфигурационных файлов

Файлы настроек находятся в каталоге /etc/fail2ban/. Для понимания работы утилиты, рассмотрим их более детально:

action.d/*.* — конфигурация выполняемых действий;

fail2ban.conf — дефолтный конфигурационный файл;

fail2ban.d/*.* — пользовательские настройки администратора для Fail2ban;

filter.d/*.* — шаблоны для анализа логов и настройки шаблонов;

jail.conf — дефолтные настройки сервисов;

jail.d/*.* — пользовательские настройки администратора для сервисов.

Файлы paths-arch.conf, paths-common.conf, paths-debian.conf и paths-opensuse.conf хранят в себе настройки путей для различных операционных систем семейства Linux.

Понимание файла конфигурации Fail2Ban

В Fail2Ban есть два основных файла конфигурации: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Разберемся для чего они.

/etc/fail2ban/fail2ban.conf: это файл конфигурации для рабочих настроек демона Fail2Ban. Здесь определяются настройки, такие как loglevel, log file, socket и pid file.

/etc/fail2ban/jail.conf: Здесь происходит вся магия этого приложения. Это файл, в котором вы можете настроить такие вещи, как время запрета по умолчанию, количество повторений до запрета IP-адреса, белый список IP-адресов, информация об отправке почты и т.д. В основном управление поведением Fail2Ban происходит из этого файла.

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

$ sudo cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
$ sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Теперь разберемся с файлом jail.conf. Если мы используем команду less для чтения этого большого файла, все покажется довольно запутанным. В файле .conf все объясняется слишком большим количеством комментариев. Итак, давайте упростим.

Файл jail.conf делится на сервисы. Существует раздел , и он применяется ко всем сервисам. В данном файле можно увидеть различные сервисы с соответствующими настройками (если таковые имеются). Все эти сервисы обозначаются квадратными скобками. Вы увидите такие разделы, как , , и т.д.

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

ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(name)s
destemail = root@localhost
sender = root@
mta = sendmail
protocol = tcp
chain =
port = 0:65535
fail2ban_agent = Fail2Ban/%(fail2ban_version)s
banaction = iptables-multiport
banaction_allports = iptables-allports
action_abuseipdb = abuseipdb
action = %(action_)s

Рассмотрим значение некоторых из этих параметров.

  • bantime: установка продолжительности бана. По умолчанию 10 минут.
  • findtime: временное окно, в котором выполняются действие по IP. По умолчанию 10 минут. Предположим, что в 10:30 с определенного IP была предпринята попытка неудачного входа в систему. Если один и тот же IP достигнет максимального количества попыток до 10:40, он будет заблокирован. В противном случае следующая неудачная попытка после 10:40 будет считаться первой неудачной попыткой.
  • maxretry: количество неудачных попыток перед выполнением действия
  • usedns: Параметр «warn» пытается использовать обратный DNS для поиска имени хоста и запретить его с помощью имени хоста. Установка в no запретит IP, а не имя хоста.
  • destemail: адрес электронной почты, на который будут отправляться оповещения (необходимо настроить)
  • sender: имя отправителя в уведомлении по электронной почте
  • mta: агент передачи почты, используемый для уведомлений по электронной почте
  • banaction: этот параметр использует файл /etc/fail2ban/action.d/iptables-multiport.conf, чтобы установить действие после максимального числа неудачных попыток
  • protocol: тип трафика, который будет отброшен после бана

Таким образом если мы хотим внести какие-либо изменения, такие как максимальное количество повторных попыток, время запрета, время поиска и т.д., нам следует отредактировать файл jail.local.

Understanding Fail2Ban configuration file

There are two main configuration files in Fail2Ban: /etc/fail2ban/fail2ban.conf and /etc/fail2ban/jail.conf. Let me explain what they do.

/etc/fail2ban/fail2ban.conf: This is the configuration file for the operational settings of the Fail2Ban daemon. Settings like loglevel, log file, socket and pid file is defined here.

/etc/fail2ban/jail.conf: This is where all the magic happens. This is the file where you can configure things like default ban time, number of reties before banning an IP, whitelisting IPs, mail sending information etc. Basically you control the behavior of Fail2Ban from this file.

Now before you go and change these files, Fail2Ban advise to make a copy with .local file for these conf files. It’s because the default conf files can be overwritten in updates and you’ll lose all your settings.

Now let’s understand the jail.conf file. If you use the less command to read this big file, it may seem quite confusing. The conf file tries to explain everything with way too many comments. So, let me simplify this for you.

The jail.conf file is divided into services. There is a section and it applies to all services. And then you can see various services with their respective settings (if any). All these services are in brackets. You’ll see sections like , , etc.

If I remove the comments, the default section looks like this:

Let me tell you the meaning of some of these parameters.

  • bantime: Set the length of the ban. Default is 10 minutes.
  • findtime: The window in which the action on an IP will be taken. Default is 10 minutes. Suppose a bad login was attempted by a certain IP at 10:30. If the same IP reaches the maximum number of retries before 10:40, it will be banned. Otherwise, the next failed attempt after 10:40 will be counted as first failed attempt.
  • maxretry: The number of failed retries before an action is taken
  • usedns: The “warn” setting attempts to use reverse-DNS to look up the hostname and ban it using hostname. Setting it to no will ban IPs, not hostname.
  • destemail: The email address to which the alerts will be sent (needs to be configured)
  • sender: The sender name in the notification email
  • mta: Mail Transfer Agent used for notification email
  • banaction: This parameter uses the /etc/fail2ban/action.d/iptables-multiport.conf file to set the action after maximum failed retries
  • protocol: The type of traffic that will be dropped after the ban

If you want to make any changes for any jail (or for all the jail), like the maximum retries, ban time, find time etc., you should edit the jail.local file.

Как настроить Fail2ban в системах Linux

По умолчанию fail2ban использует файлы , расположенные в файле /etc/fail2ban/, которые считываются первыми. Однако они могут быть переопределены файлами , расположенными в том же каталоге.

Таким образом, файл не должен включать все настройки из файла , а будет включать только те, которые вы хотите переопределить. Изменения должны быть сделаны в файлах .local, не входящих в .conf. Это предотвратит переписывание изменений при обновлении пакета fail2ban.

Для этого урока мы будем копировать существующий файл fail2ban.conf в fail2ban.local.

# cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local

Теперь вы можете внести изменения в файл , используя ваш любимый текстовый редактор. Значения, которые вы можете изменить:

loglevel — это уровень детализации для записи. Возможные варианты:

  • CRITICAL
  • ERROR
  • WARNING
  • NOTICE
  • INFO
  • DEBUG

logtarget — регистрировать действия в определенном файле. Значение по умолчанию — /var/log/fail2ban.log . Однако вы можете изменить это:

  • STDOUT — вывод любых данных
  • STDERR — вывод любых ошибок
  • SYSLOG — запись на основе сообщений
  • File — вывод в файл
  • socket — каталог, в который будет помещен файл сокета.
  • pidfile — расположение файла pidfile.

Настройка Fail2ban jail.local

Одним из наиболее важных файлов в fail2ban является , который содержит настройки защиты конкретных сервисов. Здесь вы определяете службы, для которых fail2ban должен быть включен.

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

Другой способ сделать это — просто скопировать файл .conf с помощью:

# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local

Если вы используете CentOS или Fedora, вам нужно будет изменить бэкэнд в jail.local с «auto» на «systemd».

Включение Backend в Fail2ban

Если вы используете Ubuntu/Debian, нет необходимости вносить эту модификацию, даже если они также используют systemd .

Файл jail включит SSH по умолчанию для Debian и Ubuntu, но не для CentOS. Если вы хотите включить его, просто измените следующую строку в /etc/fail2ban/jail.local :

enabled = true

Время запрета и повтора

Вы можете настроить обстоятельство, после которого IP-адрес будет заблокирован. Для этой цели fail2ban использует bantime, findtime и maxretry.

  • bantime — это количество секунд, в течение которого IP-адрес будет оставаться заблокированным (по умолчанию 10 минут).
  • findtime — количество времени между попытками входа в систему до того, как хост заблокирован. (по умолчанию 10 мин). Другими словами, если fail2ban настроен на блокировку IP-адреса после 3 неудачных попыток входа в систему, эти 3 попытки должны выполняться в течение периода поиска (10 минут).
  • maxretry — сколько попыток должно быть сделано до применения запрета. (по умолчанию 3).

Белые списки IP-адресов

Разумеется, вы захотите присвоить белый список определенным IP-адресам. Чтобы настроить такие IP-адреса, откройте файл /etc/fail2ban/jail.local с помощью вашего любимого текстового редактора и раскомментируйте следующую строку:

ignoreip = 127.0.0.1/8  ::1

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

Уведомления по электронной почте

Если вы хотите получать оповещения по электронной почте по событию, вам необходимо настроить следующие параметры в файле /etc/fail2ban/jail.local :

  • destemail — адрес электронной почты, где вы получите уведомление.
  • Sendername — отправитель, которого вы увидите при получении сообщения.
  • sender — адрес электронной почты, с которого fail2ban отправит электронные письма.

По умолчанию mta (агент передачи писем) установлен в sendmail.

Чтобы получить уведомление по почте, вам также необходимо изменить настройку «action» :

Action = %(action_)s

К одному из них:

action = %(action_mw)s
action = %(action_mwl)s
  • %(action_mw)s — заблокирует хост и отправит письмо с помощью отчета whois.
  • %(action_mwl)s — заблокирует хост, предоставит информацию whois и всю соответствующую информацию из файла журнала.
Понравилась статья? Поделиться с друзьями:
Быть в курсе нового
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: