我想让某个 IP 访问 TCP 端口 3306 一小时。此后,必须关闭所有连接。
如何为以下表达式添加超时?
iptables -A INPUT -m state --state NEW -m tcp -p tcp --source 1.2.3.4 --dport 3306 -j ACCEPT
答案1
我相信(我从未使用过它,而是通过 iptables 手册页找到它)--timestart 和 --timestop 将实现这一点。
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -m tcp -p tcp --source 1.2.3.4 --dport 3306 --timestart 13:00 --timestop 14:00 -j ACCEPT
允许您在下午 1 点至 2 点之间。
如果数据包到达时间/日期在给定范围内,则匹配。所有选项都是可选的。
--时间开始 价值
仅当其位于“值”之后时才匹配(包括,格式:HH:MM;默认 00:00)。
- 时间停止 价值
仅当它位于“值”之前时才匹配(包括,格式:HH:MM;默认 23:59)。
答案2
不需要支持 iptables 时间模块的替代解决方案。
( iptables -I INPUT -p tcp -s 1.2.3.4 --dport 3306 -j ACCEPT ; sleep 1h; iptables -D INPUT -p tcp -s 1.2.3.4 --dport 3306 -j ACCEPT ) &
这不会在一小时后关闭连接,它只会返回到允许连接之前的任何策略;可以设置为中断和丢弃/拒绝不再允许的流量,除非您事先有 STATE ESTABLISHED ALLOW。