Защита 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

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

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

Ключевые слова: blocksshd, ssh, iptables.

Комментарии:

d_xaos 2007-12-19 15:40:48 (#)

MooSE, ты не сравнивал его с утилитой fail2ban? Насколько оно хуже/лучше???

MooSE 2007-12-19 16:43:21 (#)

не добрался до fail2ban. думаю что тоже самое:)

Shlomo 2007-12-20 10:02:08 (#)

> не добрался до fail2ban. думаю что тоже самое:)
Ты не прав. Во-первых, fail2ban помечен как стабильный. Во-вторых он гибко настраивается и может защищать сразу кучу сервисов. У меня он защищает vsftpd и ssh, но просто остальное пока закрыто. Буду прикручивать так же imap и apache авторизацию.
+ правила в iptables он добавляет сам при запуске

MooSE 2007-12-20 11:33:17 (#)

Ну я в практике использую sshblackv28
http://www.pettingers.org/code/sshblack.html
Перловский скрипт, в котором можно указывать файлы логов и в добавок строки, по которым идёт поиск и присваивается статус атаки.
Что касается freebsd - то тут использую на Питоне написанный софт DenyHosts
http://denyhosts.sourceforge.net/
Из особенностей можно выделить - использование hosts.allow, hosts.deny, плюс возможность защищать не только ssh, ну и что понравилось - имеет встроенную возможность синхронизации с удалённым сервером, где хранится чёрный список. Работает и под Линуксом, просто не ставил из-за установки в нагрузку Питона.
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE