ApacheアクセスログからDDoS攻撃の兆候を検出する方法と防御策

Apacheサーバーを運用する際、DDoS(分散型サービス拒否)攻撃は深刻な脅威となります。DDoS攻撃は、大量のリクエストを送りつけてサーバーのリソースを圧迫し、サービスを停止に追い込むことを目的としています。攻撃を早期に検出し、適切に対応することが、サーバーの安定性とセキュリティを維持する鍵となります。

Apacheのアクセスログは、サーバーへのリクエストの詳細を記録しており、DDoS攻撃の兆候を見つけるための重要なデータです。大量の同一IPからのアクセスや短時間に集中するリクエストパターンなどが、攻撃の兆候として現れることがあります。

本記事では、Apacheアクセスログの基本構造を理解し、DDoS攻撃の兆候を検出する方法を解説します。さらに、ログ解析ツールの活用や防御策についても詳しく取り上げ、実践的な方法を学ぶことができます。サーバー管理者として、DDoS攻撃に備えるための知識を身につけましょう。

目次

DDoS攻撃とは何か


DDoS(分散型サービス拒否)攻撃は、多数のコンピュータやデバイスから同時にターゲットのサーバーに過剰なリクエストを送りつけ、サーバーのリソースを枯渇させてサービスを停止または遅延させる攻撃です。

DDoS攻撃の仕組み


攻撃者はマルウェアなどを利用して、世界中のデバイスを感染させ、ボットネットと呼ばれるネットワークを構築します。このボットネットを使い、大量のデバイスからターゲットのサーバーに一斉にリクエストを送ることで、帯域幅やCPU、メモリを圧迫します。

DDoS攻撃の種類


DDoS攻撃にはさまざまな種類があり、それぞれ異なる方法でサーバーに負荷をかけます。

1. ボリューム攻撃


ネットワーク帯域を圧迫し、サーバーのネットワーク資源を枯渇させる攻撃です。UDPフラッドやICMPフラッドが代表的です。

2. プロトコル攻撃


ターゲットのサーバーのネットワークインフラを直接狙い、リソースを浪費させる攻撃です。SYNフラッドやPing of Deathなどが含まれます。

3. アプリケーション層攻撃


Webサーバーの特定のアプリケーションを狙い、大量のリクエストを送りつけてリソースを消耗させます。HTTPフラッドが代表的です。

DDoS攻撃の影響


DDoS攻撃が成功すると、サービスの停止や遅延が発生し、ユーザーがサイトにアクセスできなくなります。これにより、企業の信頼性が損なわれ、金銭的損失やビジネス機会の喪失に直結します。
DDoS攻撃を未然に防ぐためには、攻撃の仕組みを理解し、早期に兆候を検出することが不可欠です。次の章では、Apacheのアクセスログを用いてDDoS攻撃の兆候を検出する方法について解説します。

Apacheのアクセスログの基本構造


Apacheのアクセスログは、サーバーへのすべてのリクエストを記録する重要なデータファイルです。このログを分析することで、サーバーの動作状況や不審なアクセスを特定することが可能になります。

アクセスログの保存場所


デフォルトでは、アクセスログは以下のパスに保存されます。

  • Linux/Unix系: /var/log/apache2/access.log または /var/log/httpd/access_log
  • Windows系: C:\Program Files\Apache Group\Apache2\logs\access.log

アクセスログの形式


Apacheのログフォーマットはカスタマイズ可能ですが、一般的には「Common Log Format(CLF)」や「Combined Log Format」が使用されます。

Common Log Formatの例

192.168.1.1 - - [31/Dec/2024:10:15:30 +0900] "GET /index.html HTTP/1.1" 200 532

各フィールドの説明

  • 192.168.1.1:アクセス元のIPアドレス
  • – –:識別子とユーザー名(省略)
  • [31/Dec/2024:10:15:30 +0900]:リクエスト日時
  • “GET /index.html HTTP/1.1”:リクエストの内容(メソッド、URI、プロトコル)
  • 200:ステータスコード(200は成功を示す)
  • 532:送信データのバイト数

Combined Log Formatの例

192.168.1.1 - - [31/Dec/2024:10:15:30 +0900] "GET /index.html HTTP/1.1" 200 532 "http://example.com" "Mozilla/5.0"

Combined形式ではリファラー(参照元)やユーザーエージェント(ブラウザ情報)も記録されます。

  • “http://example.com”:参照元URL
  • “Mozilla/5.0”:ユーザーエージェント

アクセスログを表示する方法


サーバーでアクセスログを確認するには、以下のコマンドを使用します。

tail -f /var/log/apache2/access.log

リアルタイムでログを監視することで、不審なアクセスがないか素早く確認できます。

次のセクションでは、DDoS攻撃の兆候を示すアクセスログの特徴について解説します。

DDoS攻撃の兆候を示すログの特徴


Apacheのアクセスログには、DDoS攻撃の兆候が明確に表れます。通常のアクセスと異なる異常なリクエストパターンを特定することで、早期に攻撃を検知し対策を講じることが可能です。

よく見られるDDoS攻撃のログパターン

1. 短時間で大量のリクエスト


DDoS攻撃では、同一IPアドレスまたは複数のIPから短時間に数千件ものリクエストが送信されます。

ログ例

192.168.1.1 - - [31/Dec/2024:10:15:30 +0900] "GET /index.html HTTP/1.1" 200 512
192.168.1.1 - - [31/Dec/2024:10:15:31 +0900] "GET /index.html HTTP/1.1" 200 512
192.168.1.1 - - [31/Dec/2024:10:15:32 +0900] "GET /index.html HTTP/1.1" 200 512

特徴

  • 数秒間に数十件から数百件の同一リクエストが記録される。
  • ターゲットとなるURLが固定されている場合が多い。

2. 特定のリソースへの過度なアクセス


同一URL(例:/wp-login.php/admin) への集中アクセスもDDoS攻撃の兆候です。

ログ例

192.168.1.5 - - [31/Dec/2024:11:00:00 +0900] "POST /wp-login.php HTTP/1.1" 200 1234
192.168.1.5 - - [31/Dec/2024:11:00:01 +0900] "POST /wp-login.php HTTP/1.1" 200 1234

特徴

  • 認証ページや管理画面など、セキュリティ上重要なページがターゲットになる。

3. 異常に大きなレスポンスサイズ


DDoS攻撃では、サーバーのリソースを消耗させるため、大量のデータを要求するリクエストが多発します。

ログ例

192.168.2.3 - - [31/Dec/2024:10:20:00 +0900] "GET /largefile.zip HTTP/1.1" 200 10485760
192.168.2.3 - - [31/Dec/2024:10:20:01 +0900] "GET /largefile.zip HTTP/1.1" 200 10485760

特徴

  • 大容量ファイルへの連続リクエストが記録される。

異常アクセスの可視化


ログ解析ツールを使用することで、異常なアクセスが視覚的に確認できます。例えば、特定IPからのアクセス頻度をヒートマップやグラフで表示すると、異常が一目で分かります。

次のセクションでは、これらのログを効率的に解析するツールのセットアップと使用方法について解説します。

ログ解析ツールの紹介とセットアップ


Apacheアクセスログを効率的に解析するためには、専用のツールを導入することが重要です。DDoS攻撃の兆候を迅速に特定し、可視化することで、攻撃への対応が容易になります。ここでは、代表的なログ解析ツールを紹介し、それぞれのセットアップ方法を解説します。

1. GoAccess


GoAccessは、リアルタイムでApacheのログを解析し、視覚的にアクセス状況を表示するオープンソースツールです。シンプルなインターフェースで、攻撃の兆候を素早く確認できます。

GoAccessのインストール


Linux(Debian/Ubuntu系)

sudo apt update
sudo apt install goaccess


CentOS/RHEL系

sudo yum install goaccess

GoAccessの使い方


Apacheのアクセスログを解析するコマンド例です。

goaccess /var/log/apache2/access.log --log-format=COMBINED


オプション例

  • --log-format=COMBINED : Combined Log Formatを指定。
  • --output=/var/www/html/report.html : HTML形式でレポートを出力。

2. AWStats


AWStatsは、アクセスログを詳細に解析し、ブラウザベースでレポートを表示するツールです。過去のデータも分析できるため、長期間のトラフィックパターンを把握するのに適しています。

AWStatsのインストール


Debian/Ubuntu系

sudo apt install awstats


CentOS/RHEL系

sudo yum install awstats

AWStatsの設定

  1. 設定ファイルをコピーします。
sudo cp /etc/awstats/awstats.conf /etc/awstats/awstats.example.com.conf
  1. 設定ファイルを編集して、Apacheログのパスを指定します。
sudo nano /etc/awstats/awstats.example.com.conf
LogFile="/var/log/apache2/access.log"
  1. 解析を実行します。
sudo awstats -config=example.com -update

3. Apachetop


Apachetopは、topコマンドのようにリアルタイムでApacheのアクセス状況をモニタリングするツールです。軽量で導入が簡単なのが特徴です。

Apachetopのインストール

sudo apt install apachetop

Apachetopの使用例

apachetop -f /var/log/apache2/access.log

ツールの選び方

  • リアルタイム解析が必要な場合は、GoAccessやApachetopが適しています。
  • 長期間のデータ解析を行いたい場合は、AWStatsが有効です。
  • サーバーリソースが限られている環境では、Apachetopのような軽量ツールが推奨されます。

次のセクションでは、これらのツールを用いた具体的なログ解析方法について解説します。

実際のログ解析方法


ApacheのアクセスログからDDoS攻撃の兆候を検出するには、ログの内容を細かく分析する必要があります。ここでは、GoAccessやAWStatsを用いた具体的なログ解析の手順を解説します。

1. GoAccessでリアルタイム解析


GoAccessは、リアルタイムでログを解析し、DDoS攻撃の兆候を即座に把握できるツールです。ここでは、GoAccessを用いた基本的な解析手順を示します。

解析の開始


以下のコマンドで、Apacheのアクセスログをリアルタイム解析します。

goaccess /var/log/apache2/access.log --log-format=COMBINED


オプション解説

  • --log-format=COMBINED : Apacheのログフォーマットが「Combined Log Format」であることを指定。
  • -o /var/www/html/report.html : 解析結果をHTML形式で出力し、ブラウザで閲覧可能にします。

リアルタイムでの異常検出


リアルタイム解析中に以下の項目を重点的に確認します。

  • IPごとのリクエスト数:異常に多いIPがないかチェック。
  • リクエストURL:同一URLへの大量アクセスがあるか確認。
  • ステータスコード:403(禁止)や503(サーバーダウン)が多発していないか監視。

2. AWStatsで過去のログを解析


AWStatsを使えば、過去のログデータを蓄積し、特定期間のアクセス傾向を解析できます。

ログ解析の実行


以下のコマンドでAWStatsを実行し、ログを解析します。

sudo awstats -config=example.com -update

レポートの表示


ブラウザでAWStatsのレポートを表示します。

http://example.com/awstats/awstats.pl?config=example.com

チェックポイント

  • 時間帯別のアクセス数:特定時間帯に急激なアクセス増がないか確認。
  • エラーログ:404や503エラーが大量に発生していないか監視。
  • リクエスト元IP:リクエストが特定のIPに集中していないか確認。

3. Apachetopでリアルタイムモニタリング


Apachetopは軽量で、ログをリアルタイムでモニタリングできます。

コマンド実行例

apachetop -f /var/log/apache2/access.log

確認ポイント

  • 上位のリクエスト元IP
  • リクエスト頻度
  • レスポンスの遅延やエラー

解析結果の判断


以下のようなログパターンが確認された場合、DDoS攻撃の可能性が高いと判断できます。

  • 同一IPからの秒単位の連続リクエスト
  • 特定のURL(/wp-admin/apiなど)への過剰なアクセス
  • 403や503のステータスが短時間に大量に発生

次のセクションでは、DDoS攻撃の兆候を検出した後の対応策について解説します。

DDoS攻撃の兆候が見られた場合の対応策


ApacheのアクセスログからDDoS攻撃の兆候を検出した場合、迅速な対応が求められます。ここでは、DDoS攻撃への防御策をいくつか紹介し、攻撃の影響を最小限に抑える方法を解説します。

1. iptablesでのIPブロック


短時間に大量のリクエストを送る特定のIPをブロックする方法です。

特定のIPアドレスをブロック


以下のコマンドで、特定IP(例:192.168.1.1)をブロックします。

sudo iptables -A INPUT -s 192.168.1.1 -j DROP


複数IPを一度にブロックする場合

sudo iptables -A INPUT -m limit --limit 20/min -j ACCEPT
sudo iptables -A INPUT -j DROP


このルールは、1分間に20回以上の接続を超えた場合にそれ以降のアクセスを遮断します。

ブロックの解除方法

sudo iptables -D INPUT -s 192.168.1.1 -j DROP

2. mod_evasiveの導入と設定


mod_evasiveはApacheのモジュールで、DDoS攻撃やブルートフォース攻撃を自動的に検出・防御します。

mod_evasiveのインストール


Debian/Ubuntu系

sudo apt install libapache2-mod-evasive


CentOS/RHEL系

sudo yum install mod_evasive

設定ファイルの編集


設定ファイルを開きます。

sudo nano /etc/apache2/mods-available/evasive.conf


以下の内容を追記します。

DOSHashTableSize 3097
DOSPageCount 5
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 600
  • DOSPageCount 5 : 1秒間に同一IPから5回以上のリクエストがあった場合にブロック。
  • DOSBlockingPeriod 600 : ブロック後、600秒間アクセスを禁止。

3. mod_securityでWebアプリケーションを防御


mod_securityは、ApacheのWAF(Web Application Firewall)で、リクエスト内容を監視し攻撃を遮断します。

mod_securityのインストール

sudo apt install libapache2-mod-security2

ルールセットの導入


OWASPが提供するCore Rule Set (CRS)を利用します。

sudo git clone https://github.com/coreruleset/coreruleset /etc/modsecurity/crs


設定ファイルを適用し、リロードします。

sudo a2enmod security2
sudo systemctl restart apache2

4. fail2banで自動的にIPをブロック


fail2banは、不正なアクセスが一定回数を超えた場合に自動でIPをブロックします。

fail2banのインストール

sudo apt install fail2ban

Apache用の設定を追加

sudo nano /etc/fail2ban/jail.local


以下を追加します。

[apache-ddos]
enabled = true
filter = apache-ddos
logpath = /var/log/apache2/access.log
maxretry = 100
findtime = 600
bantime = 3600

対応後の確認


攻撃への対応が完了したら、以下のコマンドでブロックリストを確認します。

sudo iptables -L

次のセクションでは、リアルタイム監視と異常検出の自動化について解説します。

リアルタイムでの監視方法


DDoS攻撃は瞬時に発生するため、リアルタイムでApacheのアクセスログを監視することが重要です。異常なアクセスを即座に検出し、迅速に対応することで、攻撃による影響を最小限に抑えることができます。ここでは、リアルタイム監視に役立つツールと方法を紹介します。

1. tailコマンドを使ったリアルタイム監視


tailコマンドは、アクセスログの最新エントリをリアルタイムで表示します。シンプルで効果的な方法です。

tailコマンドの使い方

tail -f /var/log/apache2/access.log


このコマンドを実行すると、新しいリクエストが記録されるたびにリアルタイムで表示されます。

特定のパターンを監視


特定のURLやIPアドレスだけをフィルタリングして監視できます。

tail -f /var/log/apache2/access.log | grep "wp-login.php"


DDoS攻撃のターゲットになりやすい管理画面へのアクセスが集中していないか確認できます。

2. GoAccessによるリアルタイム解析


GoAccessを使用すると、リアルタイムでログの解析結果をブラウザ上で可視化できます。

リアルタイム解析の開始

goaccess /var/log/apache2/access.log --log-format=COMBINED -o /var/www/html/report.html --real-time-html


ブラウザで以下のURLにアクセスし、リアルタイムでレポートを確認できます。

http://your-server-ip/report.html

3. watchコマンドを使った監視の自動化


watchコマンドを使うことで、定期的にログを解析し続けることができます。

特定IPのアクセス数を定期監視

watch -n 10 "grep '192.168.1.1' /var/log/apache2/access.log | wc -l"


このコマンドは10秒ごとに特定のIPからのアクセス数をカウントします。異常な増加が見られた場合には即座に対応できます。

4. Apachetopでリアルタイムモニタリング


ApachetopはApacheのログをリアルタイムで監視するツールで、リクエスト数やリソースの消費状況をtopコマンドのように表示します。

Apachetopの起動

apachetop -f /var/log/apache2/access.log


確認ポイント

  • リクエスト数の急増
  • エラー発生率の増加
  • 特定のURLやIPへの集中アクセス

5. htopでリソース使用状況の確認


DDoS攻撃では、CPUやメモリの使用率が異常に上昇します。htopを使用してサーバーリソースを監視することで、攻撃の兆候を把握できます。

htopの起動

htop


CPUやメモリが異常に使用されている場合は、即座にiptablesなどでIPをブロックしましょう。

6. 監視を自動化するスクリプトの作成


以下のシェルスクリプトは、特定のIPからのリクエスト数が閾値を超えた場合に自動でブロックします。

#!/bin/bash
IP=$(tail -n 500 /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -1 | awk '{print $2}')
COUNT=$(tail -n 500 /var/log/apache2/access.log | grep $IP | wc -l)

if [ $COUNT -gt 100 ]; then
  sudo iptables -A INPUT -s $IP -j DROP
  echo "Blocked $IP with $COUNT requests"
fi


このスクリプトをcronで定期的に実行し、DDoS攻撃への迅速な対応を自動化できます。

次のセクションでは、ログ監視をさらに効率化するための自動化とアラート設定について解説します。

