-2

我想将端口敲门添加到已经在工作的服务器上。我的客户端发送数据包的神奇序列,服务器将在特定时间将其添加到一组允许的客户端的 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
}
4

1 回答 1

0

成功敲击端口后,不要添加客户端的源 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
    }

}
于 2020-04-27T19:51:17.957 回答