Ubuntu IPTables 仅允许 1 个国家/地区

Ubuntu IPTables 仅允许 1 个国家/地区

因此,我一直在网上寻找一个脚本,它可以丢弃除 http(80) 和 https(443) 端口之外的所有端口的所有流量,然后只允许来自国家 x(在我的情况下,国家 x 是美国)的所有其他端口的流量。

我不想添加来自每个国家的所有 IP,我只想允许来自我所在国家的 IP,然后阻止几乎所有来自外界的其他流量。除了我自己,我所在国家以外的任何人都不能访问 ssh、ftp、smtp 等。如果这种情况发生变化,我将在情况发生时为其添加一个特殊案例。

边注

我必须指出,我确实找到了一个问题,其中包含一个脚本使用 IP 表按国家/地区禁止 IP但我需要插入很多额外的内容。

标记为最佳答案的脚本将阻止来自这些 IP 的所有流量。我只想阻止对除 80 和 443 之外的所有端口的访问。

更新

根据以下规则,

iptables -A OUTPUT -m geoip --dst-cc CN -j DROP

我可以修改它并做类似的事情吗

iptables -A OUTPUT -m geoip --dst-cc CN --dport 80 -j ACCEPT
iptables -A OUTPUT -m geoip --dst-cc CN --dport 443 -j ACCEPT
iptables -A OUTPUT -m geoip --dst-cc CN -j DROP

我认为这将允许来自中国的 IP 访问端口 80 和端口 443,并会丢弃其余端口。这个假设正确吗?如果不正确,原因何在?

更新 2

经过一番折腾,我发现我的 Ubuntu 版本不喜欢这个--dport属性。因此,那些运行 Ubuntu 14+ 的人(至少,我只在一些机器上安装了 Ubuntu 14.04、14.10 和 15.04)将不得不使用-p PORT_NUMBER_OR_NAME

所以看起来就像

iptables -A OUTPUT -m geoip --dst-cc CN -p 443 -j ACCEPT

对于传入流量,

iptables -A INPUT -m geoip --src-cc CN -p 443 -j ACCEPT

答案1

您需要添加 iptables 对地理位置的支持。为此,您必须遵循以下步骤:

# apt-get install xtables-addons-common
# mkdir /usr/share/xt_geoip
# apt-get install libtext-csv-xs-perl unzip
# /usr/lib/xtables-addons/xt_geoip_dl
# /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

这将允许您执行如下操作:

iptables -A OUTPUT -m geoip --dst-cc CN -j DROP

这将阻止任何流向中国 (CN) 的传出流量。规则的复杂性由您决定,基本上您不需要脚本,只需写下要应用的规则,然后使用它们,iptables-save这样每次重新启动时都会加载它们。

答案2

如果有人遇到这种情况,并且它不适用于 Ubuntu 22.04.4 LTS(Jammy)。对我来说,我必须使用我在这里找到的更新的预打包位置:https://inai.de/projects/xtables-addons/geoip.php

因此,对我来说,步骤如下:

您需要添加 iptables 对地理位置的支持。为此,您必须遵循以下步骤:

# sudo apt install xtables-addons-common
# sudo mkdir /usr/share/xt_geoip
# sudo apt install libtext-csv-xs-perl unzip
# ./usr/libexec/xtables-addons/xt_geoip_dl
# ./usr/libexec/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

这将允许您执行如下操作:

sudo iptables -A OUTPUT -m geoip --dst-cc CN -j DROP

和:

sudo iptables -A INPUT -m geoip --dst-cc CN -j DROP

相关内容