1 апреля 2009 г. DDOS Безопасность SSH FreeBSD

FreeBSD. DenyHosts защитит вас от брутфорса SSH

ssh

Примерно в начале ноября специалисты по безопасности заметили необычное поведение ботнетов. Они начали координированную работу по медленному перебору логинов и паролей к самым разным хостам. Специалисты называют это «медленным брутфорсом», потому что скорость перебора паролей крайне мала (нужно перебрать все комбинации паролей для всех возможных логинов по словарю) — этот процесс займёт несколько лет.

Но за счёт огромного числа машин, участвующих в «атаке», дело всё-таки постепенно продвигается — каждый день злоумышленники получают какой-то «улов». Запросы идут с разных IP (см. логи). Атака явно координируется из общего центра (у ботов есть общий словарь для перебора вариантов).

Ботнеты, участвующие в «медленном брутфорсе», стали умнее...

Что же, если и вы подвергаетесь перебору (а кто не подвергается ему сейчас...), то вам на помощь придет DenyHosts!

Установка

Я ставил вот так, более подробно на официальной странице.

# wget http://www.inetbase.com/scripts/ddos/install.sh
# 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, все поставил из портов
взлетело с первого раза по этой инструкции.
Спасибо!

Оставьте свой комментарий

Markdown