カスタムルール
Access Control が粗い粒度のブロック(国、IP)を提供する一方で、カスタムルールでは正確なポリシーを表現できます: 「過去 60 秒で /cart を 10 回以上叩いている ASN 14061 からの空の user-agent を持つ訪問者をブロック」。
ルールの構造
ルールには 4 つの部分があります:
- 名前 — 自分の参照用
- 条件 — 1 つ以上、AND で結合
- アクション —
allow、challenge、block - 優先度 — 低い番号が勝ち。デフォルト 100。
ルールはスコアベースパイプラインの 前 に評価されます。いずれかのルールが一致すると、そのアクションが実行され、スコアリングがスキップされます。
条件
| フィールド | 演算子 | 値の例 |
|---|---|---|
ip |
equals、in CIDR | 203.0.113.0/24 |
country |
equals、in list | RU、[CN,KP,IR] |
asn |
equals、in list | 14061、[16509,14618] |
asn_org |
contains、regex | DigitalOcean |
user_agent |
contains、regex、empty | ^curl/ |
header.<name> |
exists、equals、regex | header.accept-language regex ^$ |
path |
equals、prefix、regex | /cart、prefix /account |
rate.requests |
gt within window | > 10 within 60s |
score |
gt、lt | > 50 |
正規表現は ^ と $ でアンカーされます。テストには regex101.com を使用。
例
チェックアウト隣接パス上のすべての空の user-agent をブロック:
| フィールド | Op | 値 |
|---|---|---|
user_agent |
empty | — |
path |
prefix | /checkout |
アクション: block。優先度: 50。
既知のデータセンター ASN から /cart を高速で叩く人をチャレンジ:
| フィールド | Op | 値 |
|---|---|---|
asn |
in list | [16509, 14618, 14061, 8075] |
path |
prefix | /cart |
rate.requests |
gt within | 5 within 30s |
アクション: challenge。優先度: 30。
疑わしく見えても監視サービスを許可:
| フィールド | Op | 値 |
|---|---|---|
header.x-monitor-key |
equals | <your-shared-secret> |
アクション: allow。優先度: 1。
制限
| プラン | ショップごとのルール | レートウィンドウストレージ |
|---|---|---|
| Scale | 25 ルール | 60s スライディングウィンドウ |
| Max | 100 ルール | 5min スライディングウィンドウ |
Free/Grow にカスタムルールはありません。
ルールのテスト
ルールをアクション monitor で 24 時間保存(エンフォースメントなし、マッチをログするだけ)。Visitor Analytics をチェック — reason = rule:<your-rule-name> でフィルタリング。マッチが正しく見えれば、アクションを block または challenge に切り替え。
利用可能なプラン
Scale ($49/月) と Max ($99/月)。