FastNetMon

Showing posts with label fail2ban. Show all posts
Showing posts with label fail2ban. Show all posts

Monday, 11 February 2013

Защита серверов на Debian Squeeze от брутфорса посредством fail2ban

Ставим:
apt-get install -y fail2ban
Сервис сразу же запустится и будет добавлен в автозапуск.

Также fail2ban сразу создаст свою цепочку, через которую будет пропускать трафик (забаниваемые адрес) конкретного сервера (и как следвствие - крайне низкий оверхед, что плюс):

sudo iptables -nvL
Chain INPUT (policy ACCEPT 845 packets, 149K bytes)
 pkts bytes target     prot opt in     out     source               destination      
    0     0 fail2ban-ssh  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 22
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination      
Chain OUTPUT (policy ACCEPT 815 packets, 336K bytes)
 pkts bytes target     prot opt in     out     source               destination      
Chain fail2ban-ssh (1 references)
 pkts bytes target     prot opt in     out     source               destination      
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           



Открываем конфиг:
vi /etc/fail2ban/jail.conf

Там будет ряд блоков с заголовками вида - [ssh], это блоки правил, описывающих, какие именно сервисы контролируются и защищаются от брутфорса. Стандартно включен лишь один - ssh, он нам и нужен. Обращаю внимание! Что здесь нужно исправить порт, если он у Вас отличается от стандартного (я рекомендую это сделать!).


[ssh]
enabled = true
port    = 1022
filter  = sshd
logpath  = /var/log/auth.log
maxretry = 6


Теперь самое важное - внесите свой IP адрес (если он постоянный) в белый список fail2ban, это делается в том же файле в блоке:
ignoreip = 127.0.0.1 178.xx.yy.zz

Применяем измененный конфиг (если внесли туда коррективы):

/etc/init.d/fail2ban restart

Лог работы сервиса fail2ban можно смотреть так:

tail -f /var/log/fail2ban.log

Теперь настало время проверить fail2ban в деле - пробуем 6 раз ввести неверно ssh пароль со внешнего хоста, чтобы нас забанило.

Забаненые айпи можно смотреть вот так (либо в фаероволле):

sudo fail2ban-client status ssh
Status for the jail: ssh
|- filter
|  |- File list: /var/log/auth.log
|  |- Currently failed: 1
|  `- Total failed: 7
`- action
   |- Currently banned: 1
   |  `- IP list: 188.40.74.10
   `- Total banned: 1

Раазбанивать ошибочно забаненых юзеров вот так (криво, да, но прямой механизм в fail2ban появится лишь к 0.9 версии, да и-то не факт):

sudo iptables -nvL --line-numbers
Chain INPUT (policy ACCEPT 77613 packets, 15M bytes)
num   pkts bytes target     prot opt in     out     source               destination      
1      974 75898 fail2ban-ssh  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 1022
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination      
Chain OUTPUT (policy ACCEPT 75761 packets, 30M bytes)
num   pkts bytes target     prot opt in     out     source               destination      
Chain fail2ban-ssh (1 references)
num   pkts bytes target     prot opt in     out     source               destination      
1       25  2596 DROP       all  --  *      *       188.xx.xx.xx         0.0.0.0/0        
2      949 73302 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Разбаниваем (очень аккуратно, чтобы ):

sudo iptables -D fail2ban-ssh 1


Источник: http://debianclusters.cs.uni.edu/index.php/Fail2Ban:_Preventing_Brute_Force_SSH

Tuesday, 13 April 2010

Как узнать о ротации лог файла, который Вы читаете?

Пока из вариантов - следить за его размером при каждой итерации чтения, если уменьшился - значит прошла ротация. Но можно узнать, как это сделали в fail2ban, который писан на Python:

