nftables - блокировка порта IPv6 - прием всей подсети
Хочу добавить стук порта на уже работающий сервер. Мой клиент отправляет волшебную последовательность пакетов, и сервер добавит ее в набор разрешенных клиентов nftables на определенное время. Поэтому клиентам разрешено пользоваться некоторыми услугами. Подробнее см. Мою конфигурацию ниже.
Теперь я хочу, чтобы порт отключался от моего роутера автоматически. Для IPv4 это работает, но для IPv6 это не работает, потому что NAT не задействован, поэтому каждый клиент имеет уникальный адрес. Вот почему я хотел бы добавить всю подсеть (/56) стучащего клиента в набор разрешенных клиентов.
Возможно ли это с помощью nftables? Я читал про "интервал флагов", но не понимаю, как динамически добавлять к нему подсеть клиентов.
chain input {
...
jump port_knocking
...
}
set knock_v6_1 {
type ipv6_addr
flags timeout
}
set knock_v6_2 {
type ipv6_addr
flags timeout
}
set knock_v6_success {
type ipv6_addr
flags timeout
}
chain port_knocking {
ip6 nexthdr icmpv6 ip6 length 100 set update ip6 saddr @knock_v6_1
ip6 saddr @knock_v6_1 ip6 nexthdr icmpv6 ip6 length 101 set update ip6 saddr timeout 10s @knock_v6_2
ip6 saddr @knock_v6_2 ip6 nexthdr icmpv6 ip6 length 102 set update ip6 saddr timeout 10s @knock_v6_success
}
1 ответ
После успешного стука порта не добавляйте исходный IP-адрес клиента, а замаскируйте его, используя port_knock_netmask_v6
. При проверке, исходит ли новое соединение от клиента после успешного стука, также замаскируйте его, используяport_knock_netmask_v6
.
define port_knock_netmask_v6 = ffff:ffff:ffff:ff::
table inet filter {
chain input {
...
jump port_knocking
tcp dport 22 ip6 saddr & $port_knock_netmask_v6 @knock_v6_success accept
...
}
set knock_v6_1 {
type ipv6_addr
flags timeout
}
set knock_v6_2 {
type ipv6_addr
flags timeout
}
set knock_v6_success {
type ipv6_addr
flags timeout
}
chain port_knocking {
ip6 nexthdr icmpv6 ip6 length 100 set update ip6 saddr timeout 10s @knock_v6_1
ip6 saddr @knock_v6_1 ip6 nexthdr icmpv6 ip6 length 101 set update ip6 saddr timeout 10s @knock_v6_2
ip6 saddr @knock_v6_2 ip6 nexthdr icmpv6 ip6 length 102 set update ip6 saddr & $port_knock_netmask_v6 timeout 1h @knock_v6_success
}
}