FortiGate は、インターフェースに届いた異常なトラフィックを検知して遮断できます。特に DoS(サービス拒否)攻撃のように、異常に多い通信が届いたときにそれを止めることで、その先のネットワークやサーバを守ります。この機能を使うには、DoS ポリシーを設定します。
この記事では、DoS ポリシーを設定し、ICMP Flood(大量の ping)を検知・遮断する動きを確認します。検証時の FortiOS は 6.4.3 です。
- DoS ポリシーの対象(インターフェース・アドレス・サービス)の設定
- L3/L4 アノマリのロギング、アクション、しきい値の設定
- ICMP Flood を送って、アノマリログで検知を確認する方法
DoS ポリシーのしくみ
DoS ポリシーは、インターフェースに届いたトラフィックを調べ、攻撃を示す異常なパターン(アノマリ)がないかを見ます。DoS ポリシーはファイアウォールポリシーより先にチェックされるので、攻撃のトラフィックが、負荷の高いセキュリティの検査を動かして FortiGate を遅くするのを防げます。
アノマリはあらかじめ用意されたもの(L3 アノマリ 2 種類、L4 アノマリ 16 種類)から選びます。アノマリごとに、次の3つを設定します。
| 項目 | 内容 |
|---|---|
| ロギング | アノマリを検知したときにログを記録するかどうかです。アクションがブロックかモニタのときに記録されます。 |
| アクション | 無効:このアノマリを調べません。ブロック:異常なトラフィックを遮断します。モニタ:トラフィックは通し、ロギングが有効ならログを記録します。 |
| しきい値 | アクションを動かす基準です。アノマリによって、1秒あたりのパケット数やセッション数、または同時セッション数で決めます。 |
DoS ポリシーの設定
ポリシー&オブジェクト ›› IPv4 DoSポリシー を開き、新規作成 をクリックします。新規ポリシーの画面で、ポリシーの名前、対象の着信インターフェース、異常なトラフィックの種類を設定します。
メニューに IPv4 DoSポリシー が表示されない場合は、システム ›› 表示機能設定 で DoS ポリシーを有効にします。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
検知の対象を設定する
| 1名前 | DoS-Policy |
| 2着信インターフェース | Internet (port1) |
| 3送信元アドレス | all |
| 4宛先アドレス | all |
| 5サービス | ALL |
| No. | 項目 | 設定する内容 |
|---|---|---|
| 1 | 名前 | 任意の名前です。今回は DoS-Policy にします。 |
| 2 | 着信インターフェース | 検知の対象のトラフィックが届くインターフェースです。今回はインターネットにつながる port1 にします。 |
| 3 | 送信元アドレス | 不特定の送信元を対象にするため、all にします。 |
| 4 | 宛先アドレス | 攻撃の宛先を絞らないよう、all にします。 |
| 5 | サービス | プロトコルを絞らず、ALL にします。 |
- 宛先アドレスは、FortiGate のインターフェースに関係するアドレス(インターフェースのアドレス、セカンダリアドレス、VIP のアドレスなど)にします。
allにすると、それらをすべて対象にできます。 - サービスは
ALLでもかまいませんが、そのインターフェースで実際に応答するサービスだけにすると、FortiGate のリソースを節約できます。
L3 アノマリを設定する
L3 レベルのアノマリの検知を設定します。今回は、すべてのアノマリでロギングを ON にし、アクションをブロックにします。見出しの行(いちばん上の行)で設定すると、すべてのアノマリにまとめて適用されます。
| 名前 | ロギング | アクション | しきい値 |
|---|---|---|---|
| (すべて) | 1ON | 2○ 無効◉ ブロック○ モニタ | |
| ip_src_session | ON | ○ 無効◉ ブロック○ モニタ | 5000 |
| ip_dst_session | ON | ○ 無効◉ ブロック○ モニタ | 5000 |
| アノマリ | アクションが動く条件 | 推奨しきい値 |
|---|---|---|
| ip_src_session | 1つの送信元 IP アドレスからの同時 IP セッション数がしきい値を超えた | 5000 セッション |
| ip_dst_session | 1つの宛先 IP アドレスへの同時 IP セッション数がしきい値を超えた | 5000 セッション |
L4 アノマリを設定する
L4 レベルのアノマリの検知を設定します。L3 アノマリと同じように、見出しの行で、すべてのアノマリのロギングを ON に、アクションをブロックにします。
| 名前 | ロギング | アクション | しきい値 |
|---|---|---|---|
| (すべて) | 1ON | 2○ 無効◉ ブロック○ モニタ | |
| tcp_syn_flood | ON | ○ 無効◉ ブロック○ モニタ | 2000 |
| tcp_port_scan | ON | ○ 無効◉ ブロック○ モニタ | 1000 |
| tcp_src_session | ON | ○ 無効◉ ブロック○ モニタ | 5000 |
| tcp_dst_session | ON | ○ 無効◉ ブロック○ モニタ | 5000 |
| udp_flood | ON | ○ 無効◉ ブロック○ モニタ | 2000 |
| udp_scan | ON | ○ 無効◉ ブロック○ モニタ | 2000 |
| udp_src_session | ON | ○ 無効◉ ブロック○ モニタ | 5000 |
| udp_dst_session | ON | ○ 無効◉ ブロック○ モニタ | 5000 |
| 3icmp_flood | ON | ○ 無効◉ ブロック○ モニタ | 250 |
| icmp_sweep | ON | ○ 無効◉ ブロック○ モニタ | 100 |
| icmp_src_session | ON | ○ 無効◉ ブロック○ モニタ | 300 |
| icmp_dst_session | ON | ○ 無効◉ ブロック○ モニタ | 1000 |
| sctp_flood | ON | ○ 無効◉ ブロック○ モニタ | 2000 |
| sctp_scan | ON | ○ 無効◉ ブロック○ モニタ | 1000 |
| sctp_src_session | ON | ○ 無効◉ ブロック○ モニタ | 5000 |
| sctp_dst_session | ON | ○ 無効◉ ブロック○ モニタ | 5000 |
| アノマリ | アクションが動く条件 | 推奨しきい値 |
|---|---|---|
| tcp_syn_flood | 1つの宛先 IP アドレスへの、新しい TCP 接続の SYN パケットのレート(再送を含む) | 2000 パケット/秒 |
| tcp_port_scan | 1つの送信元 IP アドレスからの、新しい TCP 接続の SYN パケットのレート(再送を含む) | 1000 パケット/秒 |
| tcp_src_session | 1つの送信元 IP アドレスからの同時 TCP セッション数 | 5000 セッション |
| tcp_dst_session | 1つの宛先 IP アドレスへの同時 TCP セッション数 | 5000 セッション |
| udp_flood | 1つの宛先 IP アドレスへの UDP パケットのレート | 2000 パケット/秒 |
| udp_scan | 1つの送信元 IP アドレスからの UDP セッションを作るレート | 2000 セッション/秒 |
| udp_src_session | 1つの送信元 IP アドレスからの同時 UDP セッション数 | 5000 セッション |
| udp_dst_session | 1つの宛先 IP アドレスへの同時 UDP セッション数 | 5000 セッション |
| icmp_flood | 1つの宛先 IP アドレスへの ICMP パケットのレート | 250 パケット/秒 |
| icmp_sweep | 1つの送信元 IP アドレスからの ICMP セッションを作るレート | 100 セッション/秒 |
| icmp_src_session | 1つの送信元 IP アドレスからの同時 ICMP セッション数 | 300 セッション |
| icmp_dst_session | 1つの宛先 IP アドレスへの同時 ICMP セッション数 | 1000 セッション |
| sctp_flood | 1つの宛先 IP アドレスへの SCTP パケットのレート | 2000 パケット/秒 |
| sctp_scan | 1つの送信元 IP アドレスからの SCTP セッションの数 | 1000 |
| sctp_src_session | 1つの送信元 IP アドレスからの同時 SCTP セッション数 | 5000 セッション |
| sctp_dst_session | 1つの宛先 IP アドレスへの同時 SCTP セッション数 | 5000 セッション |
今回の検証で見る icmp_flood(図5 の 3)は、しきい値が 250 パケット/秒です。1つの宛先に 1 秒あたり 250 を超える ICMP パケットが届くと、ブロックされます。
- 推奨しきい値は Fortinet の管理ガイドの値で、画面の初期値と同じです。実際の環境では、ふだんの通信量をモニタで確かめてから、ブロックに切り替えるのが安全です。
- レート(パケット/秒)のアノマリでブロックしたときの動きは、
config ips globalのanomaly-modeで決まります。既定のcontinuousは、しきい値を超えている間はブロックを続けます。periodicalは、検知後もしきい値の分だけ通します。
OK をクリックすると、DoS ポリシーが登録されます。
| ID | 名前 | インターフェース | 送信元アドレス | 宛先アドレス | サービス |
|---|---|---|---|---|---|
| 1 | DoS-Policy | Internet (port1) | all | all | ALL |
動作確認
ICMP Flood を送る
Mac の端末から、ping の -f オプション(フラッド ping)で、FortiGate の port1 で公開している IP アドレスに大量の ICMP(ping)を送ります。-f は管理者権限が必要なので、sudo を付けて実行します。
フラッド ping は、自分が管理する機器へのテスト以外には絶対に使わないでください。
Mac(攻撃元の端末)
$ sudo ping -f 10.0.0.100 Password: PING 10.0.0.100 (10.0.0.100): 56 data bytes ..Request timeout for icmp_seq 0 ..Request timeout for icmp_seq 32 ..Request timeout for icmp_seq 58 ..Request timeout for icmp_seq 94 ..Request timeout for icmp_seq 137 ..Request timeout for icmp_seq 161 ..Request timeout for icmp_seq 168 ..Request timeout for icmp_seq 257
応答が返らない ping が多く、Request timeout が続けて表示されます。次の STEP のアノマリログで、FortiGate が ICMP をブロックしていたことを確かめます。
アノマリログを確認する
ログ&レポート ›› アノマリ を開くと、icmp_flood が検知され、アクションが clear_session になっています。DoS ポリシーでブロックしたトラフィックは、ログでは clear_session と記録されます。
| 日付/時刻 | 重大度 | 送信元 | プロトコル | アクション | カウント | アタック名 |
|---|---|---|---|---|---|---|
| 2021/01/20 … | ■■■■■ | (伏せています) | 1 | 1clear_session | 1 | 2icmp_flood |
ログをダブルクリックすると、詳細を確認できます。
| 日 | 2021/01/20 |
| セッションID | 0 |
| バーチャルドメイン | root |
| 送信元 IP | (伏せています) |
| 送信元インターフェース | Internet (port1) |
| 宛先 IP | 10.0.0.100 |
| プロトコル/サービス | 1 / PING |
| 1アクション | clear_session |
| 脅威 | 4096 |
| 2ポリシーID | DoS-Policy (1) |
| ポリシータイプ | DoS IPv4 |
| 脅威レベル | Critical |
| 脅威スコア | 50 |
| 3アタック名 | icmp_flood |
| アタックID | 16777316 |
| ICMPタイプ/コード | 0x08 / 0x00 |
| カウント | 1 |
| 4メッセージ | anomaly: icmp_flood, 251 > threshold 250 |
| No. | 表示 | 意味 |
|---|---|---|
| 1 | clear_session | アクションをブロックにしたアノマリで、トラフィックが遮断されたことを示します。 |
| 2 | DoS-Policy (1) | STEP 1〜3 で作った DoS ポリシー(ID 1)で検知されています。 |
| 3 | icmp_flood | 検知したアノマリの名前です。 |
| 4 | 251 > threshold 250 | ICMP パケットのレートが 251 となり、しきい値の 250 を超えたことがわかります。 |
まとめ
| 設定 | 今回の値 |
|---|---|
| 対象 | 着信インターフェース port1、送信元・宛先 all、サービス ALL |
| L3/L4 アノマリ | すべてロギング ON、アクションはブロック、しきい値は初期値 |
| 確認 | フラッド ping で icmp_flood(しきい値 250 パケット/秒)を超え、アノマリログに clear_session が記録された |
DoS ポリシーは、ファイアウォールポリシーより先にチェックされます。外部に公開しているインターフェースに設定しておくと、異常に多い通信を早い段階で止められます。
コメント