FreeBSD

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

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

1. Ставим:

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

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

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

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

[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

[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

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

 

[INCLUDES]
#
before = common.conf
#
[Definition]
#
_daemon = wordpress
#
failregex = ^%(__prefix_line)sAuthentication failure for .* from $
#
ignoreregex =

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

#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

touch dns.sh
#!/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

Оставить комментарий

1 комментарий

  • Please do not edit the fail2ban.conf and jail.conf files as they
    will be overwritten upon each upgrade of the port.

    Instead, create new files named fail2ban.local and jail.local