Share this post on:

Построение защищённой инфраструктуры на 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).
  • Резервные копии:
    • Используйте gpg или openssl для шифрования бэкапов.

5. Дополнительные меры

  • Fail2Ban для защиты от bruteforce: sudo apt install fail2ban sudo systemctl enable fail2ban
  • Регулярные аудиты:
    • Используйте lynis для проверки безопасности:sudo apt install lynis sudo lynis audit system
  • Мониторинг:
    • Настройте инструменты вроде Prometheus + Grafana для отслеживания аномалий.

Порядок развёртывания

  1. Обновить ОС и создать безопасного пользователя.
  2. Настроить SSH и фаервол.
  3. Развернуть VPN для административного доступа.
  4. Настроить шифрование для критичных данных.
  5. Реализовать мониторинг и резервное копирование.

Это базовая схема. Для высоконагруженных систем добавьте 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

8. Защита баз данных

  • Смена портов по умолчанию:
    • PostgreSQL: port = 5433 в /etc/postgresql/.../postgresql.conf.
    • MySQL: port = 3307 в /etc/mysql/mysql.conf.d/mysqld.cnf.
  • Ограничение доступа:
    • Разрешите подключение к БД только с внутренних IP или через VPN.
    CREATE USER 'user'@'10.0.0.2' IDENTIFIED BY 'StrongPassword!123';
  • Шифрование данных:
    • PostgreSQL: Включите pgcrypto и TDE (Transparent Data Encryption).
    • MySQL: Используйте innodb_encrypt_tables=ON.

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
  • 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 # Блокировка всего входящего

Чек-лист: Что ещё проверить?

  1. Обновление ПО: Все пакеты должны быть актуальными.
  2. Отключение ненужных сервисов: Уберите FTP, Telnet, rpcbind.
  3. 2FA для SSH: Используйте Google Authenticator + ключи.
  4. Антивирус: ClamAV для проверки загружаемых файлов.
  5. Песочницы: Запуск ненадёжного кода в Firejail.
  6. DNS-фильтрация: Используйте Pi-hole или AdGuard для блокировки вредоносных доменов.

Главный принцип

Минимизация поверхности атаки:

  • Чем меньше открытых портов, сервисов и пользователей — тем сложнее взломать систему.
  • Регулярно проводите пентесты (например, с помощью nmap и sqlmap).

Если вы разрабатываете веб-приложение, добавьте Security Headers, CSP и регулярно обновляйте зависимости (проверяйте через npm audit или snyk). Для корпоративных систем рассмотрите Kubernetes с Pod Security Policies и Network Policies.

Share this post on: