解决方案:

解决方案:

我正在尝试阻止除美国和加拿大以外的所有流量。我将所有美国和加拿大 IP 添加到 ipset geoblock,当我尝试此命令时。我收到错误。

iptables -A INPUT -m set --set !geoblock src -j DROP
-bash: !geoblock: event not found

但是当我运行这个命令时

ipset list

我获取了所有 IP,因此名称和 ipset 没有任何问题。我在 cent os 7.3.1611 上使用 iptables v1.4.21

答案1

解决方案:

以下是正确的命令行:

iptables -A INPUT -m set ! --match-set geoblock src -j DROP

解释:

javier@equipo-javier:~$ sudo ipset create geoblock hash:net
javier@equipo-javier:~$ sudo iptables -A INPUT -m set --set '!geoblock' src -j DROP
--set option deprecated, please use --match-set
iptables v1.4.21: Set !geoblock doesn't exist.

Try `iptables -h' or 'iptables --help' for more information.

第一次修正:

javier@equipo-javier:~$ sudo iptables -A INPUT -m set --match-set '!geoblock' src -j DROP
iptables v1.4.21: Set !geoblock doesn't exist.

Try `iptables -h' or 'iptables --help' for more information.

第二次修正:

javier@equipo-javier:~$ sudo iptables -A INPUT -m set ! --match-set geoblock src -j DROP
javier@equipo-javier:~$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m set ! --match-set geoblock src -j DROP

现在有效

答案2

正如 Zoredache 提到的,bash错误表明这是一个引用问题。将该参数放在单引号中或使用反斜杠转义感叹号将解决当前的问题:

iptables -A INPUT -m set --set '!geoblock' src -j DROP

或者

iptables -A INPUT -m set --set \!geoblock src -j DROP

相关内容