
本文主要介绍通过配置GeoIP模块,ModSecurity可以拦截对非中文IP地址的访问.
I. 房地介绍
GeoIP当前具有两种格式,GeoLite(.dat文件)和GeoLite2(.mmdb文件). ModSecurity v2需要.dat格式,而ModSecurity v3使用.mmdb格式.
.dat格式的GeoIP文件当前不再更新,因此,如果您使用的是ModSecurity v2版本dat文件,我们需要使用CSV文件生成.dat格式的. 有关生成方法,请参见本文的第5节.
第二,下载GeoIP
单击此处下载GeoLite2-Country.mmdb,单击此处下载GeoLite-Country.dat. 下载完成后,请将其放置在/ usr / local / geoip /目录中.

上述文件的IP数据更新日期为2020-05-26,我将根据官方网站的数据进行不时更新.
或访问官方网站下载名为“ GeoLite2国家”的. 下载后,解压缩压缩包并将GeoLite2-Country.mmdb文件放在/ usr / local / geoip /目录中. 帐户注册和下载方法可以参与本文.
三,配置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地址访问网站dat文件,则会被直接阻止.
之所以同时使用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"
五,将CSV文件转换为DAT格式的GeoIP
首先,转到下载名为“ GeoLite2国家/地区: CSV格式”的,并将其放在/ usr / local / geoip /目录中. 帐户注册和下载方法可以参与本文.
下一步,下载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: 没有名为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服务. 本文直接提供的文件I也会不时更新.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/shumachanpin/article-230823-1.html
中国海军航空兵拥有飞豹