initcol

Description: Initialize persistent collection

Syntax: initcol:collection=key

The initcol action initializes persistent collections (IP, SESSION, USER, RESOURCE, GLOBAL). Persistent collections allow saving and sharing data across multiple requests, forming the foundation for implementing IP rate limiting, session tracking, user behavior analysis, and similar features.

Available Collections:

  • IP - Persistent storage based on client IP address
  • SESSION - Persistent storage based on session ID
  • USER - Persistent storage based on user ID
  • RESOURCE - Persistent storage based on resource identifier
  • GLOBAL - Global persistent storage

Collection data is automatically loaded from storage during rule execution and automatically persisted after modification.

Example:

# Initialize IP collection for rate limiting
SecAction "id:1,phase:1,pass,nolog,initcol:IP=%{REMOTE_ADDR}"

# IP rate limiting implementation
SecRule IP:request_count "@gt 100" \
    "id:2,phase:1,deny,msg:'IP request rate exceeded'"
SecRule REQUEST_URI "@unconditionalMatch" \
    "id:3,phase:1,pass,nolog,setvar:IP.request_count=+1,\
    expirevar:IP.request_count=60"

# Initialize session collection
SecRule REQUEST_COOKIES:session_id "@rx ^[a-f0-9]{32}$" \
    "id:4,phase:1,pass,nolog,initcol:SESSION=%{REQUEST_COOKIES.session_id}"

# Initialize global collection
SecAction "id:5,phase:1,pass,nolog,initcol:GLOBAL=global"

Parameter Type: string

Case Sensitive: Yes