我正在尝试添加一条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
编辑:抱歉,我看你已经考虑到了转义 ! 的问题,所以你的顺序错了。我上面粘贴的命令在我的计算机上运行良好,应该对你有用。