Мониторинг безопасности сайта
Security monitoring — непрерывное наблюдение за признаками атак, уязвимостей и несанкционированных изменений. Состоит из нескольких слоёв, каждый из которых ловит разные классы угроз.
Слои мониторинга безопасности
1. WAF (Web Application Firewall) — фильтрация вредоносных запросов до попадания в приложение.
- Cloudflare WAF, AWS WAF, ModSecurity (self-hosted)
- Блокирует SQL injection, XSS, CSRF, path traversal
2. Log Analysis — анализ access-логов на подозрительные паттерны.
3. File Integrity Monitoring (FIM) — детектирование изменений файлов.
4. Dependency Scanning — мониторинг CVE в используемых библиотеках.
5. Uptime + Error Rate — косвенные признаки атаки (DDoS, brute force).
Cloudflare WAF + Security Events
// Получение security events через Cloudflare API
const events = await fetch(
`https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/security/events?per_page=50`,
{
headers: {
'Authorization': `Bearer ${CF_API_TOKEN}`,
'Content-Type': 'application/json',
},
}
).then(r => r.json());
// Анализ: топ атакующих IP
const ipCounts = events.result.reduce((acc, e) => {
acc[e.clientIP] = (acc[e.clientIP] || 0) + 1;
return acc;
}, {});
ModSecurity + Nginx
# /etc/nginx/modsec/modsecurity.conf
SecRuleEngine On
SecRequestBodyAccess On
SecRule ARGS "@detectSQLi" "id:1000,deny,status:403,msg:'SQL Injection'"
SecRule ARGS "@detectXSS" "id:1001,deny,status:403,msg:'XSS Attack'"
File Integrity Monitoring с AIDE
# Установка AIDE
sudo apt install aide
# Инициализация базы (после установки, до предполагаемых изменений)
sudo aide --init
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
# Ежедневная проверка (cron)
sudo aide --check | mail -s "AIDE Report" [email protected]
Мониторинг через Fail2ban
# /etc/fail2ban/jail.local
[nginx-botsearch]
enabled = true
port = http,https
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 60
bantime = 3600
[nginx-http-auth]
enabled = true
port = http,https
logpath = /var/log/nginx/error.log
maxretry = 5
bantime = 86400
Dependency scanning
# GitHub Actions: еженедельный аудит зависимостей
name: Security Audit
on:
schedule:
- cron: '0 9 * * 1' # Каждый понедельник
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: npm audit --audit-level=high
- run: npx snyk test --severity-threshold=high
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
Алертинг при аномалиях
# Скрипт анализа логов на брутфорс
import re
from collections import defaultdict
def detect_brute_force(log_file, threshold=50):
ip_attempts = defaultdict(int)
with open(log_file) as f:
for line in f:
if '/wp-login.php' in line or '/admin/login' in line:
ip = re.search(r'(\d+\.\d+\.\d+\.\d+)', line)
if ip:
ip_attempts[ip.group(1)] += 1
return {ip: count for ip, count in ip_attempts.items() if count >= threshold}
Настройка базового security monitoring (Cloudflare WAF + Fail2ban + dependency alerts) — 1–2 дня.







