module

KemalWAF

Constants

AUDIT_LOG_MAX_SIZE_MB = (ENV.fetch("AUDIT_LOG_MAX_SIZE_MB", "50")).to_i
AUDIT_LOG_RETENTION_DAYS = (ENV.fetch("AUDIT_LOG_RETENTION_DAYS", "90")).to_i
BODY_LIMIT = (ENV.fetch("BODY_LIMIT_BYTES", "1048576")).to_i
BUFFER_POOL_SIZE = 256
CONFIG_FILE = ENV.fetch("WAF_CONFIG_FILE", "config/waf.yml")

Config file path

CRITICAL_POOL_CONNECTIONS = 10
DEFAULT_CLEANUP_INTERVAL_MINUTES = 1
DEFAULT_CLEANUP_INTERVAL_SEC = 300
DEFAULT_CLEANUP_MAX_AGE_MULTIPLIER = 2
DEFAULT_CONNECT_TIMEOUT_SEC = 10
DEFAULT_IDLE_POOL_TIMEOUT_MINUTES = 30
DEFAULT_IDLE_TIMEOUT_MINUTES = 5
DEFAULT_MANAGER_CLEANUP_INTERVAL_MINUTES = 5

Constants

DEFAULT_POOL_ACQUIRE_TIMEOUT_MS = 100

Constants

DEFAULT_POOL_FILL_DELAY_MS = 10
DEFAULT_READ_TIMEOUT_SEC = 30
DEFAULT_RETRY_BACKOFF_MS = 50

Constants

EFFECTIVE_HTTP_ENABLED = begin if config = @@config_loader.try(&.get_config) server_config = config.try(&.server) server_config ? server_config.http_enabled : HTTP_ENABLED else HTTP_ENABLED end end

Server configuration (from config file or env)

EFFECTIVE_HTTP_PORT = begin if config = @@config_loader.try(&.get_config) server_config = config.try(&.server) server_config ? server_config.http_port : HTTP_PORT else HTTP_PORT end end
EFFECTIVE_HTTPS_ENABLED = begin if config = @@config_loader.try(&.get_config) server_config = config.try(&.server) server_config ? server_config.https_enabled : HTTPS_ENABLED else HTTPS_ENABLED end end
EFFECTIVE_HTTPS_PORT = begin if config = @@config_loader.try(&.get_config) server_config = config.try(&.server) server_config ? server_config.https_port : HTTPS_PORT else HTTPS_PORT end end
EFFECTIVE_LOG_DIR = get_config_value("LOG_DIR", LOG_DIR)
EFFECTIVE_OBSERVE_MODE = (get_config_value("OBSERVE", OBSERVE_MODE ? "true" : "false")) == "true"
EFFECTIVE_RULE_DIR = get_config_value("RULE_DIR", RULE_DIR)
EFFECTIVE_UPSTREAM = get_config_value("UPSTREAM", UPSTREAM)

Effective configuration values (with env override) These are computed once at startup. For runtime changes, use config file hot-reload. Configuration priority: ENV > YAML config > defaults

EVICTION_MAX_DURATION_MS = 2
GEOIP_ALLOWED_COUNTRIES = ((ENV.fetch("GEOIP_ALLOWED_COUNTRIES", "")).split(',')).map(&.strip).reject(&.empty?)
GEOIP_BLOCKED_COUNTRIES = ((ENV.fetch("GEOIP_BLOCKED_COUNTRIES", "")).split(',')).map(&.strip).reject(&.empty?)
GEOIP_ENABLED = (ENV.fetch("GEOIP_ENABLED", "false")) == "true"

GeoIP filtering configuration

GEOIP_MMDB_FILE = ENV.fetch("GEOIP_MMDB_FILE", "")
HTTP_ENABLED = (ENV.fetch("HTTP_ENABLED", "true")) == "true"

Server configuration (HTTP/HTTPS)

