FreeBSD

Защита средствами fail2ban на FreeBSD

ADVERTISEMENT

Fail2Ban — простой локальный сервис, который просматривает логи на предмет попытки подоброать пароли к ssh, ftp, http-сервисам. Если такие попытки найдены, fail2ban блокирует ip-адрес источника. Сервис очень гибко настраивается, способен оповещать по email, писать лог, сбрасывать блокировку через заданное время и прочее.

ADVERTISEMENT

1. Ставим:

1
# cd /usr/ports/security/py-fail2ban && make install clean

2. Добавляем в автозапуск:

1
# ee /etc/rc.conf
1
fail2ban_enable="YES"

3. Правим кофиг /usr/local/etc/fail2ban/jail.conf. Вначале идут дефолтные настройки, которые можно
переопределить в отдельных секциях.

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]
ignoreip = 127.0.0.1 192.168.1.0/24
# время бана в секундах
bantime  = 600
 
# время проверки,за которое событие успеет повторится
findtime  = 900
 
# максимальное число правонарушений
maxretry = 2
 
# метод парсинга логов
backend = auto
usedns= no
 
[ssh-ipfw]
enabled  = true
filter   = bsd-sshd
action   = bsd-ipfw[table=50]
#           sendmail[name=ssh, dest=admin@example.com]
logpath  = /var/log/auth.log
 
[proftpd-ipfw]
enabled  = true
filter   = proftpd
action   = bsd-ipfw[table=51]
#           sendmail[name=proftpd, dest=admin@example.com]
logpath  = /var/log/auth.log
 
[postfix-ipfw]
enabled  = true
filter   = postfix
action   = bsd-ipfw[table=52]
#           sendmail[name=postfix, dest=admin@example.com]
logpath  = /var/log/maillog
bantime  = 604800
maxretry = 3
 
[wordpress]
enabled = true
filter = wordpress
action   = bsd-ipfw[table=53]
#           sendmail[name=wordpress, dest=admin@example.com]
logpath = /var/log/auth.log

4. Правим /usr/local/etc/fail2ban/action.d/bsd-ipfw.conf

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

5. Ставим плагин WP fail2ban Cоздаём файл /usr/local/etc/fail2ban/filter.d/wordpress.conf

1
touch /usr/local/etc/fail2ban/filter.d/wordpress.conf

 

1
2
3
4
5
6
7
8
9
10
11
[INCLUDES]
#
before = common.conf
#
[Definition]
#
_daemon = wordpress
#
failregex = ^%(__prefix_line)sAuthentication failure for .* from $
#
ignoreregex =

6. Правим /etc/rc.firewall

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
${fw} add 10 deny tcp from ${proftpd_ban_table} to me 21 via ${LanOut}
${fw} add 11 deny tcp from ${sshd_ban_table} to me 22 via ${LanOut}
${fw} add 12 deny tcp from ${postfix_ban_table} to me 25 via ${LanOut}
${fw} add 13 deny tcp from ${wordpress_ban_table} to me 80 via ${LanOut}

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

ADVERTISEMENT
Подписаться
Уведомить о
guest


2 Comments
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии