Инструменты пользователя

Инструменты сайта


сисадмин:port_cknocking_средствами_iptables

Это старая версия документа!


Открытие порта «по стуку»

Вариант office

Стучимся ICMP пакетом длиной 953 байт для открытия всех портов на 10 секунд.
Поставить до правила приёма icmp пакетов

iptables -A INPUT -i ppp0 -m recent --rcheck --seconds 10  --name knock -j ACCEPT
iptables -A INPUT -i ppp0 -p icmp -m length --length 981 -m recent --set --name knock

Вариант

Самое простое — открывать порт ssh (22) после стука в заданный высокий порт:

iptables -N ssh_knock # Создаем цепочку для проверки попыток соединений на защищаемый порт
# Если за последние 60 секунд было 2 и более стука — блокируем, на всякий случай
iptables -A ssh_knock -m recent --rcheck --seconds 60 --hitcount 2 -j RETURN
# Если за последние 10 секунд стук в нужный порт был — разрешить соединение
iptables -A ssh_knock -m recent --rcheck --seconds 10 -j ACCEPT
iptables -F INPUT # Очищаем цепочку INPUT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # Разрешаем пакеты по установленным соединениям
# Все попытки открыть новое соединение по SSH направляем на проверку
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ssh_knock
# Здесь мы добавляем правило для регистрации стука
iptables -A INPUT -m state --state NEW -p tcp --dport 27520 -m recent --set
# Опять же на всякий случай — при стуке в соседние порты закрываем SSH
iptables -A INPUT -m state --state NEW -p tcp -m multiport --dport 27519,27521 -m recent --remove
iptables -P INPUT DROP # Что не разрешено — то запрещено

Даже в таком простом примере присутствуют жесткие меры защиты: защищаемый порт (22) открывается на 10 секунд после стука в заданный порт (27520), при этом более одного стука в этот порт в течение минуты считается ошибкой. Также стук в соседние с заданным порты сразу закрывает защищаемый порт. Это делается в целях защиты от подбора стука.

сисадмин/port_cknocking_средствами_iptables.1670312952.txt.gz · Последнее изменение: 2022.12.06 07:49 — feser