b3d31e838e
Changes to modules/security/live-attack-monitor.sh:
FEATURE: Detailed IPset failure reporting with actionable diagnostics
Problem:
Previously, if IPset initialization failed, it silently fell back to CSF
with only a debug.log entry. Users had no visibility into:
- WHY IPset failed to initialize
- WHAT the actual error was
- HOW to fix the problem
- IMPACT on performance
Solution:
Added comprehensive error detection, capture, and user-facing reporting.
1. ERROR CAPTURE (Lines 71, 92-127, 132-145):
Line 71: Added IPSET_INIT_ERROR variable to store failure reasons
Lines 92-93: Capture ipset create output and exit code
- OLD: ipset create ... 2>/dev/null (silent failure)
- NEW: IPSET_CREATE_OUTPUT=$(ipset create ... 2>&1)
IPSET_CREATE_EXIT=$?
Lines 100-101: Capture iptables rule creation output
- IPTABLES_OUTPUT=$(iptables -I INPUT ... 2>&1)
- IPTABLES_EXIT=$?
Lines 103-111: Detect iptables failure even after ipset succeeds
- Clean up ipset if iptables rule fails
- Set IPSET_INIT_ERROR with specific failure reason
- Prevents partial initialization
2. DIAGNOSTIC ANALYSIS (Lines 118-127, 136-145):
Kernel module detection (lines 118-122):
- Checks if error mentions "module"
- Runs: lsmod | grep -E "ip_set|xt_set"
- Reports which modules are NOT LOADED
- Appends to IPSET_INIT_ERROR for user display
Permission detection (lines 124-127):
- Checks if error mentions "permission"
- Reports current user and EUID
- Helps identify non-root execution
Package installation check (lines 136-145):
- For "command not found" errors
- Checks rpm -q ipset (RHEL/CentOS)
- Checks dpkg -l ipset (Debian/Ubuntu)
- Distinguishes: not installed vs installed but not in PATH
3. USER-FACING WARNING DISPLAY (Lines 3318-3359):
Startup Warning Banner:
- Only displayed if IPSET_INIT_ERROR is set
- Color-coded warning (HIGH_COLOR)
- Clear visual separation with borders
Information provided:
a) What failed: "IPset fast blocking is NOT available"
b) Why it failed: Displays IPSET_INIT_ERROR content
c) Performance impact:
- "Blocking will use CSF (slower than IPset)"
- "~50x slower blocking vs IPset"
- "Large-scale attacks (500+ IPs) will be slower"
d) How to fix: Context-aware instructions based on error type
Context-Aware Fix Instructions (lines 3335-3351):
If "not found" in error:
→ Install ipset: yum install ipset -y
→ Restart script
If "module" in error:
→ Load kernel modules: modprobe ip_set ip_set_hash_ip xt_set
→ Restart script
If "permission" in error:
→ Run script as root: sudo $0
If "iptables" in error:
→ Check iptables: iptables -L -n
→ Install if missing: yum install iptables -y
→ Load xt_set module: modprobe xt_set
Default (unknown error):
→ Check debug log: $TEMP_DIR/debug.log
→ Ensure ipset and iptables installed
→ Run as root
Line 3358: sleep 3 - Gives user time to read before monitor starts
4. DEBUG LOG ENHANCEMENT (Lines 108, 115, 121, 126, 138, 141, 144):
All errors now logged to debug.log with context:
- "✗ IPset created but iptables rule failed: [error]"
- "✗ IPset creation failed: [error]"
- " → Kernel module issue detected. Loaded modules: [list]"
- " → Permission denied. Current user: [user], EUID: [id]"
- " → ipset package IS installed but command not found"
- " → ipset package NOT installed"
BENEFITS:
For Users:
✓ Immediately see WHY IPset isn't working
✓ Get specific fix instructions (not generic troubleshooting)
✓ Understand performance impact of CSF fallback
✓ No need to dig through debug logs
For Support/Debugging:
✓ Detailed error messages in debug.log
✓ Kernel module status captured
✓ Permission issues identified
✓ Package installation status verified
Example Error Messages:
1. Package not installed:
"ipset command not found in PATH | Package not installed"
Fix: Install ipset: yum install ipset -y
2. Kernel module missing:
"ipset creation failed: can't load module | Kernel modules: NOT LOADED"
Fix: Load modules: modprobe ip_set ip_set_hash_ip xt_set
3. Permission denied:
"ipset creation failed: permission denied | Permission denied (need root)"
Fix: Run script as root: sudo $0
4. iptables rule failed:
"iptables rule creation failed: can't initialize iptables"
Fix: Install iptables, load xt_set module
TESTING:
- Syntax validated: ✅ PASSED
- Error capture verified
- Diagnostic logic tested for all error types
- User display formatting confirmed
STATUS: ✅ READY - Users will now get clear, actionable error messages