1. Problem Statement

Internet là môi trường thù địch mặc định: bot chiếm phần lớn traffic của nhiều site, credential stuffing chạy 24/7, scraper hút catalog, và thi thoảng một chiến dịch DDoS thật sự. Nếu mỗi service tự xử lý các mối lo này, ta có N bản cài đặt lệch nhau của cùng các phòng thủ (11.1 §2 — cùng lý do tập trung AuthN). Biên (edge) tồn tại để gom các mối quan tâm cắt ngang về một tuyến phòng thủ có tầng — để service phía sau tập trung vào nghiệp vụ, và để “một chỗ vá” khi có chuyện.

2. Kiến trúc biên — các tầng và phân vai

flowchart LR
    NET[Internet] --> CDN["CDN + DDoS absorb<br/>(L3/4 volumetric chết ở đây<br/>— băng thông của họ, không của bạn)"]
    CDN --> WAF["WAF<br/>lọc mẫu tấn công L7:<br/>SQLi, XSS, bot signature"]
    WAF --> GW["API Gateway<br/>TLS, verify token (11.2),<br/>rate limit, routing, quota"]
    GW --> S1[Service A] & S2[Service B]
    S1 & S2 -.->|"AuthZ dữ liệu + validate input<br/>VẪN ở service — defense in depth"| DB[(Data)]

Nguyên tắc phân vai: biên lọc cái chung (mẫu tấn công, danh tính, tần suất); service giữ cái riêng (chủ quyền dữ liệu, logic nghiệp vụ). Biên là lớp giảm tải, không phải lớp thay thế — mọi service vẫn phải validate input và check owner như thể không có biên (README §1 — defense in depth): WAF bị bypass (luôn có cách), gateway cấu hình sót một route — lớp trong phải tự đứng được.

API Gateway gom: TLS termination, verify JWT (11.2 §6 — cache JWKS), AuthZ thô theo route (11.1 §3), rate limit/quota, request validation theo schema, và routing (12.6 — nơi nó xuất hiện trong tiến hóa). Ranh giới đạo đức của gateway: điều phối, không nghiệp vụ — gateway bắt đầu chứa if-else theo domain là bắt đầu thành God Service kiêm SPOF logic (6.7 §8 — cùng bệnh với orchestrator phình).

WAF lọc mẫu tấn công đã biết ở L7 (SQLi, XSS, path traversal, bot signature). Sự thật thực dụng: WAF là lưới giảm nhiễu và câu giờ (chặn khai thác hàng loạt lỗ hổng vừa công bố trong lúc bạn vá — giá trị thật và đo được), không phải bằng chứng an toàn — app tự vá lỗi injection bằng parameterized query/escape đúng ở tầng code, WAF chỉ là lớp ngoài của defense in depth. Chế độ triển khai: bắt đầu detect-only, xem false positive trên traffic thật (một rule quá tay chặn nhầm form hợp lệ = mất đơn hàng thật), rồi mới block dần theo rule.

3. Rate Limiting — thuật toán, khóa, và phản hồi

Rate limiting phục vụ cả security lẫn reliability (13.1 — thundering herd, 13.3 — retry storm) — cùng một cơ chế, hai người hưởng.

  • Thuật toán: token bucket là mặc định đúng — cho burst có trần (bucket đầy) + tốc độ dài hạn (tốc độ nạp token): khớp hành vi thật của client tốt hơn fixed window (bùng đôi ở ranh giới cửa sổ) và mượt hơn sliding window log (đắt bộ nhớ). Cài đặt phân tán: Redis + Lua script atomic (5.4 §7 — đúng việc của nó); chấp nhận xấp xỉ khi cần rẻ (đếm per-node × hệ số) — rate limit là công cụ chặn lạm dụng, không phải sổ kế toán.
  • Khóa theo gì — quyết định quan trọng hơn thuật toán: theo IP (thô — NAT/CGNAT gom nghìn user một IP, 2.2 §6 — cùng bẫy với sticky IP), theo user/API key (đúng nhất khi đã AuthN), theo tenant (SaaS — chống noisy neighbor, Phần 14 — SaaS case), và xếp tầng: chưa đăng nhập → IP chặt; đã đăng nhập → theo user rộng hơn; endpoint nhạy (login, OTP, đặt hàng) → thêm giới hạn riêng chặt hơn nữa (11.1 §2 — chống credential stuffing).
  • Phản hồi tử tế: 429 + Retry-After (có jitter — dạy client cư xử, 13.1 §case 3) + header quota còn lại — client tốt tự điều tiết, đỡ cho cả hai bên; và phân biệt limit (chặn lạm dụng) với quota (gói thương mại) — cùng cơ chế, khác chính sách và khác thông điệp lỗi.

4. Trade-off

Quyết địnhĐượcGiá
Gateway tập trungMột chỗ đúng cho mối quan tâm chung; service gọnThêm một hop (+ms); SPOF tiềm năng — gateway phải HA và mỏng; nguy cơ phình thành God Service
WAF managed (CDN-tích-hợp)Rule cập nhật hộ, DDoS absorb kèmBill + false positive phải tự tune; ảo giác “có WAF là an toàn”
Rate limit chính xác (Redis tập trung)Đúng từng requestMọi request thêm một lượt Redis — chính nó thành bottleneck/SPOF; cần local cache + fail-open có chủ đích
Fail-open vs fail-closed khi tầng biên lỗiOpen: user không bị chặn oan; Closed: an toàn tuyệt đốiOpen: cửa sổ không phòng thủ; Closed: sự cố biên = sập toàn bộ. Chọn theo endpoint: login/OTP fail-closed, browse fail-open — quyết định trước, thành config (12.10 — quyết lúc bình tĩnh)

5. Production Considerations

  • Biên là điểm quan sát an ninh số một: tỷ lệ 429/403/401 theo endpoint và theo nguồn, top IP/user bị chặn, mẫu WAF khớp — dashboard riêng, alert theo đột biến (credential stuffing hiện hình là 401 tăng vọt ở login — 10.3 §2).
  • Đừng để rate limit làm mù chính mình: health check, probe của monitoring phải được miễn/khóa riêng — kịch bản “monitoring bị chính rate limit chặn đúng lúc sự cố” có thật và cay đắng.
  • Gateway HA như LB (2.2 §6 — LB tự dựng một node): nhiều replica, và config gateway là code (version, review, rollback — một dòng route sai ở đây có bán kính bằng cả hệ thống).
  • Diễn tập tầng biên: giả lập chiến dịch bot ở staging (kịch bản credential stuffing, scraping) — xem tầng nào bắt được ở đâu, con số nào nhảy trên dashboard; phòng thủ chưa từng thấy tấn công là phòng thủ trên giấy (12.10 tinh thần drill).
  • DDoS thật sự lớn: việc của CDN/provider (băng thông của họ tính bằng Tbps) — kế hoạch của bạn là bật chế độ under-attack và liên hệ họ, không phải tự đỡ; ghi số hotline vào runbook.

6. Anti-patterns

  • Nghiệp vụ trong gateway (kiểm tra tồn kho, tính giá ở “middleware chung”) — God Service tái sinh ở biên: mọi thay đổi nghiệp vụ đi qua đội gateway, và gateway deploy là cả công ty nín thở.
  • Chỉ có biên, ruột rỗng: qua được gateway là service tin tuyệt đối — một SSRF/misconfig nội bộ là toàn mạng thất thủ; defense in depth không phải khẩu hiệu (11.1 §6 — service tin nhau mù).
  • Rate limit một con số toàn cục (“1000 req/phút cho mọi API”) — quá chặt cho browse, quá lỏng cho login; limit là chính sách per-endpoint-class.
  • WAF bật full-block ngày đầu trên traffic thật — false positive chặn khách thật, và bài học được rút bằng doanh thu.
  • Miễn trừ nội bộ vĩnh viễn (“IP văn phòng bỏ qua mọi limit”) — VPN văn phòng bị chiếm là mọi phòng thủ thành trang trí; miễn trừ cũng có vòng đời và audit.
  • Chặn im lặng (drop) thay vì 429 có Retry-After với client hợp pháp — client không biết gì, retry dày hơn, hai bên cùng thiệt (13.3).

7. Khi nào đơn giản là đủ

App nhỏ một service: CDN phổ thông (đã kèm DDoS cơ bản + WAF rule sẵn) + rate limit bằng middleware trong app (thư viện có sẵn của framework) + reverse proxy làm TLS — ba việc một buổi chiều, phủ 80% rủi ro biên (12.1). API Gateway đúng nghĩa kích hoạt cùng microservices (12.6); WAF tune sâu và bot management kích hoạt khi có thứ đáng cào (catalog, giá) hoặc compliance yêu cầu. Như toàn bộ tài liệu này: biên mọc theo giá trị tài sản phía sau nó — và lớp không bao giờ được bỏ qua vẫn là lớp trong cùng: query có owner, input được validate, secret không nằm trong code.


Hết Phần 11. Quay lại mục lục chính.