обн. 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 table sshd_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/sh echo "Table 50 sshd" ipfw table 50 list|awk -F '/' '{ print $1 }' | nslookup $@ | grep "name =" | more echo -e "n" echo -e "n" echo "Table 51 proftpd" ipfw table 51 list|awk -F '/' '{ print $1 }' | nslookup $@ | grep "name =" | more echo -e "n" echo -e "n" echo "Table 52 postfix" ipfw table 52 list|awk -F '/' '{ print $1 }' | nslookup $@ | grep "name =" | more echo -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