H2O へのアクセスを User-Agent でブロックする
H2O を使って Web サービスを構築しているのですが、phpMyAdmin の脆弱性を狙ったアクセスが毎日やってきます。
phpMyAdmin は使用していないため特に問題ないのですが、存在しないパスを毎回読みに行く処理は無駄ですので、今回は H2O 側でブロックしてみます。
判定方法
まずはアクセスログからヒントを探ってみます。
188.13.xxx.yyy - - [26/Nov/2017:12:41:51 +0900] "HEAD /mysql/admin/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:52 +0900] "HEAD /mysql/dbadmin/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:52 +0900] "HEAD /mysql/sqlmanager/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:53 +0900] "HEAD /mysql/mysqlmanager/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:53 +0900] "HEAD /phpmyadmin/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:54 +0900] "HEAD /phpMyadmin/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:55 +0900] "HEAD /phpMyAdmin/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:55 +0900] "HEAD /phpmyAdmin/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:56 +0900] "HEAD /phpmyadmin2/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:57 +0900] "HEAD /phpmyadmin3/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
188.13.xxx.yyy - - [26/Nov/2017:12:41:57 +0900] "HEAD /phpmyadmin4/ HTTP/1.1" 404 0 "-" "Mozilla/5.0 Jorgee"
User-Agent がすべて Mozilla/5.0 Jorgee
となっていますね。
他サイトの事例を見ても、このユーザエージェントをキーに弾くことが多いようです。
設定適用
H2O には mruby が組み込まれているため、リクエスト処理やアクセス制御に mruby のコードを使用することができます。
User-Agent が Mozilla/5.0 Jorgee
と完全一致する場合のみ、アクセスを拒否しています。
動作確認
H2O を reload した後、curl から確認してみます。
$ curl -I -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) (略) Chrome/62.0.3202.94" https://spla2.yuu
26.com
HTTP/1.1 200 OK
(後略)
$ curl -I -H "User-Agent: Mozilla/5.0 Jorgee" https://spla2.yuu26.com
HTTP/1.1 403 OK
(後略)
「403 Forbidden」ではなく「403 OK」なのが若干気になりますが、RFC 2616 によると文字列部分は任意の内容でいいそうなので、一旦よしとします。
まとめ
- phpMyAdmin への脆弱性スキャンを H2O で拒否しました
- User-Agent が全て
Mozilla/5.0 Jorgee
となっていたため UA で判定しました - レスポンスコードの後ろに続く文字は任意に変更していいらしいです
「403 Forbidden」と返す方法は、後日調べて追記したいと思います。
ディスカッション
コメント一覧
まだ、コメントがありません
フォローする
カテゴリー
最近の投稿
ブログについて