fail2ban

Эта утилита для блокировки IP адресов, которые не удовлетворяют правилам.

sudo apt update
sudo apt upgrade

sudo apt install fail2ban -y

Для корректной работы требуется, чтобы был установлен пакет python3:

python3 --version

Если python3 не установлен, то ставим:

sudo apt install python3 python3-setuptools

Проверяем статус службы:

systemctl status fail2ban

# проверяем логи
tail -f /var/log/fail2ban.log

Делаем копию файла /etc/fail2ban/jail.conf:

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

Примечание: fail2ban сначала считывает информацию из файла jail.conf потом переопределяет информацией из jail.local (т.е. параметры в этом файле приоритетней).

Второй способ это переопределять данные в каталоге /etc/fail2ban/jail.d

Форматы времени

years?, yea?, yy?
months?, mon?
weeks?, wee?, ww?
days?, da, dd
hours?, hou? hh?
minutes?, min?, mm?
seconds?, sec?, ss?

Примечание: знак вопроса (?) указывает на опциональность — последний символ модно не указывать.

Пример:

1y 60mo or 1d12h30m

Преобразование времени в секунды:

fail2ban-client --str2sec 1d12h
Преобразование в секунды

Игнорирование IP

Чтобы случайно не забанить самого себя рекомендуется в файле /etc/fail2ban/jail.d/defaults-*.conf указать параметр ignoreip

[DEFAULT]
ignoreip = 127.0.0.1 84.252.136.72

Теперь любые действия с этих IP будут игнорироваться.

Если порт для правила не стандартный, то:

[sshd]
enabled = true
port    = 8022 # переопределение порта

Рецидивисты

Для IP адресов, которые часто нарушают правило, можно предусмотреть бан на более долгое время. В файл /etc/fail2ban/jail.d/defaults-*.conf добавляем

[recidive]
enabled  = true

Примечание: в этом случаи IP будет забанен полностью даже для входа по SSH

Так же помним следующее:

# Jail for more extended banning of persistent abusers
# !!! WARNINGS !!!
# 1. Make sure that your loglevel specified in fail2ban.conf/.local
#    is not at DEBUG level -- which might then cause fail2ban to fall into
#    an infinite loop constantly feeding itself with non-informative lines
# 2. Increase dbpurgeage defined in fail2ban.conf to e.g. 648000 (7.5 days)
#    to maintain entries for failed logins for sufficient amount of time

Инкрементное увеличение бана

[DEFAULT]
# default it is banTime * 1, 2, 4, 8, 16, 32...
bantime.increment = true

«Повысить карму»

Можно делиться своими забаненными IP адреса с всеми и для этого требуется зарегистрировать на сайте https://www.abuseipdb.com/ и добавить следующий конфиг в /etc/fail2ban/jail.d/defaults-*.conf в одну из секций, например sshd:

[sshd]
...
action_abuseipdb = abuseipdb
action           = %(action_)s
                   %(action_abuseipdb)s[abuseipdb_apikey="YOUR.API.KEY", abuseipdb_category="18.22"]

Список категорий можно узнать на сайте https://www.abuseipdb.com/categories

Сброс настроек fail2ban

sudo systemctl stop fail2ban
# или
sudo fail2ban-client stop

Обнуляем лог файл fail2ban:

sudo truncate -s 0 /var/log/fail2ban.log
sudo rm /var/lib/fail2ban/fail2ban.sqlite3

Запускаем сервис

sudo systemctl start fail2ban

Пример создания собственного правила

Создаём файл в каталоге /etc/fail2ban/filter.d, например test.conf

Записываем туда текст:

[Definition]
failregex = ^<HOST> .* "POST /wp-admin/admin-ajax.php .* 200 \d* "https?://.*"$
            ^<HOST> .* "GET .* 404 .*$

Проверяется следующей строкой:

fail2ban-regex /var/log/custom.log /etc/fail2ban/filter.d/test.conf

Пример анализируемого файла:

tible; Googlebot/2.1; +http://www.google.com/bot.html)"
66.249.64.39 - - [28/Jan/2023:10:40:52 +0000] "GET /wp-content/uploads/2019/10/image-6.png HTTP/1.1" 200 139893 "-" "Googlebot-Image/1.0"
109.237.97.141 - - [28/Jan/2023:10:43:16 +0000] "GET /users/sign_in HTTP/1.1" 404 246 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
109.237.97.141 - - [28/Jan/2023:10:43:17 +0000] "GET /users/sign_in HTTP/1.1" 404 246 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
109.237.97.141 - - [28/Jan/2023:10:43:18 +0000] "GET /users/sign_in HTTP/1.1" 404 246 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
109.237.97.141 - - [28/Jan/2023:10:43:19 +0000] "GET /users/sign_in HTTP/1.1" 404 246 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
66.249.64.39 - - [28/Jan/2023:10:52:07 +0000] "GET /wp-content/uploads/2018/11/%D0%90%D0%BD%D0%BD%D0%BE%D1%82%D0%B0%D1%86%D0%B8%D1%8F-2018-11-22-143023.jpg HTTP/1.1" 200 72157 "-" "Googlebot-Image/1.0"
192.168.1.1 - - [28/Jan/2023:11:27:34 +0000] "POST /wp-cron.php?doing_wp_cron=1674905253.9880919456481933593750 HTTP/1.1" 200 0 "https://appcode.mobwal.com/wp-cron.php?doing_wp_cron=1674905253.9880919456481933593750" "WordPress/6.1.1; ht
tps://appcode.mobwal.com"
162.142.125.219 - - [28/Jan/2023:11:27:35 +0000] "GET / HTTP/1.1" 200 147169 "-" "-"
162.142.125.219 - - [28/Jan/2023:11:27:35 +0000] "GET / HTTP/1.1" 200 37782 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)"
162.142.125.219 - - [28/Jan/2023:11:27:36 +0000] "PRI * HTTP/2.0" 400 166 "-" "-"
162.142.125.219 - - [28/Jan/2023:11:27:36 +0000] "GET /wp-content/uploads/2017/12/logo-100x100.png HTTP/1.1" 200 12295 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)"
162.142.125.219 - - [28/Jan/2023:11:27:37 +0000] "GET /wp-content/uploads/2017/12/logo.png HTTP/1.1" 200 35952 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)"
162.142.125.219 - - [28/Jan/2023:11:27:37 +0000] "GET /favicon.ico HTTP/1.1" 404 246 "-" "Mozilla/5.0 (compatible; CensysInspect/1.1; +https://about.censys.io/)"
66.249.64.43 - - [28/Jan/2023:11:30:46 +0000] "GET /?feed=rss2&tag=nodejs HTTP/1.1" 200 2547 "-" "Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.5414.101 Mobile Safari/537.36
 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

Полезные ссылки:

  • https://www.youtube.com/watch?v=mUiNYCrz-1M — Fail2ban — самое полное руководство по установке и настройке.
  • https://denshub.com/fail2ban-server-protection/ — Best Server Protection with Fail2ban
  • https://www.abuseipdb.com/ — сайт для просмотра статистики данных по собственному серверу
Print Friendly, PDF & Email

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