WAF とセキュリティ
WAF マネージドルールセット、カスタムファイアウォールルール、レート制限、攻撃対策モード、直リンク防止や国・User-Agent リストなどのアクセス制御を設定します。
各 CDN ドメインにはファイアウォールページがあり、エッジがそのドメインに適用するセキュリティポリシーを管理できます。CDN → CDN ドメインに移動し、ドメインを開いて ファイアウォールを選択します。コンソールの URL は /cdn/domains/<domain>/firewall です。
ファイアウォールページには 4 つのタブがあります。
| タブ | 用途 |
|---|---|
| ルール設定 | カスタムファイアウォールルール、WAF マネージドルールセット、カスタム WAF スコアリングルール |
| アクセス制御 | 直リンク防止、国・ASN によるブロック、User-Agent リスト、アクセス認証、攻撃対策モード(UAM)、接続保護 |
| WAF 分析 | ブロックなどのイベントに関する統計(ログと分析を参照) |
| イベントログ | ブロックまたはチャレンジされたリクエストごとの記録 |
保存すると、設定が自動的にエッジに送信されます。変更は通常、数秒から 1 分以内に反映され、キャッシュのパージは不要です。
WAF マネージドルールセット
WAF(Web アプリケーションファイアウォール)は、各リクエストの URI、クエリ文字列、User-Agent、Referer、Cookie を検査します。フォームおよび JSON のリクエストボディも検査し、一般的な攻撃ペイロードを検出します。
ファイアウォール → ルール設定を開き、WAF プリセットルールセットカードを探します。
カードのヘッダーにあるメインスイッチを有効にします。
カテゴリを展開し、個別のルールセットを有効または無効にします。
ルールセット 検出対象 SQL インジェクション SQL インジェクションのペイロード XSS クロスサイトスクリプティングのペイロード パストラバーサル ../形式のディレクトリトラバーサルコマンドインジェクション OS コマンドインジェクション LFI/RFI ローカルおよびリモートのファイルインクルード プロトコル攻撃 不正な形式または異常な HTTP リクエスト スキャナー検出 一般的な脆弱性スキャナー 悪意のあるボット 既知の悪意のあるクローラー CRS エンジン設定で、チェックモードを選択します。
- ブロック: 一致するリクエストを
403でブロックし、イベントを記録します。 - ログのみ: イベントを記録しますが、ブロックはしません。新しいルールを適用する前に、誤検知を確認するために使用します。
- ブロック: 一致するリクエストを
保存をクリックします。
異常スコアのしきい値は、スコアリングルールに適用されます。一致したルールごとにリクエストのスコアに加点され、スコアがしきい値に達するとリクエストがブロックされます。デフォルトは 5 です。値を小さくするほど判定が厳しくなります。
WAF の利用可否はプランによって異なります。執筆時点では、Professional および Enterprise の CDN プランに含まれ、Free および Starter プランには含まれていません。最新の詳細はプランページで確認してください。プランに WAF が含まれていない場合、スイッチを切り替えてもエッジには反映されません。
WAF を初めて有効にする際は、しばらくシミュレーションモードで運用してください。イベントログで、ブロック対象になる正当なリクエストがないか確認してから、有効モードに切り替えます。
カスタム WAF スコアリングルール
マネージドルールセットで要件を満たせない場合は、カスタム WAF ルール、スコアリングカードでルールを追加します。
- 検査対象: URI(クエリ文字列を含む)、パス、クエリパラメーター、リクエストボディ、リクエストヘッダー、Cookie、User-Agent、メソッドです。ヘッダーと Cookie には名前を指定できます。
- 一致の種類: 正規表現、SQL インジェクション(libinjection)、XSS(libinjection)です。
- アクション:
- ブロック: 即座にブロックします。ステータスコードを指定でき、デフォルトは
403です。 - ログ(スコア): ルールのスコアをリクエストに加算します。合計スコアが異常スコアのしきい値に達すると、リクエストがブロックされます。
- ブロック: 即座にブロックします。ステータスコードを指定でき、デフォルトは
カスタムファイアウォールルール
カスタムファイアウォールルールは、条件とアクションを組み合わせたものです。IP アドレスのブロック、特定の国からのトラフィックのみの許可、ログインエンドポイントの保護などによく使用します。
ルールの作成
- ルールで ルールを追加をクリックします。
- 名前を入力します。優先度は 1 から 9999 まで指定でき、デフォルトは 100 です。
- 条件を 1 つ以上追加します。各条件にはフィールド、任意のキー、演算子、値があります。リクエストが条件をすべて満たす場合にのみ、ルールに一致します。
- アクションを選択し、その設定を入力します。
- 保存します。一覧からいつでもルールを有効化、無効化、削除できます。
フィールド
| フィールド | 説明 |
|---|---|
| IP アドレス | クライアント IP です。「リストに含まれる」では、各値に単一の IP または CIDR 範囲を指定できます |
| 国コード | US や DE などの ISO 3166-1 alpha-2 コードです |
| ASN | 13335 などの自律システム番号です |
| URI パス / パス | クエリ文字列を含まないリクエストパスです |
| Host | リクエストされたホスト名です |
| メソッド | GET、POST などです |
| User-Agent / Referer | 対応するリクエストヘッダーです |
| ヘッダー / Cookie / クエリパラメーター | キーフィールドに名前を入力します |
| 拡張子 | jpg などのファイル拡張子です |
使用できる演算子は、等しい、等しくない、含む、含まない、前方一致、後方一致、リストに含まれる、リストに含まれない、正規表現一致、より大きい・小さい(以上・以下を含む)、存在する、存在しないです。リスト演算子では、各値を 1 行ずつ入力してください。
国と ASN はクライアント IP アドレスから判定します。IP を対応付けられない場合、それらのフィールドの条件には一致しません。
アクション
| アクション | 効果 |
|---|---|
| ブロック | エラーレスポンスを返します。400 から 599 までのステータスコードを指定でき、デフォルトは 403 です |
| 許可 | WAF と残りのルールをスキップします。信頼できる IP やコールバックエンドポイントに使用します |
| JS チャレンジ / マネージドチャレンジ | 攻撃対策モードと同じ仕組みで、訪問者にブラウザー検証ページを表示します。検証を通過した訪問者は、通過の有効期限が切れるまで再度チャレンジされません |
| レート制限 | 一致するリクエストをカウントし、上限を超えた場合にアクションを実行します(以下を参照) |
1 つのリクエストが複数のルールに一致することがあります。同じ範囲に対して許可とブロックを指定するなど、条件が重複しアクションが競合するルールを有効にしないでください。期待どおりの結果にならない可能性があります。
API の例
サブネットをブロックします。
curl -X POST "https://api.yeap.cloud/api/user/cdn/firewall-rules/create" \
-H "Authorization: Bearer <token>" \
-H "Content-Type: application/json" \
-d '{
"domain_id": 123,
"name": "Block bad subnet",
"expression": {"op": "and", "conditions": [
{"collection": "IP", "op": "in", "var": ["203.0.113.0/24"]}
]},
"action": "block",
"action_config": {"status": 403},
"priority": 100,
"enabled": true
}'その他のエンドポイント:
- ルールの一覧取得:
GET /api/user/cdn/firewall-rules?domain_id=123 - ルールの更新:
POST /api/user/cdn/firewall-rules/update。ボディにidを指定します - ルールの削除:
DELETE /api/user/cdn/firewall-rules/delete?id=<id>
レート制限
トラフィックにレート制限を適用するには、レート制限アクションを持つファイアウォールルールを作成します。条件を使用し、/api/login で始まるパスなど、保護するリクエストを選択します。その後、次の項目を設定します。
- 秒: 時間枠内のカウントが上限を超えると、制限超過になります。
- キー: IP アドレス、リクエストヘッダー、Cookie、URI パス、国です。ヘッダーと Cookie の場合は、
X-Api-Keyなどの名前も入力します。 - スコープ: ドメイン全体では、IP ごとに 1 つなど、キーの値ごとに個別のカウンターを保持します。グローバルでは、ルールに一致するすべてのリクエストに 1 つのカウンターを使用します。
- 上限超過時の動作:
429でブロック、チャレンジ、ログのみ、ターピットから選択します。ターピットはレスポンスを遅延させますが、拒否はしません。
各エッジ拠点はそれぞれ独立したカウンターを保持します。クライアントのリクエストが複数の拠点に分散される場合、ネットワーク全体で許可される合計数が拠点ごとの上限を超えることがあります。
アクセス制御
アクセス制御タブには、複数の専用モジュールがあります。各モジュールには独自のスイッチがあります。設定が完了したら、アクセス制御を保存をクリックしてすべて保存します。
直リンク防止(Referer リスト)
- 空の Referer を許可と同一ドメインを許可: 直接のアクセスと、自分のサイトからのリンクを許可します。
- 許可するドメイン: 1 行に 1 つ入力します。完全なドメイン名、
*.example.comなどのワイルドカード、~で始まる正規表現を使用できます。このリストが空でない場合、Referer はいずれかの項目に一致する必要があります。 - ブロックするドメイン: 一致するリクエストをブロックします。このリストは許可リストよりも優先されます。
- 保護する拡張子:
.jpgや.mp4など、特定のファイル形式だけを保護対象にします。空欄にするとすべてのパスを保護します。
国 / ASN によるブロック
国、行政区画(ISO 3166-2 コード)、ASN について、ブロックリストと許可リストを 1 行に 1 項目ずつ設定します。ブロックリストに一致するとブロックされます。ある分類の許可リストが空でない場合、そのリストに含まれる訪問者のみが許可されます。複数の分類を使用する場合、訪問者はすべての分類の条件を通過する必要があります。
User-Agent リスト
デフォルトのアクション、空の User-Agent の処理方法、ブロック時のステータスコードを設定し、ルールを追加します。デフォルトを許可にするとブロックリストとして、ブロックにすると許可リストとして機能します。ルールは上から順に確認され、最初に一致したルールによって結果が決まります。部分文字列、ワイルドカード、正規表現、完全一致、前方一致、後方一致を使用できます。
アクセス認証
CIDR 範囲に対応した IP 許可リストと拒否リストを設定できます。HTTP Basic 認証、トークンパラメーター、署名付き URL(タイプ A、B、C、D)を必須にすることもできます。複数の方式を設定する場合は、リクエストがすべての方式を通過する必要があるか、いずれか 1 つを通過すればよいかを選択します。
攻撃対策モード(UAM)
| モード | 動作 |
|---|---|
| オフ | 事前のチャレンジを行いません |
| 適応型 | 通常はチャレンジを行いません。プラットフォームの自動保護が異常なトラフィックを検出した場合にのみ、訪問者にチャレンジを行います |
| 攻撃中(5 秒シールド) | すべての訪問者が、最初にブラウザー検証(プルーフ・オブ・ワーク)を通過する必要があります |
| CAPTCHA を強制 | すべての訪問者が CAPTCHA を解く必要があります。captcha.la に対応しており、Site Key と Secret を入力する必要があります。未入力の場合、代わりにブラウザー検証が行われます |
秒(5 以上を推奨)、難易度(15 以上を推奨)、秒を調整できます。0 を入力するとデフォルト値を使用します。許可リストの IP/CIDR は、すべてのモードでチャレンジをスキップします。静的ファイルの拡張子と許可するボットの ASN は適応型モードでのみ適用され、攻撃中モードと CAPTCHA の強制では無視されます。
大量のリクエストを送り付ける攻撃を受けている間は、攻撃中モードに切り替えてください。攻撃が終わったら、API クライアントや検索エンジンのクローラーに影響しないよう、オフまたは適応型に戻してください。
接続保護(Slowloris)
IP ごとの同時接続数を制限し、低速リクエスト攻撃を検出します。ボディの最小転送速度、サンプリング時間枠、猶予期間、最大アイドル時間、ボディの最大受信時間を設定できます。0 を入力すると制限なしになります。