Эта утилита для блокировки 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/ — сайт для просмотра статистики данных по собственному серверу