Защита SSH через port knocking

Защита SSH через port knocking

Иногда, по каким-то причинам необходимо закрыть какой-то порт так, чтоб к нему все же оставался доступ с любого IP адреса. Например, регулятор требует, чтоб SSH порт был закрыт для всего мира.

На выручку приходит port knocking.

Итак, поставим knockd и настроим его так, чтоб SSH был закрыт, но открывался при попытке соединиться с последовательносью портов.

Установка knockd

sudo apt install knockd sudo vim /etc/knockd.conf Тут у нас есть уже настроенные правила, которые нам надо поправить. Меняем порты в которые мы будем стучаться, чтоб открылся наш SSH.

`[openSSH] sequence = 2233,2244,2255 command = /sbin/iptables -I INPUT -s %IP% -p tcp –dport 22 -j ACCEPT …

[closeSSH] sequence = 12322 Тут мы поменяли список портов и команде сменили -Aи-I`, что означает делать вставку правила файервола в начало списка правил, вместо того, чтоб добавлять его в конец.

Теперь нужно указать интерфейс, на котором knockd будет слушать попытки подключения. Для этого смотрим какой интерфейс мы будем использовать:

sudo ip addr sudo vim /etc/default/knockd Тут раскоментируем строку и вписываем правильное имя интерфейса:

... KNOCKD_OPTS="-i ens18"

Iptables

Дальше настраиваем файервол:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A INPUT -p tcp --dport 22 -j REJECT и делаем его активным после перезагрузки:

sudo apt install iptables-persistent При установке соглашаемся сохранить наши существующие правила файервола.

Осталось перезапустить сервис knockd и проверить как все работает.

sudo service knockd restart Подключаемся:

telnet ip 2233 telnet ip 2244 telnet ip 2255 ssh ip Вот и все. SSH порт откроется для вашего текущего IP адреса и пустит вас на сервер.

Чтоб закрыть порт нужно постучать в указанный порт: telnet ip 12322