HTTP_PORT = (ENV.fetch("HTTP_PORT", "3030")).to_i
HTTPS_ENABLED = (ENV.fetch("HTTPS_ENABLED", "false")) == "true"
HTTPS_PORT = (ENV.fetch("HTTPS_PORT", "3443")).to_i
IP_BLACKLIST_FILE = ENV.fetch("IP_BLACKLIST_FILE", "")
IP_FILTER_ENABLED = (ENV.fetch("IP_FILTER_ENABLED", "true")) == "true"

IP filtering configuration

IP_WHITELIST_FILE = ENV.fetch("IP_WHITELIST_FILE", "")
Log = ::Log.for("waf")
LOG_BATCH_SIZE = (ENV.fetch("LOG_BATCH_SIZE", "100")).to_i
LOG_DIR = ENV.fetch("LOG_DIR", "logs")

Logging configuration

LOG_ENABLE_AUDIT = (ENV.fetch("LOG_ENABLE_AUDIT", "true")) == "true"
LOG_FLUSH_INTERVAL_MS = (ENV.fetch("LOG_FLUSH_INTERVAL_MS", "1000")).to_i
LOG_MAX_SIZE_MB = (ENV.fetch("LOG_MAX_SIZE_MB", "100")).to_i
LOG_QUEUE_SIZE = (ENV.fetch("LOG_QUEUE_SIZE", "10000")).to_i
LOG_RETENTION_DAYS = (ENV.fetch("LOG_RETENTION_DAYS", "30")).to_i
MAX_ARGS = 64
MAX_COOKIES = 32
MAX_HEADERS = 64
MAX_VALUE_LENGTH = 8192
MAX_VARIABLE_VALUES = 128

Constants for buffer sizes

METRICS_BUFFER_SIZE = 100

Metrics buffer for batch updates

METRICS_FLUSH_INTERVAL = 500
OBSERVE_MODE = (ENV.fetch("OBSERVE", "false")) == "true"
PRESERVE_ORIGINAL_HOST = (ENV.fetch("PRESERVE_ORIGINAL_HOST", "false")) == "true"
RATE_LIMIT_BLOCK_DURATION_SEC = (ENV.fetch("RATE_LIMIT_BLOCK_DURATION_SEC", "300")).to_i
RATE_LIMIT_DEFAULT = (ENV.fetch("RATE_LIMIT_DEFAULT", "100000")).to_i
RATE_LIMIT_ENABLED = (ENV.fetch("RATE_LIMIT_ENABLED", "true")) == "true"

Rate limiting configuration

RATE_LIMIT_WINDOW_SEC = (ENV.fetch("RATE_LIMIT_WINDOW_SEC", "60")).to_i
RELOAD_INTERVAL = (ENV.fetch("RELOAD_INTERVAL_SEC", "5")).to_i
RULE_DIR = ENV.fetch("RULE_DIR", "rules")

Configuration

SHARD_COUNT = 64

Constants

TLS_AUTO_GENERATE = (ENV.fetch("TLS_AUTO_GENERATE", "false")) == "true"
TLS_CERT_FILE = ENV.fetch("TLS_CERT_FILE", "")

TLS configuration

TLS_KEY_FILE = ENV.fetch("TLS_KEY_FILE", "")
TRACE_POINTS_COUNT = 12
UPSTREAM = ENV.fetch("UPSTREAM", "http://localhost:8080")
UPSTREAM_HOST_HEADER = ENV.fetch("UPSTREAM_HOST_HEADER", "")

Class methods

add_http_only_domain(domain : String)
Source
audit_logger
Source
config_loader
Source
create_initial_certificates

Create initial SSL certificates for domains with letsencrypt_enabled: true

Source
evaluator
Source
geoip_filter
Source
get_config_value(env_key : String, default_value : String) : String

Get values with environment variable override

Source
http_only_domains
Source
ip_filter
Source
is_http_only_domain?(domain : String) : Bool
Source
letsencrypt_manager
Source
metrics

Getter metodları

Source
pool_manager
Source
proxy_client
Source
rate_limiter
Source
reload_config

Config reload method - graceful reload

Source
rule_loader
Source
shutdown
Source
sni_manager
Source
structured_logger
Source
tls_manager
Source

Nested types