在 iptables 中打开一个端口并限制其时间,然后关闭它而不切断现有连接

在 iptables 中打开一个端口并限制其时间,然后关闭它而不切断现有连接

我想在有限的时间内打开 mi 防火墙中的端口,比如说 22,然后在几分钟后关闭它(这样来自其他 IP 而不是当前建立的 IP 的连接将发现端口已关闭)。到目前为止,这就是我所得到的:

a) 在 iptables 中制定永久规则,规定保持现有连接

iptables -A INPUT -p tcp --dport 22 -m state --state ESTABLISHED,RELATED -j ACCEPT

b) 在 iptables 中添加一条规则,允许来自特定 IP 的连接,并在一段时间后将其删除:

iptables -I INPUT -p tcp --dport 22 -s XXX.XXX.XXX.XXX -j ACCEPT

这应该可行吗,或者我的推理有问题?

答案1

--state ESTABLISHED是的,只要 conntrack 不会忘记相应的状态条目,所有 TCP 数据包都会被匹配。确保服务器的 conntrack 超时时间足够长(您可以在net.netfilter.nf_conntrack_tcp_timeout_establishedsysctl 中找到它们 - 默认值为 5 天,但有些系统会将其更改为非常短超时)。

(您实际上也应该接受已建立/相关的 ICMP 数据包,以让服务器接收路径 MTU 发现数据包和其他 ICMP 错误数据包等内容。)

您可以使用ipset用于匹配新的 IP 地址 - 它具有内置的超时功能。

相关内容