Cocoon-Engine

甘党インフラエンジニアの技術ブログ

Chocolat Chocolat Chocolat Chocolat

IT技術とスイーツに興味がある方、ちょっと見ていきませんか?

Apache の「client denied by server configuration」エラーで原因となっているIPアドレスを抽出する方法

/var/log/httpd/error_log に記録される「client denied by server configuration」のエラーログについて、
エラーの原因となっているアクセス元IPを一括で抽出する方法を紹介します。

エラーログについて

/var/log/httpd/error_log に下記のログが記録されます。

[client 142.4.218.114:60575] AH01630: client denied by server configuration: 


エラーの内容は対象ディレクトリへのアクセス失敗です。

意図しないIPからのアクセスであればApacheの設定で正常にブロックできているので問題ないのですが、

DoS攻撃を受けてたりするとログの件数が大量になるので、アクセス元IPを確認したい時があります。

IPアドレス抽出方法

抽出方法はシンプルに grep です。

$ sudo grep 'client denied by server configuration' /var/log/httpd/error_log | egrep -o '[0-9]{,3}\.[0-9]{,3}\.[0-9]{,3}\.[0-9]{,3}' | sort -n | uniq -c | sort -nr | head -5
    104 20.111.16.183
     72 95.214.235.216
     44 193.32.162.159
     29 35.212.148.28
     20 179.43.177.243
$

解説

1.grep 'client denied by server configuration' /var/log/httpd/error_log

/var/log/httpd/error_log から「client denied by server configuration」のログのみを抽出

 

2. egrep -o '[0-9]{,3}\.[0-9]{,3}\.[0-9]{,3}\.[0-9]{,3}'

拡張正規表現を使うので egrep (grep -E でも可)

IPアドレスは  192.168.0.1 など、XXX.XXX.XXX.XXX の形式なので、0~9 の数字が 1~3回出現 × 4回 という表現で指定

オプションで -o を指定しているので、行全体ではなく、一致したIPアドレスの部分のみが抽出されます。

 

3. sort -n | uniq -c | sort -nr | head -5

2 で抽出したIPアドレスを sort で整列させた後、uniq -c で件数カウント。件数を降順で再度 sort して上位 5件のみ表示。

uniq -c は隣接していないと同一の値としてカウントされないので sort を挟む必要があります。sort → uniq → sort はよく使いますね。

 

まとめ

100件以上検知していたIPアドレス 20.111.16.183 を whois で調べると、US(アメリカ) からのアクセスでした。

正常にブロックされてますね。

今回は grep だけで抽出しましたが、awk と合わせると時間帯ごとのアクセスも取れそうです。

 

参考:
Apacheのエラーログについて


 

気に入ったらぜひ共有してください。

TOP