Защита ssh от брутфорса
В один прекрасный день мне надоело наблюдать в логах кучу записей о попытке ботов подобрать пасс к моему хосту, не то чтоб я боялся root закрыт, учетки типа demon, webmaster, oracle не используются, пароли стойкие, просто достала сотня другая мусорных записей в день. И решил я прикрутить какую-нибудь защиту от этих гадов.
Соответсвенно для работы необходим настроенный фаервол.
Если по каким-то причинам Вы не используете порты, скачайте посследнию версию с сайта sshguard и соберите в ручную
Перечитайте файл конфигурации
#pfctl -f /etc/pf.conf
Далее раскоментируйте или добавьте ( если отсутвует) строку в /etc/syslog.conf
и перезапустите syslog
#/etc/rc.d/syslogd restart
Собственно после этих манипулйций sshguard будет блокировать атаки с параметрами по умолчанию.
При атаке в /var/log/auth.log мы увидим примерно следующие
-a количество неудачных попыток аутентификации после которого ip будет заблокирован. По умолчанию 4.
-p через сколько секунд ip будет разблокирован. По умолчанию 420.
-s сколько секунд sshguard помнит ip. По умолчанию 1200. Чтоб было понятней если с ip идет одна атака в 30 минут то он ни когда не попадет в бан при дефолтовой настройке.
-w белые ip, сети, или путь к файлу белых адресов. Формат файла одна строка — одна запись, # определяет комментарии.
-b определяет через сколько блокировок ip будет добавлен в черный список и путь до него. Черный список загружается при старте sshguard и автоматически не очищается.
у sshguard нет файла конфигурации параметры задаются при старте sshguard. В нашем случае sshguard пускается syslog поэтому отредактируем syslog.conf так, что sshguard будет блокировать ip после 3 неудачных попыток аутонтификации на 30 минут, а после 5 блокировок заносить его в черный список.
По аналогии с настройкой под sshguard редактируем файл конфигурации PF
перечитываем конфигурационный файл
#pfctl -f /etc/pf.conf
Редактируем syslog.conf
и перезапустите syslog
#/etc/rc.d/syslogd restart
Вот собственно и всё.
Чем защищаем?
Полазив в портах и в инете я остановился на sshguard, правда на одном из хостов по непонятным причинам он работать не захотел и там пришлось использовать sshit.Пинципы работы.
sshguard и sshit работают по одному принципу. Анализируют системные сообщения о неверной аутентификации и в случае достижения определенного значения заносят атакующий ip в блокирующее правило фаервола. Через определенное время ip из правила удаляется.Соответсвенно для работы необходим настроенный фаервол.
SSHGuard
sshguard умеет работать с- AIX native firewall — for IBM AIX operating systems
- netfilter/iptables — for Linux-based operating systems
- Packet Filter (PF) — for BSD operating systems (Open, Free, Net, DragonFly -BSD)
- IPFirewall (IPFW) — for FreeBSD and Mac OS X
- IP Filter (IPFILTER) — for FreeBSD, NetBSD and Solaris
- tcpd's hosts_access (/etc/hosts.allow) — portable across UNIX
- null — portable do-nothing backend for applying detection but not prevention
Установка sshguard.
Устанавливаем из портовcd /usr/ports/security/sshguard-pf/ && make install cleanЕсли по каким-то причинам Вы не используете порты, скачайте посследнию версию с сайта sshguard и соберите в ручную
./configure --with-firewall=pf && make && make installНастройка ОС для работы sshguard.
Нам необходимо добавить две строки в конфигурацию PFtable <sshguard> persist объявляем таблицу куда sshguard вносит ip роботов.block in quick on $if0 proto tcp from <sshguard> to $if0 port ssh label "ssh brute" Собственно само блокирующее правило, его стоит разметить на самом верху блока правил конфигурационного файла PF. $if0 интерфейс на котором будут блокироваться подключения, для блокировки на всех интерфейсах замените на any.Перечитайте файл конфигурации
#pfctl -f /etc/pf.conf
Далее раскоментируйте или добавьте ( если отсутвует) строку в /etc/syslog.conf
auth.info;authpriv.info |exec /usr/local/sbin/sshguard и перезапустите syslog
#/etc/rc.d/syslogd restart
Собственно после этих манипулйций sshguard будет блокировать атаки с параметрами по умолчанию.
При атаке в /var/log/auth.log мы увидим примерно следующие
Jun 16 11:01:40 www sshd[31817]: Invalid user test from 61.172.251.183
Jun 16 12:29:48 www sshd[31957]: Invalid user test from 85.114.130.168
Jun 16 12:29:49 www sshd[31959]: Invalid user test from 85.114.130.168
Jun 16 12:29:49 www sshd[31961]: Invalid user test from 85.114.130.168
Jun 16 12:29:50 www sshd[31963]: Invalid user test from 85.114.130.168
Jun 16 12:29:50 www sshguard[29978]: Blocking 85.114.130.168:4 for >420secs: 4 failures over 2 seconds.Настройка параметров sshguard
sshguard имеет ряд параметров которые мы можем переопредилить-a количество неудачных попыток аутентификации после которого ip будет заблокирован. По умолчанию 4.
-p через сколько секунд ip будет разблокирован. По умолчанию 420.
-s сколько секунд sshguard помнит ip. По умолчанию 1200. Чтоб было понятней если с ip идет одна атака в 30 минут то он ни когда не попадет в бан при дефолтовой настройке.
-w белые ip, сети, или путь к файлу белых адресов. Формат файла одна строка — одна запись, # определяет комментарии.
-b определяет через сколько блокировок ip будет добавлен в черный список и путь до него. Черный список загружается при старте sshguard и автоматически не очищается.
у sshguard нет файла конфигурации параметры задаются при старте sshguard. В нашем случае sshguard пускается syslog поэтому отредактируем syslog.conf так, что sshguard будет блокировать ip после 3 неудачных попыток аутонтификации на 30 минут, а после 5 блокировок заносить его в черный список.
auth.info;authpriv.info |exec /usr/local/sbin/sshguard -a 3 -p 1500 -b 5:/usr/local/etc/sshguard.blacklistSshit
Sshit — это perl скрипт соответсвенно необходимо чтобы в системе был perl, а так же 2 модуля- IPC::Shareable
- Proc::PID::File
Установка sshit
cd /usr/ports/security/sshit/ && make install cleanКонфигации sshit.
Sshit имеет конфигурационный файл /usr/local/etc/sshit.conf в котором можно переопредилить значения по умолчанию.FIREWALL_TYPE = "pf"; # Какой firewall используем
MAX_COUNT = 3; # Количество неудачных попыток аутентификации после которого ip блокируется
WITHIN_TIME = 60; # В течении сколько секунд должно произойти заданное кол-во неудачных аутентификаций
RESET_IP = 300; # Через сколько секунд ip будет разблокирован.
PFCTL_CMD = "/sbin/pfctl";
PF_TABLE = "badhosts" #имя таблицы куда заносятся плохие ipНастройка ОС для работы sshit.
По аналогии с настройкой под sshguard редактируем файл конфигурации PF
table <badhosts> persistblock in quick on $if0 proto tcp from <badhosts> to $if0 port ssh label "ssh brute"перечитываем конфигурационный файл
#pfctl -f /etc/pf.conf
Редактируем syslog.conf
auth.info;authpriv.info |exec /usr/local/sbin/sshitи перезапустите syslog
#/etc/rc.d/syslogd restart
Вот собственно и всё.
- +3
- 16 июня 2010, 04:05
- mamahtehok
Пробовал так защищаться, когда работал у провайдера. Но когда за одним натом сидит несколько админов и несколько саппортов(хоть и с минимум провами), то бывают казусы — один ступит с паролем и все седят пока не разбанится ИП или приходится ехать через весь город на АТС. Я нашёл другой выход — просто поменял порт на ssh и всё пучком.
ЗЫ: Изучаю интерфейс — думал в посте это стрелки прокрутки, я нехотел ставить минус. Сори.
ЗЫ: Изучаю интерфейс — думал в посте это стрелки прокрутки, я нехотел ставить минус. Сори.
ну так для этого у sshguard'a есть белые списки, которые не подлежат блокировке.
ps минус компенсировал плюсов, я думаю Егоров не сильно обидится ;)
ps минус компенсировал плюсов, я думаю Егоров не сильно обидится ;)

- mamahtehok
- 18 июня 2010, 20:31
- ↑
- ↓
А нечто подобное под OpenSuse 10.2 прикрутить можно? SSH защищена ключом, но долбят постоянно — тоже километры логов наблюдаю.

- Grass_snake
- 24 июня 2010, 09:23
- ↓
sshguard можно прикрутить, только правила на iptables, а не на pf в остальном все тоже самое.

- mamahtehok
- 24 июня 2010, 10:53
- ↑
- ↓
Вот и пригодилось. Вывожу Фряху на общедоступный уровень — если всё получится и будут нюансы — отпишусь…

- Grass_snake
- 01 сентября 2010, 13:21
- ↑
- ↓
Комментарии (7)
RSS свернуть / развернуть