我有这个 iptables 并且正在运行。
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 0:20 -j REDIRECT --to-port 8080 #bypass SSH
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23:442 -j REDIRECT --to-port 8080 #bypass SSL
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 444:2082 -j REDIRECT --to-port 8080 #Cpanel SSL
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2084:2086 -j REDIRECT --to-port 8080 #WHM SSL
有没有想法可以用更简单的规则将其改为以下条件:
将所有流量重定向至8080
如果目标端口匹配则排除重定向22,443,2083和2087
谢谢。
更新:
多端口支持最多 15 个独立端口参考:Iptables包过滤笔记
因此,我使用另一种方法直接接受定义的端口,例如 whois(port43)
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport \
--dports 43 \
-j ACCEPT
答案1
有人可能会争辩说,这可能有助于简化规则,但它不会像预期的那样起作用。
iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports ! 22,443,2083,2087 -j REDIRECT --to-port 8080
条件“-option a,b”等同于“-option a OR -option b”,这恰好是从单个规则生成的 4 条规则。但是,如果将“!-option a,b”解释为“NOT (-option a OR -option b)”,则实际上是“(NOT -option a) AND (NOT -option b)”,这根本无法分解为两个规则。