В данном посте я расскажу как просто защитить ssh сервер от брутфорса. Данный пост использует правило для iptables с использованием механизма port knocking.
Технология port knocking позволяет выполнять любые действия на сервере, даже если все порты на нем закрыты. В общем случае, Вам достаточно соедениться с определенными портами, в определенной последовательности, которую знаете только Вы и на сервере выполнятся определенные действия, в последствии которых, нужный порт откроется.
Приступим к практике:
В данном примере я использую дистрибутив Debian и ip 192.168.11.1.
Создадим скрипт с правилом и дадим права на запуск:
# Создаем цепочку правил sshprotect
iptables -N sshprotect
# Если адрес в списке, то подключение разрешено
iptables -A sshprotect -m state --state NEW -m recent --rcheck --name SSH -j ACCEPT
# Разрешить пакеты для уже установленных соединений
iptables -A sshprotect -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A sshprotect -j DROP
# Заносит адрес в список
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1500 -m recent --name SSH --set -j DROP
# Удаляет адрес из списка
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1499 -m recent --name SSH --remove -j DROP
# Применение для трафика ssh цепочку sshprotect
iptables -A INPUT -p tcp --dport 22 -j sshprotect
Запустим скрипт с правилом:
andreika:~# cd /etc/ && ./portknock.sh
Что бы добавить правило в автозагрузку, можно поместить скрипт, например в rc.local.
Теперь, чтобы получить доступ к серверу по ssh, нужно постучать на порт 1500, сделать это можно как и по telnet так и простым http запросом. Например:
Telnet:
telnet 192.168.11.1 1500
HTTP:
http://192.168.11.1:1500
Соответственно, чтобы закрыть порт, нужно постучать на порт 1499.
Вот таким способом можно избавиться от толпы желающих получить доступ к вашему серверу.