Защита SSH от перебора пароля с помощью blocksshd и iptables

Существуют такие ситуации, когда сервис SSH должен быть открыт для всего интернета, а не только для определённых адресов. Однако в этом случае большинство системных администраторов сталкивается с проблемой перебора паролей. Так называемой брутфорс-атакой. Это явление не столько опасное (хотя конечно же недооценивать опасность не стоит), сколько просто неприятное. Однако решение у этой проблемы есть, и даже не одно.

Существует множество различных скриптов, принцип работы которых одинаков: анализируется лог авторизации, и закрывается доступ к серверу с IP-адресов, с которых было несколько неудачных попыток авторизации в течении короткого времени. В этой статье будет описан один из них - blocksshd, который представляет собой демона, написанного на perl, и имеющего достаточно гибкую конфигурацию. Всё написанное справедливо для дистрибутива Gentoo Linux. Для других дистрибутивов инструкции могут немного отличаться.

Итак. Само собой для начала нужно установить blocksshd:

emerge layman  layman --add sunrise  emerge blocksshd  

Далее копируем пример файла конфигурации как /etc/blocksshd/blocksshd.conf и открываем в редакторе:

cp /etc/blocksshd/blocksshd.conf.sample /etc/blocksshd/blocksshd.conf  
nano -w /etc/blocksshd/blocksshd.conf  

Интересных параметров тут достаточно много. Например по умолчанию логом авторизации считается файл /var/log/messages. Если же вы настроили syslog так, чтобы логи авторизации складывались в другой файл, например /var/log/auth.log, то вам нужно соответствующим образом подправить эту строку:

logfile         => '/var/log/auth.log',  

Далее нам нужно ограничить максимальное количество неудачных попыток авторизации. По умолчанию оно равно четырём. Лучше уменьшить до трёх или даже до двух:

max_attempts    => '2',  

Далее разрешим "разбанивать" заблокированные адреса по истечении unblock_timeout:

unblock         => '1',  

Кроме того есть интересная пара параметров: send_email и email. Если первый установлен в 1, то отправляется письмо на адрес, указанный во втором. Мой мобильный оператор предоставляет услугу отправки SMS через e-mail. Т.е. если отправить e-mail на адрес: <мой_номер_телефона>@<мой_оператор.ru>, то мне приходит SMS. Именно этим я и воспользовался, но поскольку по умолчанию в письмо добавляется так же вывод whois для блокируемого IP-адреса, который имеет достаточно большой размер и потому не всегда помещается в одну SMS, то можно отключить отправку whois на e-mail:

    email_whois_lookup => '0',  

Можно так же не отключать whois, но вместо него использовать какую-то другую программу. Например иногда достаточно получить вывод команды nslookup. Это делается так:

    email_whois_lookup => '1',      whois           => '/usr/bin/nslookup',  

Кроме того вы можете изменить имя цепочки правил iptables, которую использует blocksshd:

    chain           => 'blocksshd',  

Закончив конфигурирование запускаем демон:

rc-update add default  /etc/init.d/blocksshd start  

Но это ещё не всё. Далее нужно настроить iptables. Сейчас мы будем исходить из того, что у вас разрешения строятся по принципу "ничего кроме...". Если у вас не так - мне вас жаль.

Итак. В вашем скрипте установки правил iptables должна быть примерно такая строка:

iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT  

Перед этой строкой нужно добавить ещё несколько строк. Должно получится примерно вот так:

# Удаляем цепочку 
blocksshd  iptables -X blocksshd    
# Инициализируем пустую цепочку 
blocksshd  iptables -N blocksshd    
# Проверяем не входит ли IP в цепочку 
blocksshd  iptables -I INPUT -m tcp -p tcp --dport 22 -j blocksshd    
# Разрешаем SSH для всех (исходная строка)  
iptables -A INPUT -m tcp -p tcp --dport 22 -j ACCEPT  

Далее применяем новые правила iptables и сохраняем их:

/etc/init.d/iptables save  

Всё. Теперь брутфорс-атаки вам не так страшны, как ещё полчаса назад:)

Очень надеюсь что вам пригодится эта статья, но не обещаю что всё будет именно так, как тут написано:)

Источник

free-templates.ru