feat: implement security audit fixes - rate limiting and SSRF protection (Issue #265 PR #2)

This commit implements HIGH-02 (Rate Limiting) and HIGH-03 (SSRF Protection)
from the security audit, protecting against brute force attacks and
Server-Side Request Forgery.

Security Enhancements:
- Rate limiting: 20 attempts per 15 minutes per IP (configurable)
- SSRF protection: Three security modes (strict/moderate/permissive)
- DNS rebinding prevention
- Cloud metadata blocking in all modes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
czlonkowski
2025-10-06 15:40:07 +02:00
parent 9a00a99011
commit 06cbb40213
15 changed files with 1041 additions and 13 deletions

View File

@@ -196,6 +196,41 @@ docker ps -a | grep n8n-mcp | grep Exited | awk '{print $1}' | xargs -r docker r
- Manually clean up containers periodically
- Consider using HTTP mode instead
### Webhooks to Local n8n Fail (v2.16.3+)
**Symptoms:**
- `n8n_trigger_webhook_workflow` fails with "SSRF protection" error
- Error message: "SSRF protection: Localhost access is blocked"
- Webhooks work from n8n UI but not from n8n-MCP
**Root Cause:** Default strict SSRF protection blocks localhost access to prevent attacks.
**Solution:** Use moderate security mode for local development
```bash
# For Docker run
docker run -d \
--name n8n-mcp \
-e MCP_MODE=http \
-e AUTH_TOKEN=your-token \
-e WEBHOOK_SECURITY_MODE=moderate \
-p 3000:3000 \
ghcr.io/czlonkowski/n8n-mcp:latest
# For Docker Compose - add to environment:
services:
n8n-mcp:
environment:
WEBHOOK_SECURITY_MODE: moderate
```
**Security Modes Explained:**
- `strict` (default): Blocks localhost + private IPs + cloud metadata (production)
- `moderate`: Allows localhost, blocks private IPs + cloud metadata (local development)
- `permissive`: Allows localhost + private IPs, blocks cloud metadata (testing only)
**Important:** Always use `strict` mode in production. Cloud metadata is blocked in all modes.
### n8n API Connection Issues
**Symptoms:**