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 и всю соответствующую информацию из файла журнала.