【追記】IPアドレスから国名を取得するGeoIPを使ってみた。
某ホスティング会社に従事しているので業務柄、FTPの不正アクセス、
メールアカウントの踏み台の有無を調査するためにIPアドレスから
接続元の国名を取得することが多い。
今までは一つ一つ下記のようなサイトでIPを検索して調べていた訳だけど、
メールサーバーで踏み台が疑われるときにこれ毎回やるのはなかなか骨が折れる。
そのため、一括で検索できるようにするために、簡易ツールを作ってみた。
PHPでGeoIPという専用の関数が用意されているので、そこまで苦労することはなかった。
ちなPHP5.4.2
GeoIPのインストール
流れは
①
yum install re2c geoip geoip-devel②
pecl install geoip③php.iniもしくはgeoip.iniにextension=geoip.soを追記。
インストールについては下記サイトが分かりやすかったので、詳細は下記を見てほしい。
GeoIPListの使い方
早速図示する。
図にあるような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アドレスを引っ張ってきたものを用意。
- 出力後
とりあえず、今後これをうまく使って、業務でもっと楽したい。。。