Bruteblock — защита от перебора паролей по ssh
Bruteblock — написан на C, на основе анализа лога auth.log блокирует злоумышленников, которые пробуют подобрать пароль по ssh.
1. Ставим.
# cd /usr/ports/security/bruteblock && make install clean
2. Редактируем. /usr/local/etc/bruteblock/ssh.conf
# cat /usr/local/etc/bruteblock/ssh.conf # 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 = 2 # Время, в секундах в течении которого должны произойти max_count # неудачных попыток входа. within_time = 300 # Время жизни правила блокировки, по истечению которого bruteblockd # удаляет правило из таблицы. # 30 минут reset_ip = 1800 # Номер таблицы ipfw2 ipfw2_table_no = 101
Отключить резолвинг ДНС-имен для ssh
# echo 'UseDNS no' >> /etc/ssh/sshd_config # sh /etc/rc.d/sshd restart
3. /etc/syslog.conf
auth.info;authpriv.info |exec /usr/local/sbin/bruteblock -f /usr/local/etc/bruteblock/ssh.conf
4. Добавляем в автозапуск.
# echo '# Syslogd settings change' >> /etc/rc.conf # echo 'syslogd_flags="-c"' >> /etc/rc.conf # sh /etc/rc.d/syslogd restart # echo '# Bruteblockd' >> /etc/rc.conf # echo 'bruteblockd_enable="YES"' >> /etc/rc.conf # echo 'bruteblockd_table="101"' >> /etc/rc.conf # echo 'bruteblockd_flags="-s 5"' >> /etc/rc.conf
5. Правило в файрвол.
# ipfw add 11 deny all from "table(101)" to me
6. Запускаем.
# sh /usr/local/etc/rc.d/bruteblockd start
7. Проверяем.
# tail -f /var/log/auth.log | grep bruteblock