FreeBSD: Fail2Ban устанавливаем и настраиваем

Всем привет!
Решил рассказать о Fail2Ban в операционной системе FreeBSD.
В этой заметке рассмотрим установку и базовую настройку Fail2Ban в связке с брандмауэром IPFW, с помощью которого мы защитим  sshd от попыток подбора паролей.

Fail2Ban — это программный комплекс для предотвращения вторжений, который защищает серверы от брутфорса.
Написан на языке Python, для блокировки использует штатные механизмы операционной системы, в нашем случае файрвол IPFW

Устанавливаем Fal2Ban, установку будем делать из портов, не забываем обновить порты:

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

Создаем локальный конфигурационный файл Fail2Ban:

# cp /usr/local/etc/fail2ban/jail.conf /usr/local/etc/fail2ban/jail.local

Редактируем его:

# vi /usr/local/etc/fail2ban/jail.local

[DEFAULT]
#Ваш белый список IP адресов, которые будут игнорироваться fail2ban
ignoreip = 127.0.0.1/8 10.10.10.0/24

[sshd]
# Включаем правило
enabled  = true
port = ssh
# auth.log (переменная определена в paths-common.conf), можно явно указать файл лога 
logpath = %(sshd_log)s
backend = %(sshd_backend)s
# Указываем что делать с нарушителями (добавить IP в таблицу "sshd" IPFW ) 
action = bsd-ipfw[table=sshd]
# Количество попаданий
maxretry = 3
# Время бана в секундах (10800/3600(сек. в часе)= 3 часа)
bantime  = 10800

Включим файрвол и разрешим запуск fail2ban:

# vi /etc/rc.conf
firewall_enable="YES"
firewall_logging="YES"
firewall_script="/etc/fw.sh"

fail2ban_enable="YES"

Сделаем IPFW открытым по умолчанию:

# vi /boot/loader.conf
net.inet.ip.fw.default_to_accept=1
# kenv net.inet.ip.fw.default_to_accept=1

Создадим файл конфигурации ipfw:

# vi /etc/fw.sh
#!/bin/sh
ipfw="/sbin/ipfw -q"

# Сбрасываем все правила:
${ipfw} -f flush

${ipfw} add allow ip from any to any via lo0
${ipfw} add deny ip from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any

#Fail2Ban
${ipfw} add deny ip from table'(sshd)' to any

#All for all
${ipfw} add allow ip from any to any

Сделаем файл исполняемым:

# chmod +x /etc/fw.sh

Запускаем ipfw:

# /etc/rc.d/ipfw start

Проверяем все ли правила ipfw у нас загрузились:

# ipfw show
00100   0     0 allow ip from any to any via lo0
00200   0     0 deny ip from any to 127.0.0.0/8
00300   0     0 deny ip from 127.0.0.0/8 to any
00400   0     0 deny ip from table(sshd) to any
00500  20  1876 allow ip from any to any
65535 154 14173 allow ip from any to any

Видим, что у нас есть таблица «sshd«, которую fail2ban будет заполнять ip адресами нарушителей.
Запускаем Fail2Ban:

# /usr/local/etc/rc.d/fail2ban start
Server ready

В поставке fail2ban есть утилита контроля и управления — fail2ban-client.
С ее помощью проверим какие правила у нас обрабатываются:

# fail2ban-client status
Status
|- Number of jail:      1
`- Jail list:   sshd

Так же можем посмотреть статус любого загруженного правила:

# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

Попробуем подключится с удаленного хоста к ssh, указав 3 раза неправильный пароль.
Удалось ввести только два раза, вот лог подключения:

Feb  5 15:28:39 free12 sshd[3283]: error: PAM: Authentication error for vladimir from 10.200.200.35
Feb  5 15:28:39 free12 sshd[3283]: Failed keyboard-interactive/pam for vladimir from 10.200.200.35 port 42847 ssh2
Feb  5 15:28:39 free12 sshd[3283]: Failed unknown for vladimir from 10.200.200.35 port 42847 ssh2

Посмотрим лог fail2ban:

less /var/log/fail2ban.log | grep Ban
2020-02-05 15:28:40,081 fail2ban.actions        [3265]: NOTICE  [sshd] Ban 10.200.200.35

Так же можем посмотреть с помощью fail2ban-client:

 # fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     3
|  `- File list:        /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   10.200.200.35
root@free12:/usr/local/etc/fail2ban #

Давайте вытащим IP из бана:

# fail2ban-client set sshd unbanip 10.200.200.35
1

Собственно все.

Рейтинг
( 3 оценки, среднее 4.67 из 5 )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.