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

Насколько полезным был этот пост?

Нажмите на звезду, чтобы оценить!

Средний рейтинг 5 / 5. Голосов: 2

Пока оценок нет! Будьте первым, поставь свою оценку этому посту.

Мы сожалеем, что этот пост не был полезен для вас!

Давайте улучшим этот пост!

Расскажите, как мы можем улучшить этот пост?

Теги
Подписаться
Уведомление о
guest

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

2 Комментарий
Newest
Oldest Most Voted
Inline Feedbacks
View all comments
doorsfan
doorsfan
09.11.2019 13:09

Куда класть dns.sh ?

Back to top button
2
0
Would love your thoughts, please comment.x
()
x
Close
Close