我只想允许来自一个国家/地区的流量。
我在网上看到和阅读过多种方法,但大多数都已经过时了(使用 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 。请检查网络文档和建议 - 访问服务器上的控制台是一个好主意,以防万一您将自己锁在外面呵呵。