先日からこのブログを動かしているサーバのチューニングを行なって、なんとか落ちないように頑張っているのですが今日もまた落ちてました。。。orz
access_logを見ると、短時間のうちに大量の404エラーが集中している時間帯がありました。
webサーバが落ちたのはそのアクセスからしばらくたってからだったのですが、落ちる原因かどうかはともかく良くないことだよな。ということで、ログから404エラーを抽出してhttpd.confでアクセス拒否してみました。
悪そうなIPアドレスを探す
まずaccess_logから404エラーのアクセスをIPアドレスごとにカウントしてみます。
$ sudo grep " 404" /var/log/httpd/access_log | cut -f1 -d" " | sort | uniq -c
そしたら明らかにケタ違いの404を吐く(吐かせる?)IPが2つ。
一方は中国、もう一方はドイツからでした。phpmyadminの管理画面のパスなどを叩いてくる悪い子です。さっそくアクセス拒否することにしましょう。
httpd.confでdenyする
幾つかのサイトをホストしているのですが.htaccessをサイトごとに置くのは面倒だったのでhttpd.confに書くことにしました。
書き方は.htaccessと同じでいいのですが、ディレクトリを指定するのをお忘れなく。詳しくは後述の「IP認証によるアクセス制限のテクニック(2/2)」がとてもわかりやすかったです。
<Directory /> order allow,deny allow from all deny from 119.63.192.0/21 deny from 78.47.90.80/28 deny from 211.148.192.0/18 </Directory>
.htaccessはファイルを作成すればすぐに設定が反映されますが、httpd.confの場合はサービスを再起動する必要があります。
ちなみにIPアドレスの範囲をしめす「IPアドレス/サブネットマスク」はこちらで調べるのが便利です。
⇒ サブネットマスク計算(IPv4)/サブネット一覧(早見表)
$ sudo service httpd restart
これでおとなしく(落ちなく)なってくれると良いのですが・・・σ(^_^; )
【参考】
IP認証によるアクセス制限のテクニック(2/2)
ミケネコの htaccess リファレンス