読者です 読者をやめる 読者になる 読者になる

togatttiのエンジニアメモ

過度な期待はしないでください。旧麹町で働くエンジニアのメモ帳です。

【追記】IPアドレスから国名を取得するGeoIPを使ってみた。

ホスティング会社に従事しているので業務柄、FTP不正アクセス
メールアカウントの踏み台の有無を調査するためにIPアドレスから
接続元の国名を取得することが多い。

今までは一つ一つ下記のようなサイトでIPを検索して調べていた訳だけど、
メールサーバーで踏み台が疑われるときにこれ毎回やるのはなかなか骨が折れる。

そのため、一括で検索できるようにするために、簡易ツールを作ってみた。

PHPGeoIPという専用の関数が用意されているので、そこまで苦労することはなかった。

ちなPHP5.4.2

GeoIPのインストール

流れは

yum install re2c geoip geoip-devel
pecl install geoip
php.iniもしくはgeoip.iniにextension=geoip.soを追記。

インストールについては下記サイトが分かりやすかったので、詳細は下記を見てほしい。

GeoIPListの使い方

早速図示する。

f:id:togattti1990:20131105212501j:plain

図にあるようなIPアドレスの形式をテキストエリア
に入力してparseすると、国名を求めることができる。
日本以外のIPは警告色。


$country = geoip_country_name_by_name($ip);

GepIP関数はGitHubも見ていただければと思うが、ここ一行だけでした。
インストールできれば、本当に簡単です。

注意

DBは利用していないので、そこへアクセスされる心配はないが、
POSTする際にSSLが適用されていないので、個人情報をそのまま
入力するのは避けた方がいいかもしれない。

後は、素直に社用ツールの仲間に入れていただけるようにお願いしてみるか。。

追記(おまけ)

記事公開後、会社の先輩方からセキュリティ面の脆さとか色々指摘されたので、
色々勉強になった。セキュリティ周りは今後しっかり気にしていこう。

さて、元々やりたいことがメールログ内に記載されているメールアドレスの
接続元IPアドレスから国名を割り出したいという内容で、個人情報を外に出さずに
どうにかしたいということを先輩に相談したところ、なるほどと思える
ソリューションを享受いただいたので残しておく。

それは、コマンドライン上で、awkで一行ずつIPアドレスをクエリとして、
外部のURLに投げて、その出力(国名)をプリントしていくという方法。

具体的には以下のコマンドがベースとなる。

cat ip.txt | awk '{system("curl http://180.235.254.199/geoip_country_name_by_name.php?ip="$1); print " "$0;}'

  • geoip_country_name_by_name.php

コマンド内のPHPはGetクエリから国名を出力する簡単なもの。


  • ip.txt

適当にWebサービスのIPアドレスを引っ張ってきたものを用意。


  • 出力後

とりあえず、今後これをうまく使って、業務でもっと楽したい。。。