Построение защищённой инфраструктуры на VPS в Linux требует комплексного подхода. Вот пошаговое руководство:
1. Базовая настройка безопасности
- Обновление системы:
sudo apt update && sudo apt upgrade -y # Для Debian/Ubuntu sudo yum update -y # Для CentOS/RHEL
- Настройка SSH:
- Отключите вход по паролю, используйте ключи:
sudo nano /etc/ssh/sshd_config # Измените параметры: PasswordAuthentication no PermitRootLogin no
- Создайте пользователя с ограниченными правами:
sudo adduser ваш_пользователь sudo usermod -aG sudo ваш_пользователь # Для Debian/Ubuntu
- Отключите вход по паролю, используйте ключи:
2. Настройка фаервола (iptables/nftables)
Расположите фаервол на каждом сервере для фильтрации трафика. Порядок правил важен: сначала разрешаем нужное, затем запрещаем всё остальное.
- Пример базовых правил iptables:
# Очистка старых правил iptables -F # Разрешить локальный трафик iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Разрешить установленные соединения iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Открыть порт SSH (например, 2222 вместо 22) iptables -A INPUT -p tcp --dport 2222 -j ACCEPT # Разрешить HTTP/HTTPS (если есть веб-сервер) iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Запретить всё остальное iptables -A INPUT -j DROP iptables -A FORWARD -j DROP # Сохранить правила (для Debian/Ubuntu) sudo iptables-save > /etc/iptables/rules.v4
- Используйте ufw для упрощения:
sudo ufw allow 2222/tcp sudo ufw enable
3. Настройка VPN (WireGuard/OpenVPN)
Используйте VPN для:
- Защиты административного доступа к серверам.
- Шифрования трафика между серверами в распределённой инфраструктуре.
Пример WireGuard:
- Установите WireGuard:
sudo apt install wireguard # Debian/Ubuntu
- Сгенерируйте ключи:
wg genkey | sudo tee /etc/wireguard/private.key sudo cat /etc/wireguard/private.key | wg pubkey | sudo tee /etc/wireguard/public.key
- Настройте сервер (
/etc/wireguard/wg0.conf
):[Interface] Address = 10.0.0.1/24 PrivateKey = <сервер_private_key> ListenPort = 51820 [Peer] PublicKey = <клиент_public_key> AllowedIPs = 10.0.0.2/32
- Разрешите VPN-порт в фаерволе:
sudo ufw allow 51820/udp
4. Шифрование данных
- Передача данных:
- Используйте TLS/SSL для веб-серверов (Let’s Encrypt).
- Настройте SSH-туннели для передачи файлов.
- Диски:
- Шифруйте диски с помощью LUKS.
- Базы данных:
- Включите шифрование на уровне СУБД (например, PostgreSQL с
pgcrypto
).
- Включите шифрование на уровне СУБД (например, PostgreSQL с
- Резервные копии:
- Используйте
gpg
илиopenssl
для шифрования бэкапов.
- Используйте
5. Дополнительные меры
- Fail2Ban для защиты от bruteforce:
sudo apt install fail2ban sudo systemctl enable fail2ban
- Регулярные аудиты:
- Используйте
lynis
для проверки безопасности:sudo apt install lynis sudo lynis audit system
- Используйте
- Мониторинг:
- Настройте инструменты вроде
Prometheus
+Grafana
для отслеживания аномалий.
- Настройте инструменты вроде
Порядок развёртывания
- Обновить ОС и создать безопасного пользователя.
- Настроить SSH и фаервол.
- Развернуть VPN для административного доступа.
- Настроить шифрование для критичных данных.
- Реализовать мониторинг и резервное копирование.
Это базовая схема. Для высоконагруженных систем добавьте IDS/IPS (например, Suricata), сегментацию сети и HIDS (OSSEC).
Хорошо, продолжим с углублением в детали. Вот дополнительные важные шаги для защиты VPS:
6. Сегментация сети и изоляция сервисов
- Демилитаризованная зона (DMZ):
- Если у вас несколько серверов, выделите отдельный сервер для публичных сервисов (веб, почта) и изолируйте внутренние сервисы (БД, бэкенды) через приватную сеть.
- Docker и контейнеры:
- Запускайте сервисы в изолированных контейнерах. Используйте
docker-compose
с ограничением прав:services: app: network_mode: "bridge" restart: unless-stopped cap_drop: - ALL read_only: true
- Запускайте сервисы в изолированных контейнерах. Используйте
7. Защита веб-серверов (Nginx/Apache)
- HTTP-заголовки безопасности:
add_header X-Content-Type-Options "nosniff"; add_header X-Frame-Options "SAMEORIGIN"; add_header Content-Security-Policy "default-src 'self'"; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains";
- TLS 1.3 и современные шифры:
ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256; ssl_prefer_server_ciphers on;
- WAF (Web Application Firewall):
- Установите ModSecurity для блокировки SQLi/XSS-атак:
sudo apt install libapache2-mod-security2 # Для Apache sudo apt install nginx-module-security # Для Nginx
- Установите ModSecurity для блокировки SQLi/XSS-атак:
8. Защита баз данных
- Смена портов по умолчанию:
- PostgreSQL:
port = 5433
в/etc/postgresql/.../postgresql.conf
. - MySQL:
port = 3307
в/etc/mysql/mysql.conf.d/mysqld.cnf
.
- PostgreSQL:
- Ограничение доступа:
- Разрешите подключение к БД только с внутренних IP или через VPN.
CREATE USER 'user'@'10.0.0.2' IDENTIFIED BY 'StrongPassword!123';
- Шифрование данных:
- PostgreSQL: Включите
pgcrypto
и TDE (Transparent Data Encryption). - MySQL: Используйте
innodb_encrypt_tables=ON
.
- PostgreSQL: Включите
9. Системный аудит и мониторинг
- Auditd:
- Отслеживайте подозрительные действия:
sudo apt install auditd sudo auditctl -w /etc/passwd -p wa -k user_changes
- Отслеживайте подозрительные действия:
- Логирование:
- Настройте централизованный сбор логов через rsyslog или Graylog.
# Пример отправки логов на удалённый сервер *.* @192.168.1.100:514
- Мониторинг процессов:
- Используйте Htop или Netdata для отслеживания аномалий.
10. Защита от DDoS
- Ограничение скорости (Rate Limiting):
- В Nginx:
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s; location / { limit_req zone=one burst=20; }
- В iptables:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
- В Nginx:
- Cloudflare:
- Настройте проксирование трафика через Cloudflare для фильтрации атак.
11. Kernel Hardening
- Настройка sysctl:
# /etc/sysctl.conf net.ipv4.tcp_syncookies = 1 # Защита от SYN-флуда kernel.kptr_restrict = 2 # Скрытие адресов ядра kernel.dmesg_restrict = 1 # Ограничение доступа к dmesg vm.swappiness = 10 # Снижение использования swap
- AppArmor/SELinux:
- Включите профили для критичных сервисов:
sudo aa-enforce /etc/apparmor.d/nginx # Для AppArmor (Debian) sudo setenforce 1 # Для SELinux (RHEL)
- Включите профили для критичных сервисов:
12. Резервное копирование
- Автоматизация бэкапов:
- Используйте
borgbackup
илиrestic
с шифрованием:borg create --encryption=repokey /backup::"$(date +%Y-%m-%d)" /data
- Настройте
cron
-задачи:0 3 * * * /usr/bin/borg create ... # Ежедневные бэкапы в 3:00
- Используйте
- Проверка бэкапов:
- Регулярно тестируйте восстановление из резервной копии.
13. Контроль пользователей и прав
- Sudoers:
- Давайте минимальные права:
user ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
- Давайте минимальные права:
- Аудит пользователей:
- Проверяйте подозрительные аккаунты:
awk -F: '($3 < 1000) {print $1}' /etc/passwd # Системные пользователи lastlog # Последние входы
- Проверяйте подозрительные аккаунты:
14. Защита от физических угроз
- Выбор провайдера:
- Используйте VPS с поддержкой TPM (Trusted Platform Module) и UEFI Secure Boot.
- Дисковая подпись:
- Настройка Secure Boot для ядра Linux (если провайдер поддерживает).
15. Инцидент-менеджмент
- Скрипты для экстренного доступа:
- Создайте резервный доступ через TOTP-аутентификацию (Google Authenticator).
- Изоляция сервера:
- При обнаружении атаки немедленно:
iptables -P INPUT DROP && iptables -P FORWARD DROP # Блокировка всего входящего
- При обнаружении атаки немедленно:
Чек-лист: Что ещё проверить?
- Обновление ПО: Все пакеты должны быть актуальными.
- Отключение ненужных сервисов: Уберите FTP, Telnet, rpcbind.
- 2FA для SSH: Используйте Google Authenticator + ключи.
- Антивирус: ClamAV для проверки загружаемых файлов.
- Песочницы: Запуск ненадёжного кода в Firejail.
- DNS-фильтрация: Используйте Pi-hole или AdGuard для блокировки вредоносных доменов.
Главный принцип
Минимизация поверхности атаки:
- Чем меньше открытых портов, сервисов и пользователей — тем сложнее взломать систему.
- Регулярно проводите пентесты (например, с помощью
nmap
иsqlmap
).
Если вы разрабатываете веб-приложение, добавьте Security Headers, CSP и регулярно обновляйте зависимости (проверяйте через npm audit
или snyk
). Для корпоративных систем рассмотрите Kubernetes с Pod Security Policies и Network Policies.