2010-04-11 06:45:49,427 fail2ban.filter : INFO Log rotation detected for /var/log/auth.log
2010-04-11 06:45:49,558 fail2ban.filter : INFO Log rotation detected for /var/log/mail.log
2010-04-11 06:45:49,630 fail2ban.filter : INFO Log rotation detected for /var/log/mail.log
2010-04-11 06:45:52,431 fail2ban.filter : INFO Log rotation detected for /var/log/auth.log
2010-04-11 06:45:52,562 fail2ban.filter : INFO Log rotation detected for /var/log/mail.log
2010-04-11 06:45:52,634 fail2ban.filter : INFO Log rotation detected for /var/log/mail.log

Thursday, 25 February 2010

При старте системы некорректно стартует fail2ban

В логах вот такая фигня:
tail -f /var/log/fail2ban.log
2010-02-25 01:17:49,943 fail2ban.jail : INFO Jail 'sasl' started
2010-02-25 01:17:50,086 fail2ban.actions.action: ERROR iptables -N fail2ban-dovecot
iptables -A fail2ban-dovecot -j RETURN
iptables -I INPUT -p tcp -m multiport --dports 110,143,993,995 -j fail2ban-dovecot returned 200
2010-02-25 01:17:50,087 fail2ban.actions.action: ERROR iptables -N fail2ban-sasl
iptables -A fail2ban-sasl -j RETURN
iptables -I INPUT -p tcp -m multiport --dports 25,587 -j fail2ban-sasl returned 200
2010-02-25 01:17:50,090 fail2ban.actions.action: ERROR iptables -N fail2ban-proftpd
iptables -A fail2ban-proftpd -j RETURN
iptables -I INPUT -p tcp -m multiport --dports ftp -j fail2ban-proftpd returned 200


Кто подскажет, почему так?

UPDATE:
И это тоже баг fail2ban: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=554162 а фикс взят отсюда: http://sourceforge.net/tracker/?func=detail&aid=2870788&group_id=121032&atid=689044

Фиксим.
vi /etc/fail2ban/action.d/iptables-multiport.conf


И корректируем actionstart следующим образом (добавляем sleep....):

14 actionstart = sleep ${RANDOM:0:1}.${RANDOM: -1:1}
15 iptables -N fail2ban-
16 iptables -A fail2ban- -j RETURN
17 iptables -I INPUT -p -m multiport --dports -j fail2ban-


И аналогично поступаем с actionstop:

23 actionstop = sleep ${RANDOM:0:1}.${RANDOM: -1:1}
24 iptables -D INPUT -p -m multiport --dports -j fail2ban-
25 iptables -F fail2ban-
26 iptables -X fail2ban-


После этого попробуйте перезапустить машину и все должно подняться успешно. Бага вызвана тем, что fail2ban мультипоточный и при запуске нескольких процессов происходит race-condition - попытка добавить забаниваемого юзера до того, как правило fail2ban-name будет создано. Вот так, да.

UPDATE:
Все заработало! На 8ядерном i7 полет нормальный, 4 правила после ребута поднимаются на ура.

UPDATE:
при повторном ребуте также все окей!

Исправленное правило для fail2ban для защиты Postfix / Debian

Необходимо заменить содержимое файла /etc/fail2ban/filter.d/sasl.conf на следующее (в стандартной версии баг в регулярном выражении):


# Fail2Ban configuration file
#
# Author: Yaroslav Halchenko
#
# $Revision: 510 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile. The
# host must be matched by a group named "host". The tag "" can
# be used for standard IP/hostname matching and is only an alias for
# (?:::f{4,6}:)?(?P\S+)
# Values: TEXT
#

# Example:
# Feb 25 00:38:07 v1 postfix/smtpd[11100]: warning: unknown[95.79.205.2]: SASL PLAIN authentication failed: authentication failure

# fixed by FastVPS version:
failregex = : warning: [-._\w]+\[\]: SASL (?:LOGIN|PLAIN|(?:CRAM|DIGEST)-MD5) authentication failed: authentication failure$

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Wednesday, 25 November 2009