
第7回 iptablesでできるDoS/DDoS対策
| この連載では、初心者にとってハードルの高いiptablesの設定を、テンプレートを用いながら紹介していきます。「習うより慣れよ!」の精神でまず試してみてはいかがでしょう。(編集部) |
鶴長 鎮一
2010/7/14
はじめに
今回はDoS/DDoS対策を紹介します。今回はiptablesを使った方法とともに、Linuxのカーネルパラメータを使った方法も紹介します。
| 関連リンク: | |
| Linuxで作るファイアウォール[パケットフィルタリング設定編] http://www.atmarkit.co.jp/flinux/rensai/security05/security05a.html |
|
| 連載記事 「習うより慣れろ! iptablesテンプレート集」 http://www.atmarkit.co.jp/flinux/index/indexfiles/iptablesindex.html |
|
| 連載記事 「習うより慣れろ! iptablesテンプレート集 改訂版」 http://www.atmarkit.co.jp/flinux/index/indexfiles/newiptablesindex.html |
|
DoS/DDoS対策の難しさ
DoS攻撃(Denial of Service attacks)はネットワークの帯域を消費するほか、大量のリクエストでサーバのコネクションを食いつぶし、サーバを利用不能に陥れます。またパスワードを解読しようと総当たりで接続を試みるブルートフォース(Brute Force)攻撃も横行しています。
攻撃元が1台のホストならIPアドレスに基づいて規制できますが、攻撃元を特定できないDDoS(Distributed Denial of Service attacks)攻撃にはほかの手段が必要です。そこで、リクエスト応答回数に制限を設けるといった対策を実施します。
2通りの対策方法
パケットをカウントし回数で制限するのに、iptablesには2種類のモジュールが用意されています。
1つは、第1回でログの出力を抑制するために使用した「limit」モジュールです。パケットをカウントし、回数に応じて制限を実施します。ただし送信元のIPアドレスで回数制限を加えるには、対象のIPアドレスを都度指定しiptablesを実行する必要があります。そのため送信元を特定できないDDoS攻撃には役立ちません。
もう1つの「hashlimit」モジュールなら、クライアントのIPアドレスごとにパケット数をカウントし、iptables実行時にクライアントごとに制限を実施することができます。その際、個々のIPアドレスを指定する必要もありません。
今回は、次の3つのDoS/DDoS対策方法を解説します。
テンプレート12 |
![]() |
|||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||
| テンプレート12の表示(このウィンドウで開く) テンプレート12の表示(別ウィンドウで開く) テンプレート12(template12.sh)のダウンロード |
■テンプレート12の解説
いままでのテンプレートでは、Linuxサーバに対してpingに対する応答やssh接続許可を、特定のホストに限定していました。しかし運用の都合上ホストを限定できない場合もあります。そこで、クライアントのIPアドレスで規制を掛ける代わりに応答回数に制限を設けることで、リスクを低減します。
テンプレート12ではICMP Pingエコーの応答回数を、最大10回(10回リクエストに応答した後は1分に1回)に制限しています。「--limit-burst 10」で最大応答回数を10回としています。10回までは無条件に応答し、11回目の応答は破棄されます。
ただし「--limit 1/m」と指定することで、1分経過するごとに1回の応答が可能になり、もし10分間pingエコーが行われなければ、再び10回までリクエストに応じられるようになります。「--limit 2/m」と指定すれば、1/2分、すなわち30秒に1回の接続が可能になります。
20回までは無制限、それ以降は1分に5回ずつ応答するには「--limit 5/m --limit-burst 20」と設定します。「/m」のほかには「/s(1秒当たり)」「/h(1時間当たり)」といった単位が用意されています。
|
|
| pingエコーの応答を制限する(10回リクエストに応答した後は1分に1回) |
テンプレート12では、受信パケット(INPUT)に関するデフォルトルールをDROPとし、破棄しています。ただしステートフル性を確認し、サーバのリクエストに対する受信パケットは許可しています。そのため、28行目のiptablesのマッチしないパケットは破棄されます。しかしデフォルトルールをACCEPTに設定している場合は、次のようにiptablesを実行し、制限に漏れたものを破棄する必要があります。
|
|
| INPUTチェインのデフォルトルールをACCEPTにしている場合の追加設定 |
pingエコー以外のものにも応答回数を制限することができます。例えばSSHサービスに対するリクエストに制限を実施するには、「--dport 22」とSSHのサービスポート番号「22番」を指定します。ssh接続中のパケットは規制しないよう、ssh接続開始時のリクエストパケットだけを制限するため「-m state --syn --state NEW」と指定します。そのほか、WWWサービスのリクエストを制限するには、サービスポート番号を変えて「--dport 80」のように指定します。そのほかのサービスにもポート番号を変えることで対応できます。
パケットの規制は「-m limit --limit 1/m --limit-burst 1」としています。1分間に1回までssh接続が可能です。パスワードのタイプミスなどでログインに失敗すると、その後1分間はリクエストを受け付けません。パスワードを総当たりで解析するブルートフォース(Brute force)攻撃には有効です。
|
|
| ssh接続リクエストに対し1分間に1接続に限定 |
pingエコーのときと同様に、受信(INPUT)パケットのデフォルトルールをACCEPTに設定している場合は、次のようなiptablesの実行が必要です。
|
|
| INPUTチェインのデフォルトルールをACCEPTにしている場合の追加設定 |
limitモジュールの制限では、正常なリクエストも不正アクセスに紛れてしまいます。クライアントごとにリクエスト回数を制限するには、次に紹介するテンプレート13のhashlimitモジュールを使用します。
| 第6回へ | 1/3 |
|
||||||
|
||||||
| 連載 習うより慣れろ! iptablesテンプレート集 |
| Linux Squareフォーラム セキュリティ関連記事 |
| 連載:習うより慣れろ! iptablesテンプレート集(全4回) 初心者にとって、iptablesは難しい。そこで、学習の第1歩としてテンプレートを自分の環境に適応させることから始めよう |
|
| 連載:ゼロから始めるLinuxセキュリティ(全11回) 奥が深いセキュリティ対策の世界をゼロから解説。ホストレベルのセキュリティからファイアウォール、IDSの構築、ログ管理方法まで、システム管理者必見 |
|
| 特集:WebDAV時代のセキュリティ対策[前編] WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる |
|
| 特集:FreeS/WANによるIPSecの導入と運用[前編] LinuxでIPSecを利用するには、「FreeS/WAN」というIPSecスタックを用いることになる。まず、これをインストールすることから始めよう |
|
| 特集:Linux以外のIPSecスタックとの相互接続[前編] 別のOSや異なるIPSecスタックとの相互接続が可能なら、その用途は大幅に広がる。前編では、FreeBSDのKAMEと相互接続を試みる |
|
| 特集:sshでセキュアネットワーク サーバにリモートログインする場合は、暗号化して転送するsshを使おう。sshをサーバとクライアントにインストールすれば、インターネット上でも安全な通信が可能になる |
|
|
TechTargetジャパン
- 高速化に効くシステムコールが犠牲にするもの (2012/2/21)
プログラムの処理速度を上げるシステムコールは確かに存在するが、犠牲にしているものがあることを忘れてはいけない - Firefoxは「メモリ食い」という悪評を払拭できるか (2012/2/20)
Firefoxからユーザー離れが進んでます。メモリを浪費するというのがその理由。しかし、改善への取り組みが成果を上げています - クライアントがアクセスできる範囲を制限する (2012/2/10)
今回は、サーバ上のファイルの扱いに関係する設定項目について解説します - 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -

