Linux下利用geoip禁止国外访问

以下以debain系操作系统为例:

首先是安装必要的库:

apt install xtables-addons-common libtext-csv-xs-perl iptables-dev unzip

然后创建一个路径用于存放geoip的IP区域数据

mkdir /usr/share/xt_geoip

请使用以上路径,因为iptables将从那里取得IP数据。这个位置能不能改变我不清楚,没有研究。

libtext-csv-xs-perl是一个很老的工具,安装后在/usr/lib/xtables-addons下创建两个工具程序:

xt_geoip_dl和xt_geoip_build

xt_geoip_dl是用来获得geoip国家级IP分区库的,但这个工具已经效失了,所以它没用了。因为geoip的官方不再公开提供这个数据库而是需要注册才能获得,虽然仍在可以免费获得,但需要注册就让这个过程变得明显麻烦了许多。想获得这个IP库请去geoip官网注册。注册免费,数据库则分为收费免费两种。自行下载后需要这个文件:GeoLite2-Country-CSV_YYYYMMDD.zip

将 GeoLite2-Country-CSV_YYYYMMDD.zip 解压,进入zip文件解压后释放的目录,然后执行/usr/lib/xtables-addons/xt_geoip_build GeoIPCountryWhois.csv

正常显示如下:

xt_geoip_build有可能因为缺少perl模块而无法执行。如果遇到下图的错误:

可以执行如下命令:

perl -MCPAN -e shell

遇到提示就回车。直到出现提示符:

执行install Net::CIDR::Lite

执行过程需要等数分钟到数十分钟。

通过quit退出shell

数据文件生成好之后就可以使用了。

然后执行如下命令:

mv *.iv* /usr/share/xt_geoip

我在两个路径放都放了数据,我也没测试一下iptables到底会访问哪个目录,所以推荐执行如下操作:

ln -s /usr/share/xt_geoip /usr/lib/xtables-addons/xt_geoip

使用方式:

允许192.168.0.0段的访问。
iptables -I INPUT -s 192.168.0.0/24 -p tcp -j ACCEPT
允许国内IP的访问,这里是重点:)
iptables -A INPUT -p tcp -m tcp -m geoip –src-cc CN -m state –state NEW,RELATED,ESTABLISHED -j ACCEPT
允许服务器对外访问
iptables -A INPUT -m state –state established,related -j ACCEPT
禁止一切网络访问,这里也是重点,此条内容必须放在后面。
iptables -A INPUT -m state –state new,invalid -j DROP

感谢看到最后的朋友 ,发个福利吧。那个生成起来很麻烦的数据库,我做好了,大家可以下载:

关于xmsg

技术面前人人平等.同时技术也不分高低贵贱.正所谓学无大小,达者为尊.
此条目发表在Skill, 隐私安全分类目录,贴了标签。将固定链接加入收藏夹。