【Fortigate】DoSポリシーの設定と動作確認 FortiOS6.4.3

FortiGate は、インターフェースに届いた異常なトラフィックを検知して遮断できます。特に DoS(サービス拒否)攻撃のように、異常に多い通信が届いたときにそれを止めることで、その先のネットワークやサーバを守ります。この機能を使うには、DoS ポリシーを設定します。

この記事では、DoS ポリシーを設定し、ICMP Flood(大量の ping)を検知・遮断する動きを確認します。検証時の FortiOS は 6.4.3 です。

公開サーバFortiGateport1公開アドレス 10.0.0.100異常なトラフィックICMP Flood など攻撃元
図1 検証の構成。攻撃元から、FortiGate の port1 の公開アドレスに向けて異常なトラフィックを送る
この記事でわかること
  1. DoS ポリシーの対象(インターフェース・アドレス・サービス)の設定
  2. L3/L4 アノマリのロギング、アクション、しきい値の設定
  3. ICMP Flood を送って、アノマリログで検知を確認する方法

DoS ポリシーのしくみ

DoS ポリシーは、インターフェースに届いたトラフィックを調べ、攻撃を示す異常なパターン(アノマリ)がないかを見ます。DoS ポリシーはファイアウォールポリシーより先にチェックされるので、攻撃のトラフィックが、負荷の高いセキュリティの検査を動かして FortiGate を遅くするのを防げます。

パケットport1 に着信DoS ポリシーしきい値と比べるファイアウォールポリシーUTM など検査しきい値を超えたらブロック/モニタ(ログ)負荷の高い検査より前に、異常な通信をふるい落とす
図2 DoS ポリシーは、ファイアウォールポリシーより先にチェックされる

アノマリはあらかじめ用意されたもの(L3 アノマリ 2 種類、L4 アノマリ 16 種類)から選びます。アノマリごとに、次の3つを設定します。

項目内容
ロギングアノマリを検知したときにログを記録するかどうかです。アクションがブロックかモニタのときに記録されます。
アクション無効:このアノマリを調べません。
ブロック:異常なトラフィックを遮断します。
モニタ:トラフィックは通し、ロギングが有効ならログを記録します。
しきい値アクションを動かす基準です。アノマリによって、1秒あたりのパケット数やセッション数、または同時セッション数で決めます。

DoS ポリシーの設定

ポリシー&オブジェクト ›› IPv4 DoSポリシー を開き、新規作成 をクリックします。新規ポリシーの画面で、ポリシーの名前、対象の着信インターフェース、異常なトラフィックの種類を設定します。

補足

メニューに IPv4 DoSポリシー が表示されない場合は、システム ›› 表示機能設定 で DoS ポリシーを有効にします。

画面イメージについて

この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。

検知の対象を設定する

FortiGate 管理画面画面イメージ
IPv4 DoSポリシー ›› 新規ポリシー
1名前DoS-Policy
2着信インターフェースInternet (port1)
3送信元アドレスall
4宛先アドレスall
5サービスALL
図3 検知の対象の設定(実際の画面ではなく、設定する項目を示したイメージです)
No.項目設定する内容
1名前任意の名前です。今回は DoS-Policy にします。
2着信インターフェース検知の対象のトラフィックが届くインターフェースです。今回はインターネットにつながる port1 にします。
3送信元アドレス不特定の送信元を対象にするため、all にします。
4宛先アドレス攻撃の宛先を絞らないよう、all にします。
5サービスプロトコルを絞らず、ALL にします。
補足
  • 宛先アドレスは、FortiGate のインターフェースに関係するアドレス(インターフェースのアドレス、セカンダリアドレス、VIP のアドレスなど)にします。all にすると、それらをすべて対象にできます。
  • サービスは ALL でもかまいませんが、そのインターフェースで実際に応答するサービスだけにすると、FortiGate のリソースを節約できます。

