Меню сайта
Категории каталога
Fail2ban [2010]
Сегодня расскажу вам про супер полезную софтину, аналог bruteblock. Если кратко, то она умеет парсить лог, и в ответ на повторяющееся событие, что-то сделать. Например парсить лог ssh и банить того- кто превысил количество попыток входа на указанное время. Банить или просто что-то сделать, можно как сами захотите, либо использовать уже гoтовые примеры для ipfw, iptables, hosts.deny. И самое главное есть уже готовые примеры для ssh, exim, postfix,cyrus-imap, apache, lighttpd, named и тд (!!!). Написана на питоне, памяти ест около 10 мег, что в приципе не критично. Спасибо разрабам и питону - тут формат регулярных выражений и всех конфигов очень-очень прост. Настройка и установка займет 5 минут, а пользы и радости хоть отбавляй :)))) Итак задача облегчить несчастливую судьбу постфикса Oct 27 00 :11 :11 server postfix/smtpd[41757 ]: NOQUEUE: reject: RCPT from
post.vesta.no[147 .29 .149 .71 ]: 450 4 .1 .1 <lixinop@k.dp.ua>: Recip
ient address rejected: unverified address : unknown user : "lixinop";
from =<> to =<lixinop@k.dp.ua> proto=ESMTP helo =<post.vesta.no>
Oct 27 00 :21 :33 server postfix/smtpd[57744 ]: NOQUEUE: reject: RCPT from unknown
[81 .19 .69 .161 ]: 450 4 .7 .1 Client host rejected: cannot find you
r hostname , [81 .19 .69 .161 ]; from =<root@server0.kentonmedia.com> to =<
secret@k.dp.ua> proto=ESMTP helo =<server0.kentonmedia.com>
и апача
[Thu Apr 22 18 :55 :10 2010 ] [error] [client 91 .142 .217 .147 ] File does not
exist: /usr/local/www/inkom/phpMyAdmin-2 .2 .3
[Thu Apr 22 18 :55 :10 2010 ] [error] [client 91 .142 .217 .147 ] File does not exist:
/usr/local/www/inkom/phpMyAdmin-2 .2 .6
[Thu Apr 22 18 :55 :10 2010 ] [error] [client 91 .142 .217 .147 ] File does not exist:
/usr/local/www/inkom/phpMyAdmin-2 .5 .1
[Thu Apr 22 18 :55 :11 2010 ] [error] [client 91 .142 .217 .147 ] File does not exist:
/usr/local/www/inkom/phpMyAdmin-2 .5 .4
[Thu Apr 22 18 :55 :11 2010 ] [error] [client 91 .142 .217 .147 ] File does not exist:
/usr/local/www/inkom/phpMyAdmin-2 .5 .6
[Thu Apr 22 18 :55 :11 2010 ] [error] [client 91 .142 .217 .147 ] File does not exist:
/usr/local/www/inkom/phpMyAdmin-2 .6 .0
Ставим
portmaster security/py-fail2ban
/etc/rc.conf
Правим кофиг со страшным названием /usr/local/etc/fail2ban/jail.conf, замечу что мониторить можно несколько логов и задавать свои действия. Вначале идут дефолтные настройки, которые можно переопределить в отдельных секциях.
[DEFAULT]
ignoreip = 127 .0 .0 .1 195 .268 .118 .27 216 .227 .266 .66
# "bantime" is the number of seconds that a host is banned.
# время бана в секундах
bantime = 600
# A host is banned if it has generated "maxretry" during the last
# "findtime" seconds.
# время проверки,за которое событие успеет повторится, чтоб отловить
# и забанить
findtime = 900
# "maxretry" is the number of failures before a host get banned.
# максимальное число правонарушений :)
maxretry = 3
# "backend" specifies the backend used to get files modification.
# Available options are "gamin", "polling" and "auto". This option can
# be overridden in each jail too (use "gamin" for a jail and "polling"
# for another).
# gamin: requires Gamin (a file alteration monitor) to be installed. If
# Gamin is not installed, Fail2ban will use polling.
# polling: uses a polling algorithm which does not require external libraries.
# auto: will choose Gamin if available and polling otherwise.
# метод парсинга логов можно еще через Gamin, если он будет установлен
backend = auto
[postfix-ipfw]
enabled = true
# использовать фильтр из примеров /filter.d/postfix.conf
filter = postfix
# использовать /action.d/bsd-ipfw.conf
action = bsd-ipfw[table=50 ]
# можно слать себе мыло кого забанили, мне как то не надо :)))
# sendmail[name=Postfix, dest=gonzo@k.dp.ua]
# что парсить
logpath = /var/log/maillog
# банить на 7 суток гггг
bantime = 604800
#bantime = 1
# если 3 раза встретилось в логах
maxretry = 3
[apache_jail-ipfw]
enabled = true
filter = apache-nohome
action = bsd-ipfw[table=55 ]
# sendmail[name=Postfix, dest=artem@k.dp.ua]
logpath = /usr/jails/web02/var/log/httpd-error.log
# банить на 8 часов
bantime = 28800
maxretry = 5
Правим /usr/local/etc/fail2ban/filter.d./postfix.conf Формат регулярок прост, я глянул в логи и мне понадобилось так
failregex = reject: RCPT from (.*)\[<HOST>\]: 450 4 .1 .1
reject: RCPT from (.*)\[<HOST>\]: 450 4 .7 .1
reject: RCPT from (.*)\[<HOST>\]: 504 5 .5 .2
Подробнее тут http://www.fail2ban.org/wiki/index.php/Postfix. Большой плюс что все можно проверить
#>fail2ban-regex /var/log/maillog 'reject: RCPT from (.*)\[<HOST>\]:
450 4 .1 .1 '
Success, the total number of match is 4466
Если глянуть другие примеры, можно было еще по джентельменски предупреждать как тут :))
actionban = printf %%b "Hi,\n
The IP <ip> has just been banned by Fail2Ban after
<failures> attempts against <name>.\n
Regards,\n
Fail2Ban"|mail -s "[Fail2Ban] <name>: banned <ip>" <dest>
Правим /usr/local/etc/fail2ban/filter.d./apache-nohome.conf
failregex = [[]client <HOST>[]] File does not exist:
Правим /usr/local/etc/fail2ban/action.d/bsd-ipfw.conf
actionban = /sbin/ipfw table <table> add <ip>
actionunban = /sbin/ipfw table <table> delete <ip>
#actionunban =
При остановке демона он старательно разбанивает все IP. (!) И добавляем в /etc/rc.firewall
postfix_ban_table="table(50 )"
apache_jail_ban_table="table(55 )"
# fail2ban
${fwcmd} add 10 deny tcp from ${postfix_ban_table} to me 25 via ${oif}
${fwcmd} add 11 deny tcp from ${apache_jail_ban_table} to me 80 via ${oif}
Радуемся жизни, теперь в логах тишина и мир :))) PS начинаю задумываться над тем, чтобы вообще убрать команду разбана, а руками потом убирать кого надо, тогда можно время бана уменьшить до 1 сек.. Рекомендую прочесть ман по постфиксу, если у вас есть строка reject_unverified_recipient, в unverified_recipient_reject_code по дефолту идет 450 вместо 550.По мотивам http://forum.lissyara.su/viewtopic.php?f=20&t=29255#p267441 http://www.fail2ban.org/wiki/index.php/MANUAL_0_8 http://www.linux16.net/node/267
Источник: http://www.lissyara.su/articles/freebsd/security/fail2ban/
Категория: Безопасность | Добавил: oleg (13.11.2010) | Автор: gonzo111
Просмотров: 1858 | Рейтинг: 0.0 /0 |
- Оценить -
Отлично
Хорошо
Неплохо
Плохо
Ужасно
Добавлять комментарии могут только зарегистрированные пользователи.
[
Регистрация |
Вход ]
Форма входа
Друзья сайта