RULE_APPEND 失败(iptables)

RULE_APPEND 失败(iptables)

我正在做一项作业,需要在 Debian 路由器上创建一些自定义防火墙规则。我使用 iptables 创建规则。问题是,每当我尝试添加此规则时:iptables -A FORWARD -m state --state NEW,ESTABLISHED -m tcp --destination-port 20:443 -s 192.168.2.107 -j ACCEPT我都会收到此错误:RULE_APPEND failed (Invalid argument): rule in chain FORWARD,我已经尝试解决这个问题大约 5 个小时了,但无法解决,有人能帮我找出问题所在吗?谢谢!

答案1

原因是iptables匹配模块传输控制协议预计将被要求TCP 协议case only,选择该-p tcp选项,但结果不是这样。这种错误很少发生,因为通常只-p tcp写入,它会自动加载-m tcp匹配模块。

我们可以从内核的这一行看出这一点dmesg

 x_tables: ip_tables: tcp match: only valid for protocol 6

其中协议 6 表示传输控制协议(如 中所示/etc/protocols)。此消息触发iptables-nft(您正在使用的)和iptables-旧版因为即使 nft 版本也使用内核 xtables 模块 ( xt_tcpudp.ko)。旧版本的错误消息如果加上以下代码会更有帮助:

iptables: Invalid argument. Run `dmesg' for more information.

因此,要修复你的规则,那将是:

iptables -A FORWARD -m state --state NEW,ESTABLISHED -p tcp -m tcp --destination-port 20:443 -s 192.168.2.107 -j ACCEPT

实际上-m tcp是可选的(并且 obsolete 也-m state --state可以用 superseding 代替-m conntrack --ctstate)。

相关内容