Ответ
Защита продакшн-сервера строится на принципах минимальных привилегий и глубокой эшелонированной защиты (Defense in Depth).
1. Сетевая изоляция и контроль доступа:
- Сегментация сети: Размещаю сервера в приватных подсетях (VPC/VLAN). Доступ в интернет только через NAT-шлюзы, входящий трафик строго через Application Load Balancer (ALB) или WAF.
- Бездоступность извне: SSH/RDP порты недоступны из публичной сети. Доступ только через бастион-хост (jump server) или VPN (например, OpenVPN, WireGuard).
- Брандмауэр: Настраиваю security groups (AWS) или iptables/ufw, разрешая входящие соединения только с доверенных IP (офис, VPN) и только на необходимые порты (например, 443 для HTTPS).
2. Харденинг ОС и управление доступом:
- Обновления: Автоматизирую установку security-патчей через
unattended-upgrades(Ubuntu) или менеджер пакетов. - SSH: Отключаю парольную аутентификацию (
PasswordAuthentication no), использую только ключи ED25519. Применяюfail2banдля блокировки брутфорса. - Принцип наименьших привилегий: Сервисы запускаются от отдельных непривилегированных пользователей. Использую
sudoс ограниченным набором команд.
3. Защита на уровне приложения и инфраструктуры:
- WAF: Разворачиваю Web Application Firewall (например, AWS WAF, ModSecurity) для фильтрации распространенных атак (OWASP Top 10).
- HIDS: Устанавливаю host-based intrusion detection system, такую как
WazuhилиOSSEC, для мониторинга целостности файлов и подозрительной активности.
4. Мониторинг и аудит:
- Централизованные логи: Все логи (syslog, auditd, journald, приложения) отправляю в SIEM-систему (например, ELK Stack или Grafana Loki) для корреляции событий.
- Алертинг: Настраиваю алерты в Prometheus Alertmanager на подозрительную активность: множественные failed logins, необычно высокая сетевая активность, изменения критических файлов.
Базовый пример настройки iptables для ограничения SSH:
# Разрешаем SSH только из доверенной подсети и блочим все остальное
iptables -A INPUT -p tcp --dport 22 -s 10.10.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
# Разрешаем установленные соединения и loopback
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
# Блокируем весь остальной входящий трафик по умолчанию
iptables -P INPUT DROP