fail2ban - утилита, которая парсит логи и выполняет определенные действия на некоторые повторяющиеся события в течении какого-то времени..
Например за несколько неудачных попыток авторизоваться по ssh за некоторое время забанить источник.
Очень полезна для предотвращения перебора паролей и различных зловредных действий.
Методов блокировки также несколько: ipfw, iptables, hosts.deny .
Есть уже много готовых примеров для ssh, exim, postfix,cyrus-imap, apache, lighttpd, named и тд (!!!). Можно их составлять и самим, для этого Вам понадобится некоторое знание регулярных выраженией в python. Сама настройка очень проста и логична.
Рассмотрю базовую установку на FreeBSD и настройку блокировки брутфорса ssh.
Итак приступим:
Установка fail2ban (не забываем предварительно обновить порты)
Мне также пришлось поменять регулярные выражения в /filter.d/bsd-sshd.conf, т.к. эти базовые регулярки не отрабатывали. Привел их к следующему виду:
Также у меня есть подсети, которые не используются.
Если к ip из этих подсетей идет упорное обращение, то можно считать, что это происходит сканирование диапазона сети.
В ipfw есть правило с логированием для блокировки обращения к таким подсетям.
Таким образом можно отслеживать таких "разведчиков" и блокировать полностью эти ip. Добавляем новый раздел в файл jail.conf
Ссылки:
fail2ban.org
fail2ban на www.lissyara.su
Блокирование DNS DDoS при помощи пакета fail2ban
Защита сервера Asterisk с помощью fail2ban
Например за несколько неудачных попыток авторизоваться по ssh за некоторое время забанить источник.
Очень полезна для предотвращения перебора паролей и различных зловредных действий.
Методов блокировки также несколько: ipfw, iptables, hosts.deny .
Есть уже много готовых примеров для ssh, exim, postfix,cyrus-imap, apache, lighttpd, named и тд (!!!). Можно их составлять и самим, для этого Вам понадобится некоторое знание регулярных выраженией в python. Сама настройка очень проста и логична.
Рассмотрю базовую установку на FreeBSD и настройку блокировки брутфорса ssh.
Итак приступим:
Установка fail2ban (не забываем предварительно обновить порты)
cd /usr/ports/security/py-fail2ban
make install clean
Добавляем в /etc/rc.conf
fail2ban_enable="YES"
Настраиваем ротацию логов, добавляем в /etc/newsyslog.conf
# FAIL2BAN
/var/log/fail2ban.log 600 7 200 * JC
Настраиваем основной конфиг /usr/local/etc/fail2ban/jail.conf
[DEFAULT]
ignoreip = 127.0.0.1 10.0.0.1
# "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
[ssh-ipfw]
enabled = true
# использовать фильтр из примеров /filter.d/bsd-sshd.conf
filter = bsd-sshd
# использовать /action.d/bsd-ipfw.conf
# в квадратных скобках указываем значения переменных, в #данном случае указываем, что нужно добавить ip адрес в #таблицу 100 с tablearg 22 (я использую, как пометку причины бана)
action = bsd-ipfw[table=100, tablearg=22]
logpath = /var/log/auth.log
maxretry = 3
# банить на 7 суток
bantime = 604800
Правим /usr/local/etc/fail2ban/action.d/bsd-ipfw.conf
actionban = /sbin/ipfw table <table> add <ip> <tablearg>
actionunban = /sbin/ipfw table <table> delete <ip>
Примечание: При рестарте fail2ban снимает все баны. Для того чтоб происходил бан, должено быть правило в фаерволе типа:
ipfw add 10 deny ip from table'(100)' to any
Мне также пришлось поменять регулярные выражения в /filter.d/bsd-sshd.conf, т.к. эти базовые регулярки не отрабатывали. Привел их к следующему виду:
failregex = ^.* sshd.* (?:error: PAM: )?[A|a]uthentication (?:failure|error) for .* from <HOST>\s*$
^.* sshd.* Did not receive identification string from <HOST>$
^.* sshd.* Failed [-/\w]+ for .* from <HOST>(?: port \d*)?(?: ssh\d*)?$
^.* sshd.* ROOT LOGIN REFUSED.* FROM <HOST>\s*$
^.* sshd.* [iI](?:llegal|nvalid) user .* from <HOST>\s*$
^.* sshd.* User \S+ from <HOST> not allowed because not listed in AllowUsers$
^.* sshd.* authentication failure; logname=\S* uid=\S* euid=\S* tty=\S* ruser=\S* rhost=<HOST>(?:\s+user=.*)?\s*$
^.* sshd.* refused connect from \S+ \(<HOST>\)\s*$
^.* sshd.* reverse mapping checking getaddrinfo for .* \[<HOST>\] .* POSSIBLE BREAK-IN ATTEMPT!$
Также у меня есть подсети, которые не используются.
Если к ip из этих подсетей идет упорное обращение, то можно считать, что это происходит сканирование диапазона сети.
В ipfw есть правило с логированием для блокировки обращения к таким подсетям.
Таким образом можно отслеживать таких "разведчиков" и блокировать полностью эти ip. Добавляем новый раздел в файл jail.conf
[ipfw-ban]
enabled = true
# этот фильтр создадим позже /filter.d/ipfw-ban.conf
filter = ipfw-ban
action = bsd-ipfw[table=100, tablearg=29999]
# Направляем на логи ipfw (у меня вынесены в отдельный лог)
# Можно направить на стандартный лог /var/log/security
logpath = /var/log/ipfw/ipfw.log
maxretry = 5
# банить на 7 суток
bantime = 604800
Нам нужно составить регулярное выражение, по которому будет анализироваться файл логов. Можно тестировать сразу "на лету" и смотреть, что получается..
Составим регулярное выражение для строки вида:
Jul 26 11:30:10 hostname kernel: ipfw: 29999 Deny TCP 50.57.93.243:42222 не_используемый_ip_адресс:80 out via net2
В простейшем виде будет вот такая регулярка:
fail2ban-regex /var/log/ipfw/ipfw.log '^.* ipfw: 29999 Deny \S* <HOST>\S* \S* out via net2$'
Running tests
=============
Use regex line : ^.* ipfw: 29999 Deny \S* <HOST>\S* \S* out via net2$
Use log file : /var/log/ipfw/ipfw.log
Results
=======
Failregex
|- Regular expressions:
| [1] ^.* ipfw: 29999 Deny \S* <HOST>\S* \S* out via net2$
|
`- Number of matches:
[1] 228 match(es)
Ignoreregex
|- Regular expressions:
|
`- Number of matches:
Summary
=======
Addresses found:
[1]
124.6.181.219 (Tue Jul 26 11:00:38 2011)
124.6.181.219 (Tue Jul 26 11:00:39 2011)
...
188.132.129.9 (Tue Jul 26 11:39:52 2011)
Date template hits:
473 hit(s): MONTH Day Hour:Minute:Second
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second Year
0 hit(s): WEEKDAY MONTH Day Hour:Minute:Second
0 hit(s): Year/Month/Day Hour:Minute:Second
0 hit(s): Day/Month/Year Hour:Minute:Second
0 hit(s): Day/MONTH/Year:Hour:Minute:Second
0 hit(s): Month/Day/Year:Hour:Minute:Second
0 hit(s): Year-Month-Day Hour:Minute:Second
0 hit(s): Day-MONTH-Year Hour:Minute:Second[.Millisecond]
0 hit(s): Day-Month-Year Hour:Minute:Second
0 hit(s): TAI64N
0 hit(s): Epoch
0 hit(s): ISO 8601
0 hit(s): Hour:Minute:Second
0 hit(s): <Month/Day/Year@Hour:Minute:Second>
Success, the total number of match is 228
However, look at the above section 'Running tests' which could contain important
information.
Убедились, что регулярка отработала нормально, теперь ее можно добавлять в фильр /filter.d/ipfw-ban.conf
[Definition]
failregex = ^ipfw: 29999 Deny \S* .* out via net2$
Перезапускаем fail2ban
#/usr/local/etc/rc.d/fail2ban restart
Shutdown successful
2011-07-26 12:02:58,546 fail2ban.server : INFO Starting Fail2ban v0.8.4
2011-07-26 12:02:58,546 fail2ban.server : INFO Starting in daemon mode
Ссылки:
fail2ban.org
fail2ban на www.lissyara.su
Блокирование DNS DDoS при помощи пакета fail2ban
Защита сервера Asterisk с помощью fail2ban
Спасибо. Можно еще добавить от сюда http://sysadmin.te.ua/linux/monitoring-systems/nastrojka-fail2ban-dlya-wowza.html настройку своего штампа даты, если возникает проблема з логами.
ОтветитьУдалить