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
audit_logger
Sourceconfig_loader
Sourcecreate_initial_certificates
Create initial SSL certificates for domains with letsencrypt_enabled: true
evaluator
Sourcegeoip_filter
SourceGet values with environment variable override
http_only_domains
Sourceip_filter
Sourceletsencrypt_manager
Sourcepool_manager
Sourceproxy_client
Sourcerate_limiter
Sourcerule_loader
Sourceshutdown
Sourcesni_manager
Sourcestructured_logger
Sourcetls_manager
SourceNested types
- KemalWAF::ACMEChallengeStore
- KemalWAF::AtomicSnapshotHolder
- KemalWAF::AuditLogMessage
- KemalWAF::AuditLogger
- KemalWAF::BoundedCache(K, V)
- KemalWAF::BoundedMap(K, V)
- KemalWAF::CIDRNetwork
- KemalWAF::ConfigLoader
- KemalWAF::ConnectionPool
- KemalWAF::ConnectionPoolManager
- KemalWAF::ConnectionPoolingConfig
- KemalWAF::DomainCertificate
- KemalWAF::DomainConfig
- KemalWAF::EndpointLimit
- KemalWAF::EvaluationResult
- KemalWAF::Evaluator
- KemalWAF::FiberState
- KemalWAF::GeoIPConfig
- KemalWAF::GeoIPFilter
- KemalWAF::GeoIPResult
- KemalWAF::HistogramBuckets
- KemalWAF::IPFilter
- KemalWAF::IPFilterResult
- KemalWAF::IPFilteringConfig
- KemalWAF::IPv4RadixTree
- KemalWAF::Isolated
- KemalWAF::IsolatedFiberInfo
- KemalWAF::LetsEncryptManager
- KemalWAF::LibInjectionWrapper
- KemalWAF::LogMessage
- KemalWAF::LogRotator
- KemalWAF::LoggingConfig
- KemalWAF::MemoryLimits
- KemalWAF::MemoryModule
- KemalWAF::MemoryTracker
- KemalWAF::Metrics
- KemalWAF::MetricsConfig
- KemalWAF::OperatorDispatch
- KemalWAF::OperatorType
- KemalWAF::PanicIsolator
- KemalWAF::PooledConnection
- KemalWAF::ProxyClient
- KemalWAF::RadixTreeNode
- KemalWAF::RateLimitResult
- KemalWAF::RateLimiter
- KemalWAF::RateLimitingConfig
- KemalWAF::RequestTrace
- KemalWAF::RequestTracePool
- KemalWAF::RequestTracer
- KemalWAF::Rule
- KemalWAF::RuleLoader
- KemalWAF::RuleSnapshot
- KemalWAF::RulesConfig
- KemalWAF::SNIManager
- KemalWAF::ServerConfig
- KemalWAF::ShardedIPStateMap
- KemalWAF::SlidingWindowCounter
- KemalWAF::StructuredLogger
- KemalWAF::TLSConfig
- KemalWAF::TLSManager
- KemalWAF::TraceContext
- KemalWAF::TracePoint
- KemalWAF::UpstreamConfig
- KemalWAF::VariableConverter
- KemalWAF::VariableSnapshot
- KemalWAF::VariableSnapshotPool
- KemalWAF::VariableSpec
- KemalWAF::VariableType
- KemalWAF::WAFConfig