純規の暇人趣味ブログ

手を突っ込んで足を洗う

ちょっとひと手間、Webサーバのセキュリティを向上させる方法

      2015/10/24    HimaJyun

どうも、鯖缶ズのみなさまこんにちは。
マイクラ鯖を建てたいと一念発起し、気付けばWeb鯖まで建てていたHimaJyunです。

まだまだ改善するべき事は色々ありますが、ごそごそやっていますよ!!

さて、今日はこのブログをホストしているWeb鯖で実施している、軽い仕掛けをご紹介します。
iT戦争目の前のこの時代、ちょっとした対策でもやらないに越した事はありませんよ。

まず最初に言わせて頂くと、僕はセキュリティの専門家ではありません。
そして、今回紹介する方法、元々は利便性向上のために施した細工です。
「どれくらいの効果があるのか」は言い切れませんが、手軽なのでやるだけやってみて下さい。

ボットの性質を逆手に取ろう!!、簡単セキュリティ対策

お先に答えを言っちゃうと、
「管理しているドメイン以外でのアクセス(IP直打ち)などがあった場合にリダイレクトさせる」
だけです。

Web鯖を運営して居る方であればご存知だと思われますが
Webをワールドワイドに向けて公開すると、日夜、悪事を働こうと試みる不届き者が沢山訪れます。

○ね!!と言いたい所ですが、お言葉がよろしくないのでここはグッとこらえて……

さて、その不届き者ですが9割9分9厘がBotです。
人間で直接攻撃してくる奴なんてまず居ません。

そして、「Hostヘッダが不正」である事が多いです。
もうお気づきですよね?

そうです、VirtualHostを利用して調理しちゃうのです。

IP直打ちを転送で利便性も向上!!

さて、僕はhttps://jyn.jp/、つまりこのブログと
https://amit.jyn.jp/と言うマイクラ鯖用のプロジェクトサイトを管理しています。

例えば、IP直打ちやHTTP/1.0、Hostヘッダが不正など、明らかに変なアクセスは
jyn.jpにリダイレクトされ、このブログが表示されています。

これが今回の仕掛けです。
この様に、利便性を向上させるための仕掛けがBot対策にも応用出来そうだと言う訳です。

とりあえず環境

Apacheで説明します。
Apacheで説明するだけで、VirtualHostが使えるのならばNginxとかでも構いません。

効果がある範囲

まず、対象のアクセスに正しくないHostヘッダが含まれている必要があります。
そして、そのアクセス元がLocationヘッダを辿らないアクセスである必要があります。
これらはBotアクセスであれば高確率で満たしています。

また、この手法で防げるのは「Web上のコンテンツ(プログラム)を狙った攻撃」です。
少し前に話題になったShellShockの様なバグには対応出来ないかも知れません。

簡単な例ですが、かの有名なphpmyadminを狙う攻撃
ああ言う攻撃であればかなりの高確率で防げますよ。

やり方

上手く説明出来ない舌足らずで申し訳ないですが、つまり僕が何を言いたいかと言うと

「定義されていないドメイン(IP直など)でアクセスされた際にリダイレクトやアクセス拒否する様にすると良いよ。」

と言いたいのですが、これでも分からないかも知れませんのでApacheでの設定例。