ログ監視の自動化とアラート設定


DDoS攻撃の兆候を迅速に検出し、即座に対応するためには、Apacheアクセスログの監視を自動化し、異常を検出した際に通知を受け取る仕組みが重要です。本章では、ログ監視を自動化する方法とアラートを送信する設定について解説します。

1. fail2banを活用した自動ブロック


fail2banは、一定回数を超える不正なアクセスが検出された場合、自動でIPをブロックする強力なツールです。

fail2banの設定手順


インストール

sudo apt install fail2ban


設定ファイルの編集

sudo nano /etc/fail2ban/jail.local


以下の設定を追加し、Apacheのログを監視します。

[apache-ddos]
enabled = true
port = http,https
filter = apache-ddos
logpath = /var/log/apache2/access.log
maxretry = 100
findtime = 600
bantime = 3600
  • maxretry:600秒以内に100回のリクエストがあればブロック
  • bantime:1時間(3600秒)ブロック

フィルターファイルの作成

sudo nano /etc/fail2ban/filter.d/apache-ddos.conf


以下の内容を記述します。

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*HTTP.*"
ignoreregex =

fail2banの再起動

sudo systemctl restart fail2ban


これにより、DDoS攻撃の兆候が見られた場合に自動で攻撃元のIPをブロックします。

2. ログ監視スクリプトの自動実行


シンプルなシェルスクリプトを作成し、特定のIPからの過剰なリクエストを検出して自動で通知します。

スクリプトの作成

#!/bin/bash
LOG=/var/log/apache2/access.log
ALERT_THRESHOLD=100
IP_LIST=$(tail -n 1000 $LOG | awk '{print $1}' | sort | uniq -c | sort -nr | awk '$1 > 100 {print $2}')

for IP in $IP_LIST
do
  COUNT=$(grep $IP $LOG | wc -l)
  if [ $COUNT -gt $ALERT_THRESHOLD ]; then
    echo "DDoS Alert: $IP with $COUNT requests" | mail -s "DDoS Attack Detected" admin@example.com
    sudo iptables -A INPUT -s $IP -j DROP
  fi
done


このスクリプトはログの最新1000行を監視し、一定回数を超えるIPを自動でブロックし、管理者にメールで通知します。

cronジョブに登録

sudo crontab -e


以下を追加して、5分ごとにスクリプトを実行します。

*/5 * * * * /path/to/script.sh

3. アラートメールの送信設定


メール通知を行うには、mailutilsをインストールします。

sudo apt install mailutils


SMTPサーバーを設定することで、DDoS攻撃の兆候が検出された際に管理者へメールが届くようになります。

4. Slackへの通知


メールではなくSlackへ通知を送ることも可能です。

Slack通知スクリプト例

#!/bin/bash
LOG=/var/log/apache2/access.log
WEBHOOK_URL="https://hooks.slack.com/services/your/webhook/url"
IP_LIST=$(tail -n 1000 $LOG | awk '{print $1}' | sort | uniq -c | sort -nr | awk '$1 > 100 {print $2}')

for IP in $IP_LIST
do
  COUNT=$(grep $IP $LOG | wc -l)
  if [ $COUNT -gt 100 ]; then
    curl -X POST -H 'Content-type: application/json' --data "{\"text\":\"DDoS Alert: $IP with $COUNT requests\"}" $WEBHOOK_URL
    sudo iptables -A INPUT -s $IP -j DROP
  fi
done


SlackのWebフックURLを設定し、通知を送るようにします。

5. アラートの閾値を適切に設定


閾値(maxretryALERT_THRESHOLD)はサーバーのトラフィックに応じて調整してください。通常のトラフィック量を把握し、過剰なアクセスが発生した際にのみ通知されるようにします。

次のセクションでは、これらの対策を踏まえたまとめを解説します。

まとめ


本記事では、Apacheのアクセスログを活用してDDoS攻撃の兆候を検出し、防御する方法を解説しました。DDoS攻撃は、サーバーのリソースを圧迫し、サービス停止のリスクを高めますが、アクセスログの監視と解析を自動化することで迅速に対応可能です。

特に、GoAccessfail2banmod_evasiveなどのツールを活用することで、不審なアクセスをリアルタイムで検出し、攻撃元のIPを自動でブロックできます。また、アラート機能を設定することで、管理者がすぐに異常に気づき、適切な対応を取ることができます。

DDoS攻撃の被害を未然に防ぐためには、定期的なログの監視と防御策の強化が重要です。これらの対策を実践し、サーバーの安全性を維持しましょう。

コメント

コメントする

目次