обн. 05.06.2023 Fail2Ban — простой локальный сервис, который просматривает логи на предмет попытки подоброать пароли к ssh, ftp, http-сервисам. Если такие попытки найдены, fail2ban блокирует ip-адрес источника. Сервис очень гибко настраивается, способен оповещать по email, писать лог, сбрасывать блокировку через заданное время и прочее.
| 
 1 
 | 
# pkg install py-fail2ban | 
2. Добавляем в автозапуск:
| 
 1 
 | 
sysrc fail2ban_enable="YES" | 
3. Создать СВОЙ конфиг /usr/local/etc/fail2ban/jail.local. Вначале идут настройки по-умолчанию, которые можно переопределить в отдельных секциях.
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
 | 
 [DEFAULT] # выявляем неудачные попытки ввода пароля enabled = true # выявляем потенциальные сканирования для применения эксплойтов и php уязвимостей enabled = true # выявляем попытки переполнения Апача enabled = true # выявляем неудачные попытки в поиске домашней директории на сервере enabled = true  | 
4. Создаем свой/usr/local/etc/fail2ban/action.d/bsd-ipfw.local
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
 | 
[Definition]actionstart =actionstop =actioncheck =#actionban = ipfw table <table> add <ip>actionunban = ipfw table <table> delete <ip>[Init]localhost = 127.0.0.1 | 
6. Правим скрипт сетевого экрана
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
 | 
#fail2ban tablesshd_ban_table="table(50)"proftpd_ban_table="table(51)"postfix_ban_table="table(52)"wordpress_ban_table="table(53)"#fail2ban$cmd 09 deny ip from «table(1)» to any #таблица по-умолчанию 
$cmd 10 deny tcp from ${proftpd_ban_table} to me 21 via ${WAN}$cmd 11 deny tcp from ${sshd_ban_table} to me 22 via ${WAN}$cmd 12 deny tcp from ${postfix_ban_table} to me 25 via ${WAN}$cmd 13 deny tcp from ${wordpress_ban_table} to me 80 via ${WAN} | 
7. Скрипт получения DNS имен из IP в таблице ipfw. Создаём файл dns.sh
| 
 1 
 | 
touch dns.sh | 
| 
 1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
 | 
#!/bin/shecho "Table 50 sshd"ipfw table 50 list|awk -F '/' '{ print $1 }'| nslookup $@ |grep "name =" | moreecho -e "n"echo -e "n"echo "Table 51 proftpd"ipfw table 51 list|awk -F '/' '{ print $1 }'| nslookup $@ |grep "name =" | moreecho -e "n"echo -e "n"echo "Table 52 postfix"ipfw table 52 list|awk -F '/' '{ print $1 }'| nslookup $@ |grep "name =" | moreecho -e "n"echo -e "n"echo "Table 53 wordpress"ipfw table 53 list|awk -F '/' '{ print $1 }'| nslookup $@ |grep "name =" | more | 
Источники: https://www.lissyara.su/articles/freebsd/security/fail2ban/?
https://habr.com/ru/post/409915/
https://www.site-motor.ru/docs/freebsd/security_fail2ban.html
https://forum.sys-adm.in/index.php?topic=3121.0