以下を参考に、Apacheの設定を追加して下さい。
もし、現在運営中のサイトがVirtualHostの設定になっていない場合は、そちらを先に設定してね(はぁと
(多分、昨今のWeb鯖であればVirtualHostで動いているとは思いますけど……)

<VirtualHost _default_:*>
 ServerName any
 Redirect 301 / http://運営しているドメイン/
</VirtualHost>

必要に応じて、ログを適切な場所に吐くようにしてみて下さい。

Debian系であれば000-default.confを別の名前でコピーして
000-default.confをこの設定に置き換えた方がスマートで良いです。
(つまり、「cp 000-default.conf newname.conf」してから、000をこれに書き換える)

でもって、Apacheを再起動してあげる。

試しに、あなたが管理する正しいドメインでアクセスしてみて下さい。
まぁ、今まで通りに表示されますよね?

次に、IP直打ちでアクセスしてみて下さい。
きっと、正しいドメインにリダイレクトされる事でしょう。

この「リダイレクトされる」をBotは辿りません。
よって、Web上に置いてある、例えば、PHPMyAdminなどを攻撃から防ぐ事が出来るって訳です。
(PHPMyAdmin置きっぱは危ないから、消すか、イントラに移動させるべきですけど……)

こんな感じで動きますよ。

こんな感じで、正しくないアクセスに対して301を返しています。
正しいドメインにアクセスし直している形跡もありません。
(途中から503になってるのはDoS対策が効いてるからです。)

65.60.49.250 - - [17/Sep/2015:16:58:52 +0900] "GET //scripts/setup.php HTTP/1.1" 301 454 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:53 +0900] "GET //admin/scripts/setup.php HTTP/1.1" 301 466 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:53 +0900] "GET //admin/pma/scripts/setup.php HTTP/1.1" 301 474 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:53 +0900] "GET //admin/phpmyadmin/scripts/setup.php HTTP/1.1" 301 488 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:54 +0900] "GET //db/scripts/setup.php HTTP/1.1" 301 460 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:54 +0900] "GET //dbadmin/scripts/setup.php HTTP/1.1" 301 470 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:54 +0900] "GET //myadmin/scripts/setup.php HTTP/1.1" 301 470 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:55 +0900] "GET //mysql/scripts/setup.php HTTP/1.1" 301 466 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:55 +0900] "GET //mysqladmin/scripts/setup.php HTTP/1.1" 301 476 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:55 +0900] "GET //typo3/phpmyadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:56 +0900] "GET //phpadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:56 +0900] "GET //phpMyAdmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:56 +0900] "GET //phpmyadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:57 +0900] "GET //phpmyadmin1/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:57 +0900] "GET //phpmyadmin2/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:57 +0900] "GET //pma/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:57 +0900] "GET //web/phpMyAdmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:58 +0900] "GET //xampp/phpmyadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:58 +0900] "GET //web/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:58 +0900] "GET //php-my-admin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:59 +0900] "GET //websql/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:59 +0900] "GET //phpmyadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:58:59 +0900] "GET //phpMyAdmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:00 +0900] "GET //phpMyAdmin-2/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:00 +0900] "GET //php-my-admin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:00 +0900] "GET //phpMyAdmin-2.5.5/index.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:01 +0900] "GET //phpMyAdmin-2.5.5-pl1/index.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:01 +0900] "GET //phpMyAdmin/ HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:01 +0900] "GET //phpmyadmin/ HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:02 +0900] "GET //mysqladmin/ HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:02 +0900] "GET //scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:02 +0900] "GET //admin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:03 +0900] "GET //admin/pma/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:03 +0900] "GET //admin/phpmyadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:03 +0900] "GET //db/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:04 +0900] "GET //dbadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:04 +0900] "GET //myadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:04 +0900] "GET //mysql/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:05 +0900] "GET //mysqladmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:05 +0900] "GET //typo3/phpmyadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:06 +0900] "GET //phpadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:06 +0900] "GET //phpMyAdmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:06 +0900] "GET //phpmyadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:07 +0900] "GET //phpmyadmin1/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:07 +0900] "GET //phpmyadmin2/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:07 +0900] "GET //pma/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:08 +0900] "GET //web/phpMyAdmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:08 +0900] "GET //xampp/phpmyadmin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:08 +0900] "GET //web/scripts/setup.php HTTP/1.1" 503 473 "-" "-"
65.60.49.250 - - [17/Sep/2015:16:59:09 +0900] "GET //php-my-admin/scripts/setup.php HTTP/1.1" 503 473 "-" "-"

 - サーバ運営