如何在我的防火墙中使用 GeoLite2 数据库 (mmdb) 来阻止除德国以外的所有国家/地区?
答案1
您可以从以下位置获取德国 IP 地址成熟(欧洲注册表),并使用它们创建一个 ipset。然后就可以轻松高效地使用 iptables 中的 ipset。
RIPE 拥有 API 和网络资源,可按国家/地区获取 IP 地址。例如,要获取德国 IP,此 URL 将以 .json 格式列出它们:
https://stat.ripe.net/data/country-resource-list/data.json?v4_format=prefix&resource=de
我实际上有一个脚本(https://github.com/mivk/ip-country/blob/master/get-ripe-ips)我调用它来crontab
更新 IP 列表。并使用该列表来更新 ipset。
获得 ipset 后,如果将其命名为 ipv4_de,则 iptables 中的行将类似于
-A INPUT -m set ! --match-set ipv4_de src -j DROP
这将删除不在 ipv4_de 集中的所有 IP。
答案2
iptables
有geoip
模块,Linux 默认情况下不包含该模块。您可以安装xtables
插件:
apt-get install xtables-addons-common xtables-addons-dkms
- 获取 MaxMinds geoip 数据库(请注意,如果使用免费数据库,这些数据库可能会过时)
wget -O geolite2-csv.zip https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip ; unzip geolite2-csv.zip
- 下载 gcsv2bin 它将
csv
数据库转换为二进制文件,可用于查找。
wget -O - http://people.netfilter.org/acidfu/geoip/tools/gcsv2bin.tar.gz | tar xzf -
make
- 转换实际数据库:
./gcsv2bin path_to_IPv4.csv
- 加载
xt_geoip
模块:
sudo modprobe xt_geoip
- iptables规则:
sudo iptables -A INPUT -m geoip --src-cc DE -j DROP
其中,参数为--src-cc
CountryCode。