Документация по ОС FreeBSD Суббота, 20.04.2024, 02:47
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Безопасность

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
fail2ban_enable="YES"

Правим кофиг со страшным названием /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
Просмотров: 1773 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024