Ubuntu 22.04执行iptables命令时遭遇--tcp-flags选项未知错误的求助
Ubuntu 22.04执行iptables命令时遭遇--tcp-flags选项未知错误的求助
问题描述
我在尝试添加这条iptables规则时遇到了报错:
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1300
错误信息如下:
iptables v1.8.7 (nf_tables): unknown option "--tcp-flags" Try `iptables -h' or 'iptables --help' for more information.
我的系统环境:
- 操作系统:Ubuntu 22.04.2 LTS
- 内核版本:Linux 5.19.0-35-generic
- 硬件架构:x86-64
有没有朋友能帮忙看看怎么解决这个问题?
解决方案
这个问题我之前在Ubuntu 22.04上遇到过,根源在于系统默认的iptables是基于nf_tables的兼容版本(iptables-nft),而你写的命令是针对传统的iptables-legacy(基于netfilter的原始实现)的,两者在语法细节上有差异。
这里给你两种可行的解决思路:
方法1:切换到传统iptables(快速解决)
直接使用iptables-legacy命令替代默认的iptables,执行这条修改后的命令即可:
iptables-legacy -A INPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1300
如果想长期把iptables-legacy设为默认,可以通过update-alternatives工具切换:
# 切换IPv4的iptables默认版本 update-alternatives --set iptables /usr/sbin/iptables-legacy # 切换IPv6的ip6tables默认版本(可选) update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy
方法2:适配nf_tables版本的语法
如果你想继续使用默认的nf_tables版iptables,需要调整命令,显式指定tcp匹配模块(-m tcp或--match tcp),修改后的命令如下:
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1300
原因是在nf_tables的兼容层中,像--tcp-flags这类tcp专属的匹配选项,必须先通过-m tcp声明要使用tcp匹配模块,才能被正确识别。
你可以先试试方法1,不需要修改原命令就能快速解决问题,适合不想折腾语法的情况~
备注:内容来源于stack exchange,提问作者namaiiee
相关产品推荐
相关产品推荐

