Защита Ssh От Перебора На Любом Порту

Сегодня меня заинтересовал опрос: нужно ли оно? переопределить SSH на нестандартный порт .

Сам опрос не так интересен, как способ автор zivot_je_cudo защитить SSH от подбора пароля: после некорректной попытки подключения блокировать новые попытки на 20 секунд. Задержка, судя по всему, была выбрана эмпирически, исходя из двух противоположных пожеланий: чтобы в случае опечатки не блокировали надолго, и в то же время усложнять жизнь сборщику.

Хочу поделиться своим методом противодействия грубой силе, которым пользуюсь уже несколько лет. У него есть два преимущества: - дает мне больше попыток ввести правильный пароль — но при этом блокирует брутфорсы «навсегда».

Как можно достичь этих двух противоположных целей? Я использую модуль iptables под названием hashlimit, который может подсчитывать количество пакетов за определенный период времени и через некоторое время сбрасывать счетчик.

Все делается по трем правилам:

iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit 1/hour --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name SSH --hashlimit-htable-expire 60000 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 22 --tcp-flags SYN,RST,ACK SYN -j DROP iptables -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT

Что делают второе и третье правила, понятно.

Самое интересное в первом: он допускает 2 попытки подключения в течение часа.

Как только вы превысите 2 попытки за указанное время, правило с -j ACCEPT перестанет работать, вместо этого пользователь попадет в следующее правило с -j DROP (также можно установить TARPIT).

После этого вы не сможете подключиться, и начинается обратный отсчет в 60 000 миллисекунд, после чего информация о вашей попытке «затухает» (параметр --hashlimit-htable-expire).

То есть на самом деле вам придется ждать не 1 час, а всего 1 минуту.

Весь фокус в том, что если не дождаться этого времени и попытаться подключиться снова, то пакет будет убит и счетчик сбросится в исходное состояние - 1 минута! Таким образом, если вы нетерпеливый брутфорсер и тупо забиваете порт после блокировки, то с каждой попыткой вы будете продлевать бан! То есть забанить себя навсегда! У добропорядочного пользователя же есть несколько попыток подключения без ожидания между ними, прежде чем попасть в «баню».

Модуль hashlimit хранит свое состояние в /proc — сначала он пуст: # cat /proc/net/ipt_hashlimit/SSH После первой попытки подключения там появляется следующая информация: # cat /proc/net/ipt_hashlimit/SSH 55 XX.XX.XX.XX:0-> 0.0.0.0:0 11533000 230400000 115000000 первое число — количество оставшихся секунд, вы можете посмотреть, как оно тикает равномерно: # cat /proc/net/ipt_hashlimit/SSH 20 XX.XX.XX.XX:0-> 0.0.0.0:0 117429000 230400000 115000000 После того, как я это сделал, мне очень захотелось это проверить.

И это необходимо! Зверь бежит к ловцу! Какой-то китаец сразу начал меня грубить.

Прошли первые 4 попытки, а потом он целый час (!) тупо ломился в закрытую дверь.

За весь этот час ему удалось проверить всего 4 пароля! Потом, видимо, мне это надоело.

Это решает две проблемы: — если пользователь вдруг допустит опечатку, ему не придется долго ждать новых попыток — брутфорсеры загоняют себя в «вечный» бан.

Что делать, если после нескольких попыток вдруг не удалось ввести пароль? Не суетитесь – подождите спокойно минуту и попробуйте еще несколько раз.

А если еще раз не получилось, то лучше пойти проспаться, в таком состоянии в консоль лучше не лезть :)) Удачи.

P.S. И да, чуть не забыл — у меня SSH на нестандартном порту :) УПД: Немного о настройке хеш-лимит .

УПД2: Как добиться того же, используя более распространенный недавний модуль: один раз , два .

УПД3: Конечно, метод подходит не только для защиты от подбора пароля по SSH, но и может быть использован для различных других сервисов, где слишком частые подключения сигнализируют о чем-то неладном.

УПД4: Ограничьте количество подключений с помощью сам SSHD .

Теги: #Системное администрирование #безопасность #брутфорс #IP #ssh #hashlimit

Вместе с данным постом часто просматривают: