HAProxyでGeoLite2-Countryを用いてアクセス制御を行う(備忘録)

MaxMind社への登録他は適宜実施。

# mkdir -p /root/geoip/vol
# cd /root/geoip
# cat << EOT >.env
GEOIPUPDATE_EDITION_IDS=GeoLite2-Country
GEOIPUPDATE_ACCOUNT_ID=<MaxMind ID>
GEOIPUPDATE_LICENSE_KEY=<MaxMind License key>
GEOIPUPDATE_FREQUENCY=72
EOT

# docker run --env-file /root/geoip/.env -v /root/geoip/vol:/usr/share/GeoIP --name geoip_update --detach --restart always ghcr.io/maxmind/geoipupdate
# git clone https://github.com/ntsklab/geoip2-haproxy-ranges
# docker build -t geoip2-haproxy-ranges .
# docker run -d --name geoip_convert_csv --restart always -v /root/geoip/vol:/usr/local/var/GeoIP geoip2-haproxy-ranges:latest

よしなに出力ファイルをHAProxyが読める場所へコピる めんどいのでcrontabでやった

* * * * * rsync --quiet -r /root/geoip/vol/output/ /opt/geoip

HAProxyへ以下のような設定を入れる ここは自由に。

frontend XXXX
acl isjp src -f /opt/geoip/JP.txt
acl isadminpath path -i -m sub /wp-admin
acl isadminpath path -i -m sub /wp-login.php
acl isadminpath path -i -m sub /xmlrpc.php
acl isadminpath path -i -m sub /wp-signup.php
acl isadminpath path -i -m sub /wp-activate.php
http-request reject if !isjp isadminpath

終わり
以下のようになる