iptables 只允许来自一个国家的流量

iptables 只允许来自一个国家的流量

我只想允许来自一个国家/地区的流量。

我在网上看到和阅读过多种方法,但大多数都已经过时了(使用 Xtables-addons),另一半则展示了如何将不喜欢的 IP 列入黑名单。

但这是一种错误的做法,将所有内容都一一列入黑名单。更好的方法是创建一个白名单,这样白名单之外的所有内容都将被阻止。

我在法国;我只想允许法国客户端/用户访问服务器。

我现有的 iptables 规则是

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination xx.xx.xx.xx:80

只是转发流量。

答案1

我并不是说这是最好的选择,但如果您找不到另一个可行的选择,那么您可以使用可下载的 GeoIP 数据库和IP集工具。

例如下载Geolite2数据库CSV 格式的国家/地区。下载并解压文件:

wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip
unzip GeoLite2-Country-CSV.zip
cd GeoLite2-Country-CSV_20190430

查找法国的 id 并过滤法国网络的所有记录:

grep France GeoLite2-Country-Locations-en.csv
3017382,en,EU,Europe,FR,France,1

awk -F, '$2 == 3017382 {print $1}' > french_networks.txt

构建一个包含法国网络的 ipset,名为france

ipset create france hash:net
while read network ; do 
    ipset add france $network; 
done < french_networks.txt

使用 ipset 创建一条iptables规则,删除任何非法国的内容。请注意,您可能需要添加额外的规则以确保本地网络不会被丢弃:

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

答案2

您可以使用以下页面轻松获取 iptables 的法国 IP。

https://www.ip2location.com/free/visitor-blocker

在该页面中,选择“法国”,然后选择“Linux iptables Accept”作为输出格式。

答案3

您可以尝试 csf - 它很容易安装,并且在 csfpost.sh 中您可以设置 iptables 规则。在 csf.conf 中,您可以在其中设置 FR 的 CC_ALLOW_FILTER 。请检查网络文档和建议 - 访问服务器上的控制台是一个好主意,以防万一您将自己锁在外面呵呵。

相关内容