FreeBSD. DenyHosts защитит вас от брутфорса SSH
Примерно в начале ноября специалисты по безопасности заметили необычное поведение ботнетов. Они начали координированную работу по медленному перебору логинов и паролей к самым разным хостам. Специалисты называют это «медленным брутфорсом», потому что скорость перебора паролей крайне мала (нужно перебрать все комбинации паролей для всех возможных логинов по словарю) — этот процесс займёт несколько лет.
Но за счёт огромного числа машин, участвующих в «атаке», дело всё-таки постепенно продвигается — каждый день злоумышленники получают какой-то «улов». Запросы идут с разных IP (см. логи). Атака явно координируется из общего центра (у ботов есть общий словарь для перебора вариантов).
Ботнеты, участвующие в «медленном брутфорсе», стали умнее...
Что же, если и вы подвергаетесь перебору (а кто не подвергается ему сейчас...), то вам на помощь придет DenyHosts!
Установка
Я ставил вот так, более подробно на официальной странице.
# wget # chmod 0700 install.sh # ./install.sh
Однако есть и порт для этой утилиты
# /usr/ports/security/denyhosts # make install clean
Работает это дело через TCP-Wrappers, поэтому необходимо запускать sshd через inetd
#sshd_enable="YES" inetd_enable="YES" denyhosts_enable="YES" syslogd_flags="-c"
Добавим строку в /etc/inetd.conf
ssh stream tcp nowait root /usr/sbin/sshd sshd -i -4
Создадим файл для забаненных IP
# touch /etc/hosts.deniedssh
Отредактируем файл /etc/hosts.allow, в самом начале файла (~ строка 23)
# разрешаем локалке sshd : 192.168.0.0/255.255.255.0 : allow # запретим целому списку sshd : /etc/hosts.deniedssh : deny # остальным разрешим sshd : ALL : allow
Отредактируем конфигурационный файл
# vi /usr/local/etc/denyhosts.conf
Нас интересует следующее содержимое:
# сюда будет высылать отчет о забаненных IP ADMIN_EMAIL = mail@example.com # какие сервисы контролировать (можете добавить например ftpd) BLOCK_SERVICE = sshd # лог DAEMON_LOG = /var/log/denyhosts # список забаненых IP HOSTS_DENY = /etc/hosts.deniedssh # секурный лог, туда помещается информация о соединениях SECURE_LOG = /var/log/auth.log # количество неправильных авторизаций DENY_THRESHOLD_INVALID = 5
Теперь при добавлении IP в забаненый список вы получите уведомление на mail@example.com
Стартуем утилиту
# /usr/local/etc/rc.d/denyhosts start
Как сказал дуд, вообще лучше использовать сертификаты и отказаться от ввода логина/пароля, однако это не всегда удобно...

Комментарии
Хочу порекомендовать sshguard. Все очень удобно, работает через firewall, а не через hosts.deny. Удобно и приятно настраивается
А не проще ли просто поменять порт ssh сервера ?
В принципе можно, многие боты же тупые, не будут смотреть на каком порту висит ssh.
Замена порта однозначно рулит, как + к этому разрешение ssh по этому порту только с определенных IP внутреннюю сеть можно оставить всем, (кто знает от куда придется) а вот внешнюю однозначно резать.
ИМХО ставить ради этого что-то себе дороже, а вдруг в пьяном бреду забыл логин и пароль от сервера который за 300 км =) и все командировка обеспечена, все это проходили знаем
Что касается смены IP адреса разрешенного на коннект, в экстренных можно секретарше в асе объяснить что нужно качнуть, что прописать и какую строку влить в фаер, что бы потом можно было удаленно зайти и сделать все как надо =) Если уж совсем влом ехать далеко.
Пробовал.. почемуто не работает.
Freebsd 7.2
Python выше 2.1
всё стартует, но не работает... письма не шлёт, хотя мыло и сервер прописаны. Порты на ipfs открыты нужныет.
Может у вас почта не ходит? А в файле /etc/hosts.deniedssh есть что-нить?
Права на файл выставлены так, чтобы в них можно было писать?
в файл /etc/hosts.deniedssh хосты появляются, но отбрасывает не правильно вписавшего пароль уже после первой попытки подбора. Хотя в конфиге написано чтоб после 5-ой попытки подбора. Причём даже попавшие в hosts.deniedssh при верно вписаном логине и пароле всё равно входят на срвер через ssh. Кстати freebsd 7.1 ... описался, пардон. А почта у меня через ssmtp отапраляется. Другие письма то получаю.
Хм, ссорь, не знаю в чем проблема :/
Просто когда я пришел на место другого админа, то на серверах в логах постоянно лились записи от ssh ботов. Поменял порты и все .. Тишина =)
=)
Наверно было бы лучше разрешить ssh доступ для подсети преднозначеной под VPN или OpenVPN туннелирование.
Ну предположим поднять простенький VPN сервис, а имено mpd5. Можно VPN использовать посредством стандартных утилит Windows.
Поднимаем VPN тунель до срервера , автоматом получаем IP из выделенной подсети на mpd5 . Ну предположим выделенна подсеть 10.36.188.192/26 и мы получили 10.36.188.193
Соответственно в sshd_config прописываем .
AllowUsers @10.36.188.
Все без поднятого VPN на ssh не попасть.
Ну данную фичу я конечно всеравно прикручу , пусть будет . Бывают моменты открываю SSH для всех IP. Порой не знаешь , где ты окажешься и где надо залогиниться.
Да, так тоже вариант, но имхо первое это сменить порт, второе это соединяться по сертификату. Думаю после таких мероприятий уже нет необходимости в туннеле.
вот ты же эдво умный парень, а херней балуешься :)
1 раз сделай: http://www.google.ru/search?hl=ru&newwindow=1&q=How+to+Use+RSA+Key+for+SSH+Authentication&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&aq=f&aqi=&aql=&oq=&gs_rfai=
и боты будут сосать не вставая :)
Да это понятно, вроде уже обсудили это :)
в конце поста уже лет что стоит)Купил новый VDS и сразу куча ботов начали пароль подбирать, я сменил порт и все прекратилось. Ну а если опять начнется, то можно запретить вход для рута и пользоваться su или разрешить вход для рута только со своего IP;)
Да, это правильно :)
FreeBSD 7.3, все поставил из портов
взлетело с первого раза по этой инструкции.
Спасибо!
Оставьте свой комментарий