如何通过 GeoLite2 mmdb 阻止国家/地区(iptables 或firewalld)

如何通过 GeoLite2 mmdb 阻止国家/地区(iptables 或firewalld)

如何在我的防火墙中使用 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

iptablesgeoip模块,Linux 默认情况下不包含该模块。您可以安装xtables插件:

apt-get install xtables-addons-common xtables-addons-dkms

  1. 获取 MaxMinds geoip 数据库(请注意,如果使用免费数据库,这些数据库可能会过时)

wget -O geolite2-csv.zip https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country-CSV.zip ; unzip geolite2-csv.zip

  1. 下载 gcsv2bin 它将csv数据库转换为二进制文件,可用于查找。
wget -O - http://people.netfilter.org/acidfu/geoip/tools/gcsv2bin.tar.gz | tar xzf - 
make
  1. 转换实际数据库:

./gcsv2bin path_to_IPv4.csv

  1. 加载xt_geoip模块:

sudo modprobe xt_geoip

  1. iptables规则:

sudo iptables -A INPUT -m geoip --src-cc DE -j DROP

其中,参数为--src-ccCountryCode。

相关内容