L3 アノマリを設定する

L3 レベルのアノマリの検知を設定します。今回は、すべてのアノマリでロギングを ON にし、アクションをブロックにします。見出しの行(いちばん上の行)で設定すると、すべてのアノマリにまとめて適用されます。

FortiGate 管理画面画面イメージ
IPv4 DoSポリシー ›› 新規ポリシー
L3アノマリ
名前ロギングアクションしきい値
(すべて)1ON2○ 無効◉ ブロック○ モニタ
ip_src_sessionON○ 無効◉ ブロック○ モニタ5000
ip_dst_sessionON○ 無効◉ ブロック○ モニタ5000
図4 L3 アノマリの設定(実際の画面ではなく、設定する項目を示したイメージです)
アノマリアクションが動く条件推奨しきい値
ip_src_session1つの送信元 IP アドレスからの同時 IP セッション数がしきい値を超えた5000 セッション
ip_dst_session1つの宛先 IP アドレスへの同時 IP セッション数がしきい値を超えた5000 セッション

L4 アノマリを設定する

L4 レベルのアノマリの検知を設定します。L3 アノマリと同じように、見出しの行で、すべてのアノマリのロギングを ON に、アクションをブロックにします。

FortiGate 管理画面画面イメージ
IPv4 DoSポリシー ›› 新規ポリシー
L4アノマリ
名前ロギングアクションしきい値
(すべて)1ON2○ 無効◉ ブロック○ モニタ
tcp_syn_floodON○ 無効◉ ブロック○ モニタ2000
tcp_port_scanON○ 無効◉ ブロック○ モニタ1000
tcp_src_sessionON○ 無効◉ ブロック○ モニタ5000
tcp_dst_sessionON○ 無効◉ ブロック○ モニタ5000
udp_floodON○ 無効◉ ブロック○ モニタ2000
udp_scanON○ 無効◉ ブロック○ モニタ2000
udp_src_sessionON○ 無効◉ ブロック○ モニタ5000
udp_dst_sessionON○ 無効◉ ブロック○ モニタ5000
3icmp_floodON○ 無効◉ ブロック○ モニタ250
icmp_sweepON○ 無効◉ ブロック○ モニタ100
icmp_src_sessionON○ 無効◉ ブロック○ モニタ300
icmp_dst_sessionON○ 無効◉ ブロック○ モニタ1000
sctp_floodON○ 無効◉ ブロック○ モニタ2000
sctp_scanON○ 無効◉ ブロック○ モニタ1000
sctp_src_sessionON○ 無効◉ ブロック○ モニタ5000
sctp_dst_sessionON○ 無効◉ ブロック○ モニタ5000
図5 L4 アノマリの設定(実際の画面ではなく、設定する項目を示したイメージです。しきい値は初期値のままです)
アノマリアクションが動く条件推奨しきい値
tcp_syn_flood1つの宛先 IP アドレスへの、新しい TCP 接続の SYN パケットのレート(再送を含む)2000 パケット/秒
tcp_port_scan1つの送信元 IP アドレスからの、新しい TCP 接続の SYN パケットのレート(再送を含む)1000 パケット/秒
tcp_src_session1つの送信元 IP アドレスからの同時 TCP セッション数5000 セッション
tcp_dst_session1つの宛先 IP アドレスへの同時 TCP セッション数5000 セッション
udp_flood1つの宛先 IP アドレスへの UDP パケットのレート2000 パケット/秒
udp_scan1つの送信元 IP アドレスからの UDP セッションを作るレート2000 セッション/秒
udp_src_session1つの送信元 IP アドレスからの同時 UDP セッション数5000 セッション
udp_dst_session1つの宛先 IP アドレスへの同時 UDP セッション数5000 セッション
icmp_flood1つの宛先 IP アドレスへの ICMP パケットのレート250 パケット/秒
icmp_sweep1つの送信元 IP アドレスからの ICMP セッションを作るレート100 セッション/秒
icmp_src_session1つの送信元 IP アドレスからの同時 ICMP セッション数300 セッション
icmp_dst_session1つの宛先 IP アドレスへの同時 ICMP セッション数1000 セッション
sctp_flood1つの宛先 IP アドレスへの SCTP パケットのレート2000 パケット/秒
sctp_scan1つの送信元 IP アドレスからの SCTP セッションの数1000
sctp_src_session1つの送信元 IP アドレスからの同時 SCTP セッション数5000 セッション
sctp_dst_session1つの宛先 IP アドレスへの同時 SCTP セッション数5000 セッション

今回の検証で見る icmp_flood(図5 の 3)は、しきい値が 250 パケット/秒です。1つの宛先に 1 秒あたり 250 を超える ICMP パケットが届くと、ブロックされます。

補足:しきい値の考え方
  • 推奨しきい値は Fortinet の管理ガイドの値で、画面の初期値と同じです。実際の環境では、ふだんの通信量をモニタで確かめてから、ブロックに切り替えるのが安全です。
  • レート(パケット/秒)のアノマリでブロックしたときの動きは、config ips global の anomaly-mode で決まります。既定の continuous は、しきい値を超えている間はブロックを続けます。periodical は、検知後もしきい値の分だけ通します。

OK をクリックすると、DoS ポリシーが登録されます。

FortiGate 管理画面画面イメージ
ポリシー&オブジェクト ›› IPv4 DoSポリシー
ID名前インターフェース送信元アドレス宛先アドレスサービス
1DoS-PolicyInternet (port1)allallALL
図6 登録した DoS ポリシー(実際の画面ではなく、表示のポイントを示したイメージです)

動作確認

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 と記録されます。

FortiGate 管理画面画面イメージ
ログ&レポート ›› アノマリ
日付/時刻重大度送信元プロトコルアクションカウントアタック名
2021/01/20 …■■■■■(伏せています)11clear_session12icmp_flood
図7 アノマリログ(実際の画面ではなく、表示のポイントを示したイメージです。送信元の IP アドレスは伏せています)

ログをダブルクリックすると、詳細を確認できます。

ログ詳細画面イメージ
一般
日2021/01/20
セッションID0
バーチャルドメインroot
送信元/宛先
送信元 IP(伏せています)
送信元インターフェースInternet (port1)
宛先 IP10.0.0.100
プロトコル/サービス1 / PING
アクション
1アクションclear_session
脅威4096
2ポリシーIDDoS-Policy (1)
ポリシータイプDoS IPv4
セキュリティ
脅威レベルCritical
脅威スコア50
アノマリ
3アタック名icmp_flood
アタックID16777316
ICMPタイプ/コード0x08 / 0x00
カウント1
4メッセージanomaly: icmp_flood, 251 > threshold 250
図8 アノマリログの詳細(実際の画面ではなく、表示のポイントを示したイメージです。送信元の情報は伏せ、一部の項目は省いています)
No.表示意味
1clear_sessionアクションをブロックにしたアノマリで、トラフィックが遮断されたことを示します。
2DoS-Policy (1)STEP 1〜3 で作った DoS ポリシー(ID 1)で検知されています。
3icmp_flood検知したアノマリの名前です。
4251 > threshold 250ICMP パケットのレートが 251 となり、しきい値の 250 を超えたことがわかります。

まとめ

設定今回の値
対象着信インターフェース port1、送信元・宛先 all、サービス ALL
L3/L4 アノマリすべてロギング ON、アクションはブロック、しきい値は初期値
確認フラッド ping で icmp_flood(しきい値 250 パケット/秒)を超え、アノマリログに clear_session が記録された

DoS ポリシーは、ファイアウォールポリシーより先にチェックされます。外部に公開しているインターフェースに設定しておくと、異常に多い通信を早い段階で止められます。

コメント