本文主要介绍,通过配置GeoIP模块,来使ModSecurity拦截非中国IP地址的访问。
一、前提介绍
GeoIP数据库目前有两种格式,GeoLite(.dat文件)与 GeoLite2(.mmdb文件)。ModSecurity v2需要使用.dat格式,ModSecurity v3则使用.mmdb格式。
.dat格式的GeoIP文件目前已不再更新,因此如果使用的是ModSecurity v2版本,我们则需要使用CSV文件来生成.dat格式的数据库,生成方法见本文第五节。
二、下载GeoIP数据库
点击此处可下载GeoLite2-Country.mmdb,点击此处可下载GeoLite-Country.dat,下载完成后请放置在/usr/local/geoip/目录下。
上述数据库文件,其IP数据更新日期为2020-05-26,本人将不定期根据官网数据进行更新。
或前往https://www.maxmind.com/官网下载名称为“GeoLite2 Country”的数据库,下载后将压缩包解压,将其中的GeoLite2-Country.mmdb文件放置在/usr/local/geoip/目录下。账户注册及下载方法可参加文章http://www.modsecurity.cn/practice/post/15.html。
三、配置GeoIP数据库
编辑crs-setup.conf文件,ModSecurity v3添加以下内容:
SecGeoLookupDB /usr/local/geoip/GeoLite2-Country.mmdb
ModSecurity v2添加以下内容:
SecGeoLookupDB /usr/local/geoip/GeoLite-Country.dat
四、配置规则
将以下规则,复制到REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf文件中,规则id如与自己编写的规则ID冲突,直接更改即可:
SecRule REMOTE_ADDR "@geoLookup" "chain,id:22,deny,phase:1,log,msg:'Non-China IP address'" SecRule GEO:COUNTRY_CODE "!@rx CN|HK|TW|MO"
以上规则表示,仅允许中国的IP地址进行访问,其他国家的IP地址若访问网站,则直接阻断。
之所以同时使用CN、HK、TW、MO,是因为在ISO 3166-1标准中,CN仅代表中国内地,不包含港澳台,因此在此直接将港澳台的代码添加其中,如果只希望中国内地的IP地址进行访问,复制以下规则即可:
SecRule REMOTE_ADDR "@geoLookup" "chain,id:22,deny,phase:1,log,msg:'Non-CN IP address'" SecRule GEO:COUNTRY_CODE "!@rx CN"
注意,如果使用了前端代理模式,并且ModSecurity是安装在后端服务器上的话,需要将REMOTE_ADDR改为REQUEST_HEADERS:X-Forwarded-For。
五、将CSV文件转为DAT格式的GeoIP数据库
首先,前往https://www.maxmind.com/下载名称为“GeoLite2 Country: CSV Format”数据库,并放置在/usr/local/geoip/目录下,账户注册及下载方法可参加文章http://www.modsecurity.cn/practice/post/15.html。
然后,下载geolite2legacy,并进入下载后的文件夹中
cd /usr/local git clone https://github.com/sherpya/geolite2legacy cd geolite2legacy/
最后,执行以下命令,即可将CSV文件转为DAT格式的GeoIP数据库
./geolite2legacy.py -i /usr/local/geoip/GeoLite2-Country-CSV.zip -f geoname2fips.csv -o /usr/local/geoip/GeoLite-Country.dat
如若提示“ImportError: No module named ipaddr”,表示缺少ipaddr模块,通过pip安装即可,命令如下:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py pip install ipaddr
安装成功后,重新执行转换命令即可。
六、其他
由于免费的GeoIP数据库会不定时更新,因此建议每半个月或一个月,重新下载新的GeoIP数据库进行配置,然后将WEB服务重新加载即可,文章中直接提供的数据库文件,本人也会不定期进行更新。
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。