我在路由器上运行 OpenWrt,这样我就可以运行 apache 和 emule 等应用程序。我安装了 emule,但一直显示 lowid,这表明我的端口配置错误。我通过 SSH 进入路由器并编辑 iptables 解决了这个问题。我的 INPUT 表最初看起来像这样...
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
syn_flood tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN
input_rule all -- anywhere anywhere
input all -- anywhere anywhere
如果我添加这条规则,我会得到 highid,表明我的端口配置正确......
iptables -I INPUT 2 -p tcp --dport 4662 -j ACCEPT
运行后我的输入表看起来像......
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere state INVALID
ACCEPT tcp -- anywhere anywhere tcp dpt:4662
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere
syn_flood tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN
input_rule all -- anywhere anywhere
input all -- anywhere anywhere
注意位置。如果我尝试将其设为链中的第一条或第二条规则,它会给我 highid。如果我低于该值(规则 3-6),我仍然会得到 lowid。我对 iptables 了解甚少,但我知道 INPUT 链中的规则是按顺序检查的。据我所知,我的规则在丢弃所有无效数据包之前或之后进行检查时有效。
我不明白为什么在接受所有相关或已建立的数据包后它不起作用。有人能解释一下为什么这条规则在位置 1 或 2 起作用,但在其他位置不起作用吗?
答案1
它不适用于“state RELATED,ESTABLISHED”规则,因为该规则只允许与现有连接相关的传入数据包;由于您没有打开除 4662 之外的任何端口,因此此类数据包只能来自您已打开传出连接的主机。
端口 4662 规则在正确的位置上没有问题,但如果您确实希望它在链中的任何位置工作,请将“-m state --state NEW”添加到用于创建它的 iptables 命令中;这将明确表明应在该端口上接受传入的连接请求数据包。