[Apache] スパムっぽいアクセスをなるべく拒否したい
どうもこんにちは、nakamura です。最近、我が家の風呂場にやたらとヤモリが出現して困ります。だって目が悪いからぱっと見、やたら動きの早いナメクジに見えるんだもの。
なかなか実感はわかないかもしれませんが、インターネットの世界には全くもって訳の分からないパケットが溢れ返っています。明らかに悪意のあるパケットもあれば、目的のさっぱり分からないものまで多種多様、今日はそんな中でも HTTP のあやしげなリクエストを Apache のちょっとした設定で拒否する方法をご紹介します。(そもそもこういうアクセスのことをスパムと呼ぶのかどうか怪しいですが)
実際にはスパムっぽいアクセスを 100% 防ぐことは不可能ですが、今回ご紹介するのは割と手軽な設定でまぁまぁそれなりに効果がある(と僕が思っている)ものですので、こういうの気になる!っていう人はぜひ一度試してみてください。
環境は CentOS-5.6 の Apache-2.2.x です。
User-Agent が空のアクセスを拒否
Apache のログを眺めているとよくありますね〜、UA が空のアクセス。最近は Firefox のアドオンなんかで簡単に UA を空にする事ができますが、十中八九人間のアクセスではないだろうし、気持ち悪いし、なんだか腹が立つので拒否しちゃいましょう。
こんな感じでいけます。
SetEnvIf User-Agent "^$" spam_ua
<Directory /home/projects/c-brains.jp/htdocs>
Order deny,allow
Deny from env=spam_ua
</Directory>
存在しないホスト宛のアクセスを拒否
例えば www.example.com というサイトを運用しているとしたら、www.example.com 以外のホスト名ではアクセスを受け付けたくないですね。(IP アドレスとか、hosts にデタラメなホスト名を書いてのアクセスとか)そういう時はデフォルトバーチャルホストを使って拒否します。
まず /etc/httpd/conf/httpd.conf に以下を記述。
NameVirtualHost *:80
Include vhosts.d/*.conf
/etc/httpd/vhosts.d/ 以下に 00_default.conf と www.example.com.conf の 2 つのファイルを設置します。
www.example.conf
普通のバーチャルホストの設定を記述します。ちなみにサイトがひとつしかない場合でもこのようにあえてバーチャルホストを切ります。
<VirtualHost *:80>
ServerName www.example.com
ServerAdmin nakamura@example.com
DocumentRoot /home/projects/c-brains.jp/htdocs
<Directory /home/projects/c-brains.jp/htdocs>
Options none
Order deny,allow
</Directory>
</VirtualHost>
00_default.conf
デフォルトバーチャルホストの設定を記述します。ファイル名の頭に 00 を付けているのは、一番最初に読み込まれたバーチャルホストがデフォルトのバーチャルホストになるからです。デフォルトバーチャルホストは Apache に設定されていないホスト名宛のアクセスを全て処理します。
<VirtualHost _default_:80>
ServerName localhost
ServerAdmin nakamura@example.com
DocumentRoot /home/projects/c-brains.jp/htdocs
<Directory /home/projects/c-brains.jp/htdocs>
Order Allow,Deny
</Directory>
</VirtualHost>
空の UA と同じように SetEnvIf とかでもできますが、バーチャルホストが増えてくると面倒なので僕はデフォルトバーチャルホストを使ってます。
終わりに
特に計測した事もありませんが、この設定をした所でパフォーマンスが劇的に改善するとかは滅多にないと思います。どちらかというと精神衛生上の問題ですね。設定しておいて損はないですし、何となくスッキリするので僕はいつも設定しています。