e3cf8514df
Issue: Script was creating its own temporary ipset when CSF's chain_DENY existed but didn't support timeouts. This caused IPs to be blocked in a separate ipset instead of CSF's official blocking list. Fix: Restructured IPset initialization to ALWAYS prefer CSF's chain_DENY - chain_DENY exists → Use it (the authoritative CSF blocking ipset) - chain_DENY doesn't exist → Create temporary ipset as fallback - No ipset available → Fall back to CSF -td command Benefits: - All IPs blocked go to CSF's chain_DENY (standard blocking mechanism) - CSF configuration/UI sees all blocks - Better integration with CSF's deny list management - 70+ IPs/sec can now be properly added to the known CSF block ipset Testing: - Verified ipset list chain_DENY detection - Syntax validated - Backward compatible with ipset without timeout support Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>