Apache2で国別許可・遮断(GeoIP)

IPアドレスから位地情報を割り出すGeoIP

GeoIP(GeoIP2)は、MaxMind社(本社:米国マサチューセッツ州ウォルサム)が提供するIPアドレスから位地情報を割り出す仕組みです(Software+データベース情報)。GeoIPには、結果として得られるデータの粒度の違い(大陸>国>都市>郵便番号 etc.)によっていろいろな有償サービスが提供されています。

MaxMind社のホームページ(日本語)

オープンソース製品 GeoLite

MaxMind社はGeoIP2のオープンソース版としてGeoLiteという名称で、ソフトウェアと無償データベースを無償で提供しています。GeoLiteのデータベースは以下のものが提供されています。それぞれ、CSVとバイナリの二つのフォーマットが利用可能です。

GeoLiteCountry: IPアドレス から国を特定

GeoLiteCity:   IPアドレスから都市を特定

Apache Webサーバでの利用  mod_geoip2 

「アクセス元のIPアドレスから、どこの国かを割り出してWEBサーバの振る舞いを切り替えたい」というような用途には、GeoLiteでも十分に役立ってくれます。実際、私たちは、私たちが管理している多数の企業や公共機関のサイトで昨年特定の国国々からの執拗な攻撃が集中した際に、GeoLiteとGeoIPをApache Webサーバで利用するためのmod_geoip2(MaxMind社のオープンソース製品)を使って対応し、高い効果をあげることができました。

参考までに以下は、Apache Web サーバの設定の概要です。Apacheの設定になれている方は使用感がつかめると思います。

mod_geoip2のモジュールのロード

Apache Webサーバでお約束のモジュールのロード設定です。

LoadModule geoip_module       modules/mod_geoip.so

mod_geoip2に関する設定

この設定の肝は、

  • SetEnvIfを使って、指定された国からのアクセスであれば、”TrustedCounty”という名前の環境変数を設定する
  • 環境変数TrustedCountryの有無をもとにアクセスを許可/遮断する

という手順です。GeoIPScanProxyHeaderをOnにすると、プロキシがリクエストにヘッダーを付けて元のアドレスを示していれば、そのアドレスが判定されます(そんな人たちがヘッダーに情報残すような串使うかなぁ?)。

GeoIPEnable On ←GeoIP機能オン
GeoIPDBFile /usr/local/share/GeoIP/GeoIP.dat← GeoLiteデータベースデータを読み込む
GeoIPScanProxyHeaders Off ← プロキシ解析モードのOn/Off
SetEnvIf GEOIP_COUNTRY_CODE JP TrustedCountry ← 国コードがJPであれば環境変数TrustedCountryをセット
 <Location />
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1 192.168 161.69.197.64/26
    Allow from env=TrustedCountry ← 「TrustedCountry」がセットされていたらアクセス許可
</Location>

この例では、鎖国してしまっていますが(あくまで例です)、以下のように特定の国からのアクセスを禁止することも可能です。 

...
SetEnvIf GEOIP_COUNTRY_CODE XX  HostileCountry
SetEnvIf GEOIP_COUNTRY_CDOE YY   HostileCountry
 <Location />
   Order allow,deny
   Allow from all
   Deny from env=HostileCountry ← 「HostileCountry」がセットされていたらアクセス禁止
</Location>

特定の環境変数の有無を条件に設定できるApacheの制御文であれば、アクセスの許可/遮断以外にもいろいろな使い方できますね。 有償版のデータベースが提供してくれる情報は、さらに粒度が細かいですので、アプリケーションソフトなどにGeoIPの情報の参照を組み込むと効果的な商業ツールなども作れそうです。

注意:

一部の外資系企業で、グローバルにネットワークを設定管理しているところですと、外資系のキャリアの日本支社からIPアドレスを得ている場合があります。この場合、物理的に日本国内であっても、IPアドレスの判定結果の地理情報は海外となる場合がありますので、特定のアクセスもとに対しては例外処理が必要となる場合があります。

貴社のApache WebサーバにGeoLiteの導入をご希望ですか?

現用のApache WebサーバにGeoLiteの導入をご希望のお客様。最短のダウンタイムで貴社現用のApache WebサーバにGeoLiteを導入させていただきます。詳しくはこちらからお問い合わせください。

ドメイン名ハイジャックについて (11/5 JPRS緊急通報)

ここのところDNSサーバの脆弱性が頻繁に報告されます。外部の不特定の相手にさらさなければいけないネットワークサービスでしかもUDPとなれば、攻撃者にとってこんな美味しいターゲットは他にないでしょう。昨日JPRSが緊急通報したBIND9その他複数のDNSソフトのデリゲーションがらみの脆弱性など、世界のDNSツリー全体が使いものにならなくなる可能性があります(でも、そうなると、攻撃してる人たちも不便だとおもいますが)。 続きを読む