GeoIP2のCSVデータでPostgresSQLデータベースを更新して国別拒否リストを生成
国単位でIPアドレス制限を行うためにPostgreSQLにインポートしたGeoIP2のデータを更新しようとしたときの覚書。 環境: CentOS Stream 8, PostgreSQL 14.6, nginx 1.22.1 GeoIP Updateは独自形式のデータベースバイナリ 公式が公開しているGeoIP Updateというプログラムが使えるか調査。 Updating GeoIP and GeoLite Databases | MaxMind Developer Portal GitHub - maxmind/geoipupdate: GeoIP update client code YUMリポジトリにもあったけどバージョンが低い。 # dnf search geoip # dnf info geoipupdate Name : geoipupdate Version : 2.5.0 だけどGeoIP Updateは独自形式(mmdb)で保存される。 これをnginxから参照する方法もあるみたいだけど、nginx自体のbuildが必要との情報があったので、前と同じcsv形式でPostgreSQLのデータベースをアップデートすることにした。 国別IPアドレスのCSVファイルをダウンロード 最新のCSVダウンロード手順 MaxMind へログイン 左メニューのGeoIP2/GeoLite2のDownload Files 「GeoLite2 Country: CSV Format」のDownload ZIPをクリック ZIPファイルの中身 GeoLite2-Country-Blocks-IPv6.csv: IPv6一覧 GeoLite2-Country-Blocks-IPv4.csv: IPv4一覧 GeoLite2-Country-Locations-ja.csv: IPアドレスIDと国コードの対応リスト(日本語版) PostgreSQLデータベースへインポート 新規作成時は前の記事を参考に。 nginxで国単位のIPアドレス制限 postgresユーザーでSQLコマンド発行 # su - postgres $ psql geo 確認のためテーブル一覧表示。 geo=# \d データ削除 geo=# truncate table geoi