我想允许端口x上的连接在端口y上具有“已build立”状态的IP地址。
这是可以通过使用iptables吗?
也许你可以使用端口敲门? 打开端口,当build立TCP连接,可能是: http : //en.wikipedia.org/wiki/Port_knocking
答案是“种”。 您将需要安装ipset软件包,并确保您的内核具有ipset支持。
你首先必须创build一个超时的“IP集”:
ipset create MySet hash:ip timeout 60
然后添加一个规则,将重置每个build立的数据包的超时
iptables -A INPUT -p tcp --dport $port1 -m state --state ESTABLISHED -j SET --add-set MySet src
最后,添加一组规则,只有在源已被logging的情况下才允许访问第二个端口,并放弃其他端口
iptables -A INPUT -p tcp --dport $port2 -j Port2_Test iptables -A Port2_Test -m state --state ESTABLISHED -j ACCEPT iptables -A Port2_Test -m state --state NEW -m set --match-set MySet src -j ACCEPT iptables -A Port2_Test -p tcp -j REJECT
编辑
我刚刚意识到,也可以使用recent匹配扩展。 你这样做:
-A INPUT -p tcp --dport $portY -m state --state ESTABLISHED -m recent --name YThenX --set -j ACCEPT ... -A INPUT -p tcp --dport $portX -j Port2_Test ... -A Port2_Test -m state --state ESTABLISHED -j ACCEPT -A Port2_Test -m state --state NEW -m recent --name YThenX --rcheck --seconds $timeout --reap $timeout -j ACCEPT -A Port2_Test -p tcp -j REJECT