我有一组非常简单的 iptables 规则:
*filter
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT
-A INPUT -mstate --state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -j ACCEPT
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -ptcp -mstate --state NEW --dport 22 -j ACCEPT
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
...但我收到了一个令人困惑的错误:
iptables-restore v1.8.2 (nf_tables): The -t option (seen in line 8) cannot be used in iptables-restore.
Error occurred at line: 8
可以看出,第 8 行没有调用 -t 选项——或者其他任何行。我哪里做错了?
答案1
你有:
-mstate
-ptcp
显然,中的选项解析器iptables-restore
与用于命令行参数的 getopt() 解析器并不完全相同,并且不知道带参数的选项和不带参数的选项之间的区别。因此它将单词解释为-m -s -t -a -t -e
,就好像它完全由捆绑的无参数选项组成。