Цикл небольших заметок по настройке серверов

K

kenny

Гость
#1
Исторически сложилось так что я на дух не переношу все что связано с Ms,моя любовь к unix-подобным системам в том что настроек ровно столько сколько у тебя знаний ну и конечно в гибкости операционной системы.
Сегодня мы поговорим о защите от брутфорса ssh на примере программы BruteBlock.
Ниже будет приведена установка,настройка в ос freebsd.
Приступим:)
!!!! Обновите порты !!!!
Установка
Ищим самы программу

Код:
test# whereis bruteblock
bruteblock: /usr/ports/security/bruteblock
Переходим и устанавливаем
Код:
cd /usr/ports/security/bruteblock && make install clean && rehash
Следующее что сделаем это приступим к настройки
Код:
ee /usr/local/etc/bruteblock/ssh.conf
Видим внутри примерно следующее
Код:
# Sample configuration file for the OpenSSH daemon

# regexp rule. Please rember that you MUST specify only one match for
# ip address to block
#
# this regexp for the OpenSSH server matches lines like:
#
# comment: auth via key only
#sshd[72593]: Illegal user hacker from 1.2.3.4
#
# comment: pwd auth, but no such user
#sshd[72593]: Failed password for illegal user sammmm from 1.2.3.4
#
# comment: correct user, but wrong password
#sshd[72626]: Failed password for samm from 1.2.3.4
#
# comment: other messages
#sshd[41945]: error: PAM: authentication error for alice from 192.168.0.1
#sshd[41945]: error: PAM: authentication error for illegal user root from 192.168.0.1
#sshd[41945]: Failed keyboard-interactive/pam for invalid user root from 192.168.0.1 port 64507 ssh2
#sshd[16666]: Failed unknown for illegal user asdfasdfasd from 192.168.0.1 port 52652 ssh2
#sshd[16666]: Did not receive identification string from 192.168.0.1
#
regexp          = sshd.*(?:Illegal|Invalid) user \S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp1        = sshd.*Failed \S+ for (?:(?:illegal|invalid) user )?\S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp2        = sshd.*error: PAM: authentication error for (?:(?:illegal|invalid) user )\S+ from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
regexp3        = sshd.*Did not receive identification string from (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})

# Number of failed login attempts within time before we block
max_count      = 4

# Time in seconds in which all failed login attempts must occur
within_time    = 60

# Time in seconds to block ip in firewall

# 10 minutes
reset_ip      = 600

# IPFW table number to add "bad" hosts
ipfw2_table_no = 1
где
regexp - правила неправильной авторизации
max_count - сколько можно сделать ошибок
within_time -за какое време считается перебор, в данном примере надо сделать 4 ошибки за минуту
reset_ip - на сколько хост угадит в бан
ipfw2_table_no - номер таблице в фаерволе
У меня получилось следующее
# conf file kenny opennix.tula.su
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

#Кто знает пароли тот не делает больше двух ошибок
max_count = 2

# вполне достаточно 30 секунд
within_time = 30

# Убиваем на много
# Time in seconds to block ip in firewall

# много
reset_ip = 3000000

# у меня номер таблици 10, первая свободная
ipfw2_table_no = 10
Практически все уже готово последние штрихи
Правим /etc/syslog.conf
Должно получится следующее
Код:
test# cat /etc/syslog.conf |grep auth
auth.info;authpriv.info                        /var/log/auth.log
auth.info;authpriv.info |exec /usr/local/sbin/bruteblock -f /usr/local/etc/bruteblock/ssh.conf
Добавляем правила в фаервол
Код:
ipfw add 11 deny all from "table(10)" to me
ipfw add 11 deny all from me to "table(10)"
Редактируем rc.conf и запускаем демоны
Код:
echo 'syslogd_flags="-c"' >> /etc/rc.conf
echo 'bruteblockd_enable="YES"' >> /etc/rc.conf
 echo 'bruteblockd_table="10"' >> /etc/rc.conf
echo 'bruteblockd_flags="-s 5"' >> /etc/rc.conf
/etc/rc.d/syslogd restart
/usr/local/etc/rc.d/bruteblockd start
Как советуют люди и я их понимаю, редактируем конфигурационный файл ssh
Код:
echo 'UseDNS no' >> /etc/ssh/sshd_config
Смотрим логи :)
Jul 5 23:34:49 test sshd[31345]: Invalid user oracle from 85.17.76.159
Jul 5 23:34:49 test sshd[31348]: Invalid user pener from 85.17.76.159
Jul 5 23:34:49 test bruteblock[31347]: Adding 85.17.76.159 to the ipfw table 10
Вот теперь 85.17.76.159 посидит в бане :)
 

alesel

Пользователь
#2
Спасибо. Хорошая вещь.
Я сам от Unix'a далек, но сижу на CentOS. Установка многим будет отличаться?
 

diden05

Пользователь
#6
Спасибо. Хорошая вещь.
Я сам от Unix'a далек, но сижу на CentOS. Установка многим будет отличаться?
В линуксе можно использовать

Please Login or Register to view hidden text.

она поможет от подбора паролей не только для ssh, но и почти для всех сервисов, типа MTA, FTP итд.
 
K

kenny

Гость
#8
перебор для почтовика правила помогают.
для фтп можно написать скрипт который будет парсить логи :)
 

diden05

Пользователь
#9
Можно и штаны через голову надевать, я предложил нормально работающее решение для Linux.
 
K

kenny

Гость
#10
Вы говорите как человек который боиться sh))))
смотрите система то простая))) Крон и скрипт что может быть проще и удобней :) и да табличка для неверных которым нельзя к вам на ресурс и все :)