Безопасность
SSL, аутентификация и защита n8n в production
Checklist безопасности
Заголовок раздела «Checklist безопасности»- HTTPS включён
- Encryption key установлен
- Аутентификация настроена
- Firewall настроен
- Credentials зашифрованы
- Регулярные бэкапы
SSL/TLS
Заголовок раздела «SSL/TLS»Let’s Encrypt + nginx
Заголовок раздела «Let’s Encrypt + nginx»-
Установите certbot
Окно терминала sudo apt install certbot python3-certbot-nginx -
Получите сертификат
Окно терминала sudo certbot --nginx -d n8n.example.com -
Настройте nginx
server {listen 443 ssl http2;server_name n8n.example.com;ssl_certificate /etc/letsencrypt/live/n8n.example.com/fullchain.pem;ssl_certificate_key /etc/letsencrypt/live/n8n.example.com/privkey.pem;# Современные SSL настройкиssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;ssl_prefer_server_ciphers off;# HSTSadd_header Strict-Transport-Security "max-age=31536000" always;location / {proxy_pass http://localhost:5678;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;}} -
Автопродление
Окно терминала sudo certbot renew --dry-run
Cloudflare
Заголовок раздела «Cloudflare»Используйте Full (strict) SSL mode:
- Cloudflare → Origin Server → SSL/TLS
- Encryption mode: Full (strict)
- Создайте Origin Certificate
Encryption Key
Заголовок раздела «Encryption Key»Генерация ключа
Заголовок раздела «Генерация ключа»# Linux/Macopenssl rand -hex 32
# Илиhead -c 32 /dev/urandom | base64Установка
Заголовок раздела «Установка»N8N_ENCRYPTION_KEY=your_32_char_key_here_xxxxxxxxxxxxxxАутентификация
Заголовок раздела «Аутентификация»User Management (рекомендуется)
Заголовок раздела «User Management (рекомендуется)»Встроенная система пользователей:
# Включена по умолчанию в новых версияхВозможности:
- Регистрация пользователей
- Роли (owner, admin, member)
- Приглашения по email
Basic Auth (простой вариант)
Заголовок раздела «Basic Auth (простой вариант)»N8N_BASIC_AUTH_ACTIVE=trueN8N_BASIC_AUTH_USER=adminN8N_BASIC_AUTH_PASSWORD=secure_passwordRBAC (Role-Based Access)
Заголовок раздела «RBAC (Role-Based Access)»| Роль | Права |
|---|---|
| Owner | Полный доступ |
| Admin | Управление пользователями, workflows |
| Member | Работа с workflow (ограниченно) |
Sharing Workflows
Заголовок раздела «Sharing Workflows»- Owner может шарить workflows
- Member видит только shared workflows
- Credentials шарятся отдельно
Firewall
Заголовок раздела «Firewall»Правила iptables
Заголовок раздела «Правила iptables»# Разрешить только HTTPSsudo iptables -A INPUT -p tcp --dport 443 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# Заблокировать прямой доступ к n8nsudo iptables -A INPUT -p tcp --dport 5678 -s 127.0.0.1 -j ACCEPTsudo iptables -A INPUT -p tcp --dport 5678 -j DROPsudo ufw allow 443/tcpsudo ufw allow 80/tcpsudo ufw deny 5678/tcpWebhook Security
Заголовок раздела «Webhook Security»Authentication
Заголовок раздела «Authentication»В Webhook ноде:
- Header Auth — проверка заголовка
- Basic Auth — логин/пароль
- JWT — валидация токена
IP Whitelist
Заголовок раздела «IP Whitelist»Через nginx:
location /webhook/ { allow 1.2.3.4; # Allowed IP deny all; proxy_pass http://localhost:5678;}Webhook URL Security
Заголовок раздела «Webhook URL Security»# Случайный pathWEBHOOK_URL=https://n8n.example.com/webhook-xxxx-random-path/Credentials Security
Заголовок раздела «Credentials Security»Шифрование
Заголовок раздела «Шифрование»Credentials шифруются с помощью N8N_ENCRYPTION_KEY:
- AES-256-GCM
- Ключ не покидает сервер
Best Practices
Заголовок раздела «Best Practices»- Минимальные права — создавайте API ключи с минимальными правами
- Ротация — регулярно меняйте credentials
- Аудит — отслеживайте использование
Docker Security
Заголовок раздела «Docker Security»Non-root User
Заголовок раздела «Non-root User»n8n уже работает под user node, но проверьте:
services: n8n: user: "1000:1000" security_opt: - no-new-privileges:trueRead-only Filesystem
Заголовок раздела «Read-only Filesystem»services: n8n: read_only: true tmpfs: - /tmp volumes: - n8n_data:/home/node/.n8nNetwork Isolation
Заголовок раздела «Network Isolation»networks: frontend: backend:
services: n8n: networks: - frontend - backend
postgres: networks: - backend # Только внутренняя сетьLogging & Audit
Заголовок раздела «Logging & Audit»Логирование
Заголовок раздела «Логирование»N8N_LOG_LEVEL=infoN8N_LOG_OUTPUT=fileN8N_LOG_FILE_LOCATION=/var/log/n8n/n8n.logAudit Log
Заголовок раздела «Audit Log»Отслеживайте:
- Логины пользователей
- Изменения workflows
- Создание credentials
- Активации workflows
Headers Security
Заголовок раздела «Headers Security»# Security headersadd_header X-Frame-Options "SAMEORIGIN" always;add_header X-Content-Type-Options "nosniff" always;add_header X-XSS-Protection "1; mode=block" always;add_header Referrer-Policy "strict-origin-when-cross-origin" always;add_header Content-Security-Policy "default-src 'self'" always;Rate Limiting
Заголовок раздела «Rate Limiting»# Rate limit zonelimit_req_zone $binary_remote_addr zone=n8n:10m rate=10r/s;
server { location / { limit_req zone=n8n burst=20 nodelay; proxy_pass http://localhost:5678; }}Webhook Rate Limiting
Заголовок раздела «Webhook Rate Limiting»location /webhook/ { limit_req zone=n8n burst=5; proxy_pass http://localhost:5678;}Backup Security
Заголовок раздела «Backup Security»Шифрование бэкапов
Заголовок раздела «Шифрование бэкапов»# Бэкап с шифрованиемpg_dump -U n8n n8n | gzip | \ gpg --symmetric --cipher-algo AES256 > backup.sql.gz.gpg
# Восстановлениеgpg --decrypt backup.sql.gz.gpg | gunzip | \ psql -U n8n n8nХранение бэкапов
Заголовок раздела «Хранение бэкапов»- Отдельное хранилище (S3, GCS)
- Encryption at rest
- Access logging
Следующие шаги
Заголовок раздела «Следующие шаги»- Docker — контейнеризация
- Масштабирование — queue mode
- Переменные окружения — конфигурация