Artica Wiki

Artica EdgeGuard Architecture

Artica EdgeGuard is an enterprise-grade Web Application Firewall (WAF) that protects web applications against OWASP Top 10 attacks, bots, DDoS, and advanced threats.

Artica EdgeGuard is an enterprise-grade Web Application Firewall (WAF) that protects web applications against OWASP Top 10 attacks, bots, DDoS, and advanced threats. 
It provides 145+ security modules, a hierarchical multi-tenant configuration, compliance reporting.

Architecture

Components

Configuration Hierarchy

All security settings follow a four-level inheritance model:

Global Settings → Group Settings → Tenant Settings → Path Rules
 

  • Global Settings 
    Organization-wide defaults for all websites
  • Groups 
    Cluster-level overrides (e.g., "Production EU", "Staging US")
  • Tenants 
    Per-website/domain settings (each tenant = one protected site)
  • Path Rules 
    URL-specific overrides (e.g., /api/* has different rules than /static/*)
166dca3c-d1a6-48aa-8315-0855d6cfb59e-photoroom.png

Security Modules (145+)

Attack Detection & Prevention (30 modules)

Category Modules
Injection Attacks SQLi, XSS, Command Injection, NoSQLi, LDAP Injection, XXE, SSTI, EL Injection, SSI, Log4Shell, SSRF, Deserialization, Prototype Pollution
Request Manipulation HTTP Smuggling, Header Injection, CRLF, HPP, Cache Poisoning, Open Redirect, Form Tampering
Encoding Evasion Double encoding, Unicode attacks, Path normalization, ReDoS protection
Advanced Attack chain correlation, Payload anomaly, Compression attacks, Timing attacks

Managed Challenge

EdgeGuard includes a Cloudflare-style managed challenge system:


ModSecurity Integration

EdgeGuard integrates with ModSecurity for defense-in-depth:

ModSecurity (CRS) → modsec_score → EdgeGuard Engine → Combined Decision
     ↓                                       ↓
  anomaly: 8                         internal: 7 → combined: 15 → Captcha

Storage

Store Purpose
PostgreSQL Central: persistent multi-tenant config, users, audit logs, events
SQLite Agent/Local: local config cache, hierarchy, settings
Valkey / Redis Runtime data: rate limit counters, sessions, challenge tokens, cache
Memcached Alternative to Valkey for runtime data

Communication Protocol

Nginx → Engine (Unix Socket, JSON)

Request:

{
  "tenant_id": 1,
  "client_ip": "192.168.1.100",
  "uri": "/api/login",
  "method": "POST",
  "query_string": "user=admin",
  "headers": {"User-Agent": "Mozilla/5.0..."},
  "body_preview": "...",
  "modsec_score": 0,
  "timestamp": 1702300000
}

Response:

{
  "action": "allow|block|redirect|captcha|challenge|rate_limit",
  "http_code": 403,
  "body": "<html>Blocked</html>",
  "body_type": "text/html",
  "headers": {"Retry-After": "60"},
  "cache": true,
  "cache_ttl": 60
}

Agent → Central (HTTPS + mTLS)

Nginx Module Directives

Directive Description
security_engine_socket <path> Unix socket path to the engine
security_engine_timeout <ms> Communication timeout
security_check on\\|off Enable/disable per location
security_tenant_id <int> Tenant identifier
security_fail_mode open\\|closed Behavior when engine is down
security_cache on\\|off Enable decision caching
security_modsec_score_var <$var> Nginx variable with ModSecurity anomaly score
security_body_preview_size <size> Max request body bytes sent to engine (default 4k)

Ports

Port Service Component
:8082 REST API v2 + Dashboard (HTTPS + mTLS) Central
:8080 Health checks (/health, /ready) Central, Agent
:9090 Prometheus metrics (/metrics) Central, Agent
:8083 Agent status API (/status) Agent
Unix socket Nginx ↔ Engine communication Agent, Local