Доброго дня господа!
Имеется Debian GNU/Linux 12. В котором я пытаюсь настроить своего рода port knoking.
Суть идеи мы ловим icmp пакеты, когда пакет равен заданному размеру мы перемещаем его в нужный сет, когда адрес пройдёт по всем сетам, мы разрешаем ему работать с заданным сервисом.
Суть проблемы - правила срабатывают периодически(те они чаще не работают чем работают).
Что пробовал - выделять в отдельную цепочку, использовать в инпуте, логировал пакеты, выставлял счётчики,для теста во втрором шаге вообще убирал размер не помогло, делал захват пакетов.
Размер пакетов проверял при помощи - tcpdump -n -i enp2s0 -vv icmp
Вот текущая реализация для ssh:
table inet filter {
set ssh_step1 {
type ipv4_addr
timeout 5m
}
set ssh_allow {
type ipv4_addr
timeout 8h
gc-interval 30s
}
chain input {
type filter hook input priority filter; policy drop; # Drop packets
# Allow established and related packets
ct state invalid counter drop comment "early drop of invalid packets"
ct state established,related accept
# Loopback
iif != lo ip daddr 127.0.0.1/8 counter drop comment "drop connections to loopback not coming from loopback"
iifname lo accept
#SSH knoking
iifname "enp2s0" icmp type echo-request jump input_knock
# ICMP
iifname "enp2s0" icmp type echo-request limit rate 15/second accept # Ping policy
# Allow ssh
iifname "enp2s0" ip saddr @ssh_allow tcp dport 22 ct state new accept
}
chain output {
type filter hook output priority filter;
}
chain input_knock {
ip saddr @ssh_step1 meta length 328 add @ssh_allow { ip saddr } counter
meta length 428 add @ssh_step1 { ip saddr } counter
}
}
Может кто-то подсказать, в чем может крыться проблема?