iptables “主机/网络未找到”带有感叹号的 IP 地址

iptables “主机/网络未找到”带有感叹号的 IP 地址

我正在尝试添加一条iptables规则,以便丢弃除来自特定 IP 的数据包之外的所有传入数据包。按照手册,我尝试运行此操作:

    > iptables -t filter -I INPUT -s !12.34.56.78 -p tcp -j DROP

但我收到此错误:

    iptables v1.4.12.1: host/network `!12.34.56.78' not found

手册页说的是-s / --src / --source参数... A "!" argument before the address specification inverts the sense of the address. ...

我遇到的第一个问题是,这个感叹号被 shell 扩展为来自历史记录的命令。我set +H应用了解决方案,现在看来这不再是问题了。

为什么手册上说感叹号不被接受来指定反向地址?

附言:当然,我曾尝试在 和 IP 之间使用空格!,但是不被接受。

编辑
在接受答案之前,也许有人也可以帮忙回答:为什么参数的顺序应该是! -s {IP}而不是-s !{IP}手册上说的?只是较新版本的iptables更改了此语法,同时保留了旧手册页?还是可以以某种方式配置?

答案1

!和 IP 地址之间需要一个空格

 iptables -t filter -I INPUT -s ! 12.34.56.78 -p tcp -j DROP

Using intrapositioned negation (如果你收到类似--option ! this ) is deprecated in favor of extrapositioned (! --option this 的消息).

然后将 ! 放在“-s”选项之前,如下所示 -

 iptables -t filter -I INPUT ! -s 12.34.56.78 -p tcp -j DROP

答案2

您是否尝试过从您的 shell 中退出 !?

iptables -A INPUT \! -s 12.34.56.78 -p tcp -j DROP

编辑:抱歉,我看你已经考虑到了转义 ! 的问题,所以你的顺序错了。我上面粘贴的命令在我的计算机上运行良好,应该对你有用。

相关内容