Ubuntu IPTables 只允许 1 个国家

Aus*_*gel 9 networking firewall ssh http iptables

因此,我一直在网上寻找一个脚本,该脚本将删除除 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
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

我认为这将允许来自中国的 ips 访问端口 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
Run Code Online (Sandbox Code Playgroud)

或者对于传入的流量,

iptables -A INPUT -m geoip --src-cc CN -p 443 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

nKn*_*nKn 7

您需要为地理定位添加 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
Run Code Online (Sandbox Code Playgroud)

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

iptables -A OUTPUT -m geoip --dst-cc CN -j DROP
Run Code Online (Sandbox Code Playgroud)

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