日本国以外からのPOSTを拒否するNginx設定をGeoIPで自動化

今まで手動でやってきた日本のIPアドレス一覧を自動化したときの覚書。
日本国外からのPOSTを拒否するNginx設定は前の記事を参考に。
参考: 日本国外からのPOSTを拒否するNginx設定

環境: FreeBSD 14.2-RELEASE-p4, nginx 1.28.0(※geoモジュールは未インストール), python 3.11.13

基本的にAI(Gemini 2.5 Pro)と対話してスクリプトを生成してもらった。


まずはMaxMindのGeoLite2データベースファイル(MMDB形式)を解析するPythonライブラリのインストール。
# pkg install py311-maxminddb

バッチスクリプトはAI(Gemini 2.5 Pro)に作ってもらった。


AIへの指示概要(実際は対話しながら何度か修正)

データベースファイル(MMDB形式)から日本からのIPアドレスを許可するnginxのconfファイルを生成するスクリプトを教えてください。
環境: 14.2-RELEASE-p4, python 3.11

  • cronで定期実行できるようにデータベースを更新する処理を加えてください。
  • Nginxのgeoモジュールはインストールしていない。
    「allow 1.0.1.0/24;」のような形式
  • ファイル名は「JP.inc」(COUNTRY_CODEを使って".inc"の拡張子を追加)
  • 保存するパスは「/usr/local/etc/nginx/conf.d/include/allow/JP.inc」(設定で指定可能)

生成されたシェルスクリプトはGistで公開。
https://gist.github.com/DaikiSuganuma/feec839c3fade0053044aa39d2fe0261

MaxMindのライセンスキーは公式サイトにログインして生成する。


生成されたIPアドレス一覧を確認。
# less /usr/local/etc/nginx/conf.d/include/allow/JP.inc


最後にcronを設定。
# cd /etc/cron.d/
# vim update_geoip

MAILTO="info@hoge.jp"

# [at Sunday 3am] Update JP IP address list for nginx by MaxMind GeoIP API.
# This script reloads nginx.
0 3 * * 0 root /home/software/server-utility/update_geoip_rules.sh

スクリプトが失敗すると全ウェブサイトに影響が出る可能性があるので気を付けないといけない。


▼ 関連記事