導入文章
DoS(Denial of Service)攻撃は、Webサーバーに対して大量のリクエストを送り、サーバーのリソースを過剰に消費させることによってサービスを利用できなくする攻撃です。これにより、ユーザーがサイトにアクセスできなくなるだけでなく、サーバー自体のパフォーマンスが低下する可能性もあります。特にApacheサーバーを使用している場合、こうした攻撃に対する適切な防御が必要です。
そのために有効なツールの一つが「mod_evasive」です。このApacheモジュールは、DoS攻撃を防ぐために特定のIPアドレスからの異常なリクエストを検出し、自動的にブロックする機能を提供します。本記事では、mod_evasiveを使ってApacheサーバーでDoS攻撃を防ぐ方法を詳細に解説します。
mod_evasiveとは
mod_evasiveは、Apache HTTPサーバーに組み込むことで、DoS(Denial of Service)攻撃やDDoS(分散型DoS)攻撃からサーバーを守るためのモジュールです。主に、過剰なリクエストを送信する悪意のあるユーザーを特定し、そのIPアドレスからのアクセスを一時的に拒否することで、サーバーへの負荷を軽減します。
mod_evasiveの主な機能
mod_evasiveには、以下のような主な機能があります:
- リクエスト制限:同一IPアドレスからの短時間での過剰なリクエストを監視し、設定した制限を超えると一時的にブロックします。
- 攻撃のログ記録:攻撃者のIPアドレスや攻撃内容をログに記録し、後で分析できるようにします。
- IPアドレスの一時ブロック:規定のリクエスト回数を超えたIPアドレスに対して、指定した時間内アクセスを拒否します。
このように、mod_evasiveは、DoS攻撃からWebサーバーを保護するために非常に効果的なツールです。
mod_evasiveのインストール
mod_evasiveをApacheサーバーにインストールすることで、DoS攻撃の防止機能を簡単に追加できます。ここでは、一般的なLinuxディストリビューションにおけるインストール手順を説明します。
Debian/Ubuntu系のインストール方法
DebianやUbuntuなどのディストリビューションでは、aptパッケージマネージャーを使用してmod_evasiveをインストールできます。以下のコマンドを実行します:
sudo apt update
sudo apt install libapache2-mod-evasive
インストール後、Apacheサーバーを再起動してモジュールを有効にします:
sudo systemctl restart apache2
Red Hat/CentOS系のインストール方法
Red HatやCentOSなどのディストリビューションでは、yumまたはdnfパッケージマネージャーを使用してインストールできます。以下のコマンドを実行します:
sudo yum install mod_evasive
または
sudo dnf install mod_evasive
インストール後、Apacheを再起動してモジュールを有効にします:
sudo systemctl restart httpd
ソースからのインストール
もしパッケージマネージャーを使用できない環境である場合、ソースコードから直接mod_evasiveをインストールすることも可能です。以下の手順で進めます:
- mod_evasiveのソースコードをApacheの公式サイトやGitHubからダウンロードします。
- ダウンロードしたソースを展開し、コンパイルします:
tar -xvzf mod_evasive.tar.gz
cd mod_evasive
make
sudo make install
インストール後、Apacheの設定ファイルにmod_evasiveの設定を追加し、Apacheを再起動します。
これで、mod_evasiveのインストールが完了し、DoS攻撃を防ぐ準備が整いました。
mod_evasiveの設定
mod_evasiveをインストールした後、効果的にDoS攻撃を防ぐために、設定ファイルを調整する必要があります。ここでは、mod_evasiveの主な設定項目と、それらの設定方法について詳しく説明します。
設定ファイルの場所
mod_evasiveの設定は、通常、Apacheの設定ディレクトリ内の「mod_evasive.conf」またはApacheのメイン設定ファイル(httpd.conf
やapache2.conf
)で行います。設定ファイルがない場合は、新たに作成することも可能です。例えば、以下のように設定ファイルを作成します:
sudo nano /etc/apache2/mods-available/evasive.conf
主要な設定項目
mod_evasiveの設定は、以下の主要な項目で構成されています:
- DOSHashTableSize
設定するリクエスト数のハッシュテーブルサイズを指定します。デフォルト値は1000です。大規模なWebサイトでは、より高い値に設定することが推奨されます。
DOSHashTableSize 3097
- DOSPageCount
特定のページへのリクエストが許可される最大数を設定します。例えば、1秒間に5回以上同じURLへのアクセスがあった場合、そのIPをブロックします。
DOSPageCount 2
- DOSSiteCount
サイト全体に対するリクエスト数を設定します。この数を超えるリクエストが発生すると、そのIPはブロックされます。
DOSSiteCount 50
- DOSBlockingPeriod
攻撃が検出されたIPアドレスをブロックする時間(秒単位)を設定します。例えば、600秒(10分)間ブロックする設定は以下のようになります。
DOSBlockingPeriod 600
- DOSLogDir
攻撃者のIPアドレスや攻撃内容を記録するためのログディレクトリを指定します。デフォルトでは、/var/log/apache2
が使用されます。
DOSLogDir /var/log/apache2
- DOSEmailNotify
DoS攻撃が発生した際に、指定したメールアドレスに通知を送信する設定です。通知を受け取るためには、メールサーバーの設定が必要です。
DOSEmailNotify admin@example.com
設定ファイルの適用
設定を保存した後、Apacheサーバーに設定を適用するために、Apacheを再起動します。以下のコマンドを実行して、設定を反映させます:
sudo systemctl restart apache2 # Ubuntu/Debian
sudo systemctl restart httpd # CentOS/RedHat
これで、mod_evasiveが有効になり、DoS攻撃を効果的に防ぐための準備が整いました。
DoS攻撃の兆候とモニタリング
mod_evasiveを使用してDoS攻撃を防ぐためには、攻撃の兆候を早期に発見し、適切に対応することが重要です。ここでは、DoS攻撃の兆候を識別する方法と、それに対するモニタリング方法について説明します。
DoS攻撃の兆候
DoS攻撃を早期に発見するためには、サーバーログやリクエストパターンに注目することが重要です。以下は、DoS攻撃の兆候としてよく見られるものです:
- 異常に高いリクエスト数
短時間に同一IPアドレスから多くのリクエストが送られる場合、DoS攻撃の兆候である可能性があります。特に、同じURLやページへのアクセスが過剰に繰り返される場合は警戒が必要です。 - サーバーのレスポンス遅延
サーバーが過負荷になり、通常よりもレスポンスが遅くなることがあります。これは攻撃者がリソースを使い果たし、サーバーが正常にリクエストを処理できなくなっているサインです。 - ログファイルの異常
Apacheのエラーログやアクセスログに、特定のIPアドレスからの不審なリクエストが多数記録される場合も、DoS攻撃が行われている可能性を示唆します。
モニタリングツールの使用
DoS攻撃を効果的に監視するためには、以下のようなツールを活用すると良いでしょう:
- Apacheのログ分析
Apacheのアクセスログ(access.log
)を定期的にチェックし、特定のIPアドレスからのリクエスト数を監視します。例えば、grep
コマンドを使用して特定のIPアドレスからのリクエスト回数を数えることができます:
grep "192.168.1.100" /var/log/apache2/access.log | wc -l
- Mod_evasiveのログ
mod_evasiveは攻撃を検出すると、その情報をログファイルに記録します。これを定期的に監視し、異常なブロックイベントが発生していないかを確認します。ログファイルは通常、/var/log/apache2/evasive.log
などに保存されます。 - リアルタイムのモニタリングツール
サーバーのリソース状況をリアルタイムで監視するツール(例えば、top
、htop
、sar
)を使用して、サーバーの負荷やリクエスト数を監視します。異常な負荷の増加が見られた場合には、すぐに対処が必要です。
監視の自動化
DoS攻撃を自動的に監視するためには、ログ解析を自動化したり、異常が発生した場合に通知を受ける設定を行うことが効果的です。例えば、logwatch
やswatch
などのツールを使用して、Apacheのログを定期的に解析し、異常を検出することができます。
また、mod_evasiveのDOSEmailNotify
設定を使用して、DoS攻撃の兆候を早期にメールで通知することも有効です。
これらの方法を活用して、DoS攻撃を早期に検出し、迅速に対応することが可能になります。
mod_evasiveのチューニング
mod_evasiveは、DoS攻撃からサーバーを守る強力なツールですが、適切なチューニングを行わなければ、過剰なリクエストをブロックしすぎて、正当なユーザーのアクセスまで妨げてしまう可能性があります。ここでは、mod_evasiveを効果的に運用するためのチューニング方法について解説します。
リクエスト制限の調整
mod_evasiveは、特定のIPアドレスからのリクエスト数に基づいて攻撃を検出します。設定ファイルで指定したリクエスト数を超えると、そのIPアドレスをブロックしますが、過剰に厳しい設定をすると、通常のユーザーのリクエストもブロックされてしまうことがあります。そのため、リクエスト数の制限を適切に調整することが重要です。
例えば、以下のように設定します:
- DOSPageCount:1秒間に1ページに対する最大リクエスト数を設定します。例えば、同じページに1秒間に2回以上リクエストがある場合、そのIPをブロックします。
DOSPageCount 2
- DOSSiteCount:サイト全体に対するリクエスト数を設定します。例えば、1秒間にサイト全体で50回以上のリクエストが発生した場合、そのIPをブロックします。
DOSSiteCount 50
ブロック期間の調整
ブロック期間(DOSBlockingPeriod
)を適切に設定することも重要です。ブロック期間が短すぎると、攻撃が継続している場合に攻撃者が再度アクセスを試みる可能性があります。逆に、長すぎると正当なユーザーが不必要にブロックされることになります。一般的には、10分から30分程度のブロック期間が適切です。
例えば、以下のように設定します:
DOSBlockingPeriod 600 # 600秒(10分)間ブロック
ログの詳細度を調整する
mod_evasiveは、DoS攻撃を検出した際にログに詳細な情報を記録します。過剰なログ記録は、ディスクの消費やパフォーマンスに影響を与えることがあるため、ログの詳細度を調整することが必要です。DOSLogDir
ディレクティブでログファイルを指定し、必要な情報のみを記録するように設定します。
例えば、ログの保存場所とともに、必要な情報だけを記録する設定は次のようになります:
DOSLogDir /var/log/apache2/evasive
攻撃者の再試行を防ぐ
攻撃者が再度攻撃を行おうとするのを防ぐために、DOSAllow
設定を使用して、特定のIPアドレスをホワイトリストに追加することができます。これにより、正当なアクセス元をブロックせず、効率的に攻撃を防ぐことができます。
DOSAllow 192.168.1.100 # ホワイトリストに追加するIPアドレス
パフォーマンスの最適化
mod_evasiveはサーバーの負荷を軽減するために設計されていますが、過剰な設定はパフォーマンスに影響を与えることがあります。リクエスト数の制限やブロック期間の設定を慎重に調整し、サーバーが高いパフォーマンスを維持できるようにチューニングを行いましょう。
また、DOSHashTableSize
を大きく設定することで、より多くのリクエストを監視できるようになりますが、大規模なシステムの場合、パフォーマンスに与える影響も考慮する必要があります。
DOSHashTableSize 3097
チューニングのテストとモニタリング
設定を変更した後は、実際にシステムの動作をテストし、どのような影響が出るかを確認することが重要です。負荷テストを実施して、正常なトラフィックと攻撃トラフィックを模擬し、mod_evasiveの設定が適切に機能するかを確認します。
また、設定後はログの監視を続け、攻撃の兆候がないかを注意深くチェックしましょう。
実際の攻撃シナリオとmod_evasiveの効果
実際のDoS攻撃シナリオを想定し、mod_evasiveがどのように攻撃を検出し、サーバーを保護するのかを具体的に見ていきます。これにより、設定が適切に機能しているかを確認でき、mod_evasiveがどれほど効果的かが理解できます。
攻撃シナリオ1: 単一IPアドレスからの過剰リクエスト
最も一般的なDoS攻撃の一つは、単一のIPアドレスからの過剰なリクエストです。例えば、攻撃者があるURLに対して短期間で大量のリクエストを送り、サーバーのリソースを使い果たそうとします。このような攻撃をmod_evasiveはどのように処理するのかを見ていきましょう。
- 設定:
DOSPageCount 2
(1秒間に同じページに2回以上リクエストがあった場合にブロック)DOSBlockingPeriod 600
(攻撃者のIPを10分間ブロック)DOSSiteCount 50
(サイト全体で50回以上リクエストがある場合にブロック)- 攻撃の実行:
攻撃者が同じページに対して1秒間に5回のリクエストを送ります。 - mod_evasiveの反応:
mod_evasiveは、指定したDOSPageCount
を超えたリクエストを検出し、攻撃者のIPアドレスを即座にブロックします。攻撃者はそのIPアドレスで10分間Apacheサーバーにアクセスできなくなります。 - 効果:
サーバーのリソースは攻撃者によって消費されることなく、正当なユーザーのリクエストは引き続き処理されます。ログファイルには、攻撃者のIPアドレスとブロックイベントが記録されます。
攻撃シナリオ2: DDoS攻撃(分散型DoS攻撃)
DDoS攻撃では、複数のIPアドレスから同時にリクエストが送信され、サーバーに対して一斉に負荷がかかります。mod_evasiveは、複数のIPアドレスからの攻撃にも対応できますが、完全な防御のためには別途防御策が必要な場合もあります。
- 設定:
DOSSiteCount 50
DOSBlockingPeriod 600
- 攻撃の実行:
攻撃者がボットネットを使って複数のIPアドレスから攻撃を行います。各IPアドレスが短期間に多数のリクエストを送信します。 - mod_evasiveの反応:
mod_evasiveは、各IPアドレスからのリクエストが設定した制限を超えると、それらのIPアドレスを一時的にブロックします。しかし、DDoS攻撃の規模が非常に大きい場合、mod_evasiveだけでは完全に防ぎきれない可能性もあります。 - 効果:
一部の攻撃者のIPアドレスはブロックされ、サーバーの負荷は軽減されますが、DDoS攻撃に対してはより高度な防御策(例えば、CDNやWAFの導入)が必要になる場合もあります。
攻撃シナリオ3: 連続的なリクエストによるサーバー負荷
攻撃者が連続的に異なるページをリクエストし、サーバーに負荷をかけるケースです。この攻撃は単一のページに対する攻撃ではなく、全体的なサーバーリソースを狙います。
- 設定:
DOSSiteCount 50
(サイト全体で50回以上のリクエストを許容)DOSBlockingPeriod 600
- 攻撃の実行:
攻撃者がランダムに異なるページを1秒間に50回以上リクエストします。 - mod_evasiveの反応:
mod_evasiveは、設定したDOSSiteCount
を超えるリクエストを検出し、攻撃者のIPアドレスをブロックします。攻撃者は、サーバーにアクセスできなくなります。 - 効果:
サーバーの負荷は抑えられ、正当なユーザーは引き続きアクセスできます。mod_evasiveによって攻撃者はブロックされ、サーバーのリソースが守られます。
まとめ
実際の攻撃シナリオでは、mod_evasiveが効果的にDoS攻撃を防ぎ、サーバーを保護します。特に、単一IPアドレスからの過剰なリクエストに対しては非常に有効ですが、DDoS攻撃のように多くのIPアドレスから同時に攻撃が行われる場合、mod_evasiveだけでは完全な防御は難しいことがあります。このため、mod_evasiveは他のセキュリティ対策(例えば、CDNやWAF)と組み合わせて使用することが推奨されます。
まとめ
本記事では、ApacheサーバーにおけるDoS攻撃防止に有効なmod_evasiveモジュールの導入から設定方法、実際の攻撃シナリオでの効果までを詳しく解説しました。mod_evasiveは、過剰なリクエストを監視し、不正なアクセスをブロックすることによって、サーバーへのDoS攻撃を効果的に防止します。
設定では、リクエスト数やブロック期間の適切な調整が重要です。また、攻撃シナリオを通じて、mod_evasiveが実際の攻撃にどのように対応するかを理解しました。単一IPアドレスからの攻撃には非常に効果的ですが、大規模なDDoS攻撃には追加の防御策が必要であることも認識できました。
適切な設定とチューニングを行い、mod_evasiveを活用することで、Apacheサーバーのセキュリティを強化し、DoS攻撃から保護することが可能になります。
コメント