Bruteblock – написан на C, на основе анализа лога auth.log блокирует злоумышленников, который пробуют подобрать пароль по ssh (и не только).

Установка

1
2
 cd /usr/ports/security/bruteblock/
make install clean

Добавляем строку в /etc/syslog.conf

1
2
!*
auth.info;authpriv.info                         |exec /usr/local/sbin/bruteblock -f /usr/local/etc/bruteblock/ssh.conf

Добавляем в /etc/rc.conf

1
2
3
4
5
6
...
syslogd_flags="-c"
...
bruteblockd_enable="YES"
bruteblockd_table="1" # номер таюлицы ipfw блокированых айпишек
bruteblockd_flags="-s 5"

Редактируем /etc/ssh/sshd_config

1
2
3
...
UseDNS no
...

Редактируем конфиг /usr/local/etc/bruteblock/ssh.conf Bruteblock для ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# regexp - регулярное выражение, по которому производится поиск ip адресов
# при попытках подбора паролей. Формат регулярных выражений - PCRE.
# "regexp0","regexp1",... "regexp9" . опциональные поля, содержащие до 10
# дополнительных регулярных выражений при попытках подбора паролей.
# Формат регулярных выражений - PCRE.
regexp = sshd.*Illegal user \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp1 = sshd.*Failed password for (?:illegal user )?\S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp2 = sshd.*error: PAM: authentication error for illegal user \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp3 = "sshd.*Failed keyboard-interactive\/pam for \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
regexp4 = sshd.*Invalid user \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp5 = sshd.*error: PAM: authentication error for \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp6 = sshd.*Did not receive identification string from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp7 = sshd.*User \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) not allowed because not listed in AllowUsers

# Количество неудачных попыток входа в течении времени within_time,
# после которых bruteblock добавляет ip в таблицу ipfw2.
max_count = 4

# Время, в секундах в течении которого должны произойти max_count
# неудачных попыток входа.

within_time = 240

 # Время жизни правила блокировки, по истечению которого bruteblockd
# удаляет правило из таблицы.
# 10 минут
reset_ip = 600

# Номер таблицы ipfw2
ipfw2_table_no = 1

В фаерволе добавил правило

1
ipfw add 5 deny all from table\(1\) to me 22

Запускаем Bruteblock и перезапускаем syslog

1
2
3
/etc/rc.d/sshd restart
/etc/rc.d/syslogd restart
/usr/local/etc/rc.d/bruteblockd start

Нравится эта статья? Подпишитесь на RSS-ленту и получите еще больше классной информации!