|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> Security
—> Fail2ban
Fail2ban
Автор: gonzo111.
Сегодня расскажу вам про супер полезную софтину, аналог 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.
Бонус-скриптик получения DNS имен из IP в таблице ipfw , чтоб немного ориентироваться кто в списке был забанен.
#!/bin/sh
echo "Table 50"
ipfw table 50 list|awk -F '/' '{ print $1 }'| nslookup $@ |
grep "name =" | more
echo -e "\n"
echo -e "\n"
echo "Table 55"
ipfw table 55 list|awk -F '/' '{ print $1 }'| nslookup $@ |
grep "name =" | more
| По мотивам
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://forum.lissyara.su/viewtopic.php?f=14&t=29457&p=268041#p268041.
размещено: 2010-11-03,
последнее обновление: 2010-11-22,
автор: gonzo111
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
|
Статистика сайта
|
Сейчас на сайте находится: 13 чел.
|
За последние 30 мин было: 43 человек
|
За сегодня было 3712 показов, 774 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [10 шт.]