Чек-лист финальной проверки безопасности перед запуском проекта
Дата публикации: 24.04.2026

Чек-лист финальной проверки безопасности перед запуском проекта

Хочу себе такие же кнопки
ccb9a536


Чек-лист финальной проверки безопасности перед запуском проекта

Или как не превратить свой сервер в "дырявое решето" за 5 минут после старта

Вы потратили недели (а может, месяцы) на разработку проекта. Код написан, дизайн отполирован, трафик готов литься рекой. Но есть одна проблема: если вы пропустили хотя бы один пункт безопасности, ваш сервер может стать легкой добычей для ботов, хакеров или даже конкурентов.

Пример из жизни: В 2021 году арбитражник запустил лендинг на свежем VPS, не закрыв порт 22 (SSH) и не настроив fail2ban. Через 12 часов сервер стал частью ботнета для DDoS-атак, а хостинг заблокировал аккаунт за нарушение правил. Потери: $3 000 на рекламу + репутация.

Этот чек-лист поможет избежать таких историй. Проходите его шаг за шагом перед каждым запуском — даже если "в прошлый раз всё работало".


1. Базовая защита сервера: "Закройте двери и окна"

Первое, что проверяют злоумышленники — открытые порты и устаревшие сервисы. Ваша задача — оставить только то, что действительно нужно проекту.

✅ Что делать:

1.1. Проверьте открытые порты

Используйте команду:

sudo netstat -tulnp

или (если нет netstat):

sudo ss -tulnp
Что должно остаться: Порт Назначение Нужно ли вам?
22 SSH Да (но только с ключом!)
80 HTTP Да (перенаправляйте на 443)
443 HTTPS Обязательно
3306 MySQL Нет (закрывайте внешний доступ)
27017 MongoDB Нет (только локально)

❌ Удалите всё лишнее! Если видите неизвестные порты (например, 23/Telnet или 21/FTP) — блокируйте их в фаерволе (ufw или iptables).

1.2. Настройте фаервол (UFW)

Минимальная конфигурация:

sudo ufw default deny incoming   # Заблокировать всё входящее
sudo ufw default allow outgoing  # Разрешить исходящее
sudo ufw allow 80/tcp           # HTTP
sudo ufw allow 443/tcp          # HTTPS
sudo ufw allow 22/tcp           # SSH (только если нужен)
sudo ufw enable

⚠️ Важно:

  • Если используете Cloudflare, можно закрыть 80/443 для всех, кроме их IP (список здесь).
  • Для SSH лучше поменять порт на нестандартный (например, 2222) и разрешить только свой IP:
    sudo ufw allow from 123.123.123.123 to any port 2222

1.3. Обновите всё до последних версий

sudo apt update && sudo apt upgrade -y  # Для Debian/Ubuntu
sudo yum update -y                     # Для CentOS

Почему это критично? В 2022 году уязвимость в Log4j позволяла хакерам выполнять код на серверах. Исправление вышло за день — но многие не обновились и поплатились.


2. Защита SSH: "Ключ лучше пароля"

SSH — главный вход на ваш сервер. Если его взломают, проект умер.

✅ Что делать:

2.1. Отключите вход по паролю

Редактируйте /etc/ssh/sshd_config:

PasswordAuthentication no
PermitRootLogin no

⚠️ Предварительно настройте вход по ключу! Сгенерируйте ключ на локальной машине:

ssh-keygen -t ed25519 -C "your_email@example.com"

Скопируйте его на сервер:

ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip

Проверьте вход:

ssh -i ~/.ssh/id_ed25519 user@server_ip

2.2. Поменяйте порт SSH (опционально, но рекомендуется)

В том же /etc/ssh/sshd_config:

Port 2222  # Вместо 22

Не забудьте открыть новый порт в фаерволе!

2.3. Установите fail2ban

Это как "охранник", который блокирует IP после нескольких неудачных попыток входа.

sudo apt install fail2ban
sudo systemctl enable fail2ban

Проверьте лог:

sudo tail -f /var/log/fail2ban.log

3. Веб-сервер: "Нет HTTPS — нет безопасности"

Если ваш сайт работает по HTTP, все данные (включая пароли пользователей) передаются открытым текстом.

✅ Что делать:

3.1. Настройте HTTPS (Let’s Encrypt)

Установите Certbot:

sudo apt install certbot python3-certbot-nginx  # Для Nginx
sudo certbot --nginx -d ваш_домен.com

⚠️ Важно:

  • Автоматическое обновление сертификатов:
    sudo certbot renew --dry-run
  • Перенаправляйте HTTP → HTTPS в конфиге Nginx:
    server {
      listen 80;
      server_name ваш_домен.com;
      return 301 https://$host$request_uri;
    }

3.2. Защитите заголовки (Security Headers)

Добавьте в конфиг Nginx/Apache:

add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
add_header X-XSS-Protection "1; mode=block";
add_header Referrer-Policy "strict-origin-when-cross-origin";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline'; img-src 'self' data:";

Что это даёт?

  • X-Frame-Options — защита от кликджекинга.
  • CSP — блокирует загрузку скриптов с неизвестных источников (например, если хакер встроит вредоносный JS).

Проверьте заголовки на securityheaders.com.

3.3. Отключите ненужные методы HTTP

В конфиге Nginx:

limit_except GET POST {
    deny all;
}

Почему? Методы вроде PUT, DELETE или TRACE часто используются для атак.


4. Базы данных: "Не оставляйте ключи в замке"

Если ваша база данных доступна из интернета — её украдут или удалят.

✅ Что делать:

4.1. Закройте внешний доступ к БД

Для MySQL/MariaDB:

sudo mysql -u root -p

Внутри консоли:

DROP USER 'root'@'%';  # Удалите удалённого root
CREATE USER 'admin'@'localhost' IDENTIFIED BY 'сложный_пароль';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost';
FLUSH PRIVILEGES;

Для MongoDB редактируйте /etc/mongod.conf:

net:
  bindIp: 127.0.0.1  # Только локальный доступ
  port: 27017

4.2. Настройте резервное копирование

Автоматическое копирование базы раз в день:

sudo mysqldump -u admin -p'пароль' имя_базы > /backup/db_$(date +%F).sql

Или для MongoDB:

mongodump --out /backup/mongo_$(date +%F)

⚠️ Важно:

  • Храните бэкапы вне сервера (например, в S3 или Google Drive).
  • Проверяйте восстановление раз в месяц!

5. Мониторинг и логи: "Видеть всё, как Бог"

Если вы не знаете, что происходит на сервере — вы слепы.

✅ Что делать:

5.1. Настройте логирование

Проверьте, что логи пишутся:

sudo tail -f /var/log/nginx/error.log  # Ошибки Nginx
sudo tail -f /var/log/auth.log        # Попытки входа

Настройте ротацию логов, чтобы они не забивали диск:

sudo nano /etc/logrotate.conf

Добавьте (например, для Nginx):

/var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        systemctl reload nginx
    endscript
}

5.2. Установите инструменты мониторинга

  • Netdata (реальное время):
    bash <(curl -Ss https://my-netdata.io/kickstart.sh)

    Доступ: http://ваш_сервер:19999

  • Grafana + Prometheus (для продвинутых).

5.3. Настройте алерты

Пример для fail2ban (отправка на email при блокировке IP):

sudo nano /etc/fail2ban/jail.local

Добавьте:

[DEFAULT]
destemail = ваш@email.com
sender = fail2ban@ваш_сервер.com
action = %(action_mwl)s

6. Резервное копирование: "Если всё сломалось"

Правило арбитражника: "Если нет бэкапа — его не существует."

✅ Что делать:

6.1. Автоматизируйте бэкапы

Пример скрипта для полного бэкапа сервера (включая базы и файлы):

#!/bin/bash
BACKUP_DIR="/backup/full_$(date +%F)"
mkdir -p $BACKUP_DIR

# Дамп баз
mysqldump -u admin -p'пароль' --all-databases > $BACKUP_DIR/all_dbs.sql

# Архив файлов
tar -czvf $BACKUP_DIR/files.tar.gz /var/www /etc/nginx /etc/php

# Загрузка в облако (пример для AWS S3)
aws s3 cp $BACKUP_DIR s3://ваше-ведро/backup/ --recursive

Настройте cron на ежедневный запуск:

sudo crontab -e

Добавьте:

0 3 * * * /путь/к/скрипту.sh

6.2. Проверяйте восстановление

Раз в квартал:

  1. Разверните бэкап на тестовом сервере.
  2. Убедитесь, что сайт работает.
  3. Проверьте целостность базы.

7. Дополнительные меры (для параноиков)

Если проект критически важен — сделайте это:

Мера Зачем нужно Как настроить
Двухфакторная аутентификация (2FA) для SSH Даже если украдут ключ, без кода доступа не войти google-authenticator + настройка в /etc/ssh/sshd_config
Изоляция процессов (Docker/LXC) Если взломают один сервис, остальные не пострадают Разверните каждый сервис в отдельном контейнере
WAF (ModSecurity или Cloudflare) Блокирует SQL-инъекции, XSS и другие атаки Установите libapache2-mod-security2 + правила OWASP
Отключение IPv6 (если не используется) Уменьшает поверхность атаки В /etc/sysctl.conf: net.ipv6.conf.all.disable_ipv6=1

🔥 Финальный чек-лист перед запуском

Пройдите по пунктам и отметьте выполненное:

Задача Выполнено?
1 Закрыты все порты, кроме 80, 443 и SSH (сменён на нестандартный)
2 Вход по SSH только по ключу, пароль отключён
3 Установлен и настроен fail2ban
4 Все пакеты обновлены (apt upgrade)
5 Настроен HTTPS (Let’s Encrypt) + перенаправление с HTTP
6 Добавлены Security Headers (CSP, X-Frame-Options и др.)
7 База данных доступна только с localhost, удалённый root удалён
8 Настроено автоматическое резервное копирование (вне сервера)
9 Включен мониторинг логов (Netdata/Grafana)
10 Проверено восстановление из бэкапа

🚀 Практика для закрепления

Вопросы для самопроверки:

  1. Вы запустили новый сервер и видите в netstat, что порт 3306 (MySQL) открыт для всех. Какие команды нужно выполнить, чтобы закрыть его для внешнего доступа?
  2. Почему вход по SSH по паролю опаснее, чем по ключу? Какой алгоритм ключа рекомендуется использовать (rsa, ed25519 или ecdsa) и почему?
  3. Вы настроили HTTPS, но на securityheaders.com видите предупреждение об отсутствии Content-Security-Policy. Какую директиву CSP нужно добавить, чтобы запретить загрузку скриптов со сторонних сайтов, кроме cdn.jsdelivr.net?
  4. Ваш сервер был взломан через уязвимость в устаревшей версии PHP. Как избежать такой ситуации в будущем? (Укажите конкретные команды.)
  5. Вы арендовали VPS у хостера, который не предоставляет бэкапы. Напишите скрипт для автоматического копирования /var/www и базы MySQL в облако Yandex S3 (используйте s3cmd или awscli).

💡 Бонусное задание: Настройте автоматическое блокирование IP в fail2ban для атак на WP-Login (если используете WordPress). Пришлите конфиг из /etc/fail2ban/jail.local.


⚠️ Важно: Безопасность — это не одноразовая настройка, а постоянный процесс. Раз в месяц:

  • Проверяйте логи на подозрительную активность.
  • Обновляйте софт.
  • Тестируйте бэкапы.

Если что-то непонятно — не гадайте, а гуглите или спрашивайте. Один неверный шаг может стоить вам всего проекта. Удачи! 🚀


Регистрация на 🏰 VDSina без номера телефона (через почту)
Как не попасть на деньги при посуточной оплате (баланс и блокировки)
Обзор панели управления: где что лежит
Выбор тарифа: на что влияют vCPU, RAM и SSD
Разница между VDS и обычным хостингом (на пальцах)
Как выбрать операционную систему для новичка: Ubuntu vs Debian vs AlmaLinux
Установка сервера в один клик: кнопка «Создать»
Что такое root-пароль и где его сохранить
Первый вход по SSH через командную строку Windows
Первый вход по SSH через PuTTY (простая инструкция)
Первый вход по SSH через Termius (для телефона и ПК)
Как обновить пароль root в панеле VDSina
Базовые команды Linux: ls, cd, sudo, apt update
Как проверить, сколько ресурсов жрет ваш сервер (htop, free -h)
Установка панели управления сервером (ISPmanager) за 5 минут
Установка бесплатной панели FastPanel от 🏰 VDSina (родная)
Установка панели HestiaCP (бесплатно и просто)
Настройка файрвола (UFW) чтобы не взломали в первый же час
Как открыть порты 80 и 443 для сайта
Установка LAMP (Linux, Apache, MySQL, PHP) одной командой
Установка LEMP (Nginx вместо Apache) одной командой
Как забросить сайт на WordPress через панель 🏰 VDSina (готовый шаблон)
Ручная установка WordPress на чистый сервер
Создание базы данных MySQL для сайта через командную строку
Как привязать домен к серверу (настройка A-записи)
Выпуск бесплатного SSL-сертификата от Let's Encrypt
Настройка cron (заданий по расписанию) на VDSina
Автоматическое резервное копирование (бэкапы) в панеле VDSina
Как восстановить сервер из бэкапа за 2 минуты
Настройка VPN на 🏰 VDSina (OpenVPN) для новичка
Настройка WireGuard на 🏰 VDSina (быстрее и проще)
Как проверить, не заблокирован ли ваш IP в РФ
Смена IP-адреса сервера в панеле 🏰 VDSina (если заблокировали)
Как привязать свой ISO-образ для установки Windows Server
Установка бота для Telegram на Python на VDSina
Как запустить бота в фоне (screen и systemd для чайников)
Мониторинг сервера через встроенные графики VDSina
Как не переплатить: выключение сервера при простое (посуточная оплата)
Повышение тарифа без перезагрузки сервера (горячий апгрейд)
Как настроить уведомления о падении сервера в Telegram
Безопасность: запрет входа под root через SSH
Создание нового пользователя с правами sudo
Защита от DDoS (включение защиты в панеле VDSina)
Подключение сетевых дисков (блочные устройства) для дополнительного места
Миграция сайта с другого хостинга на 🏰 VDSina (пошагово)
Как удалить сервер и не забыть отключить оплату
Где брать помощь: техподдержка VDSina, чаты и форумы
Бонус: установка игрового сервера Minecraft (для друзей)
Бесплатный курс: "VDSina для чайников: Сервер за 5 минут: Эффективно и быстро"
Бесплатный виджет обратной связи для JavaScript
Чатрулетка: новый способ общения
Что такое видеочат рулетка и зачем
Фототехника для пейзажей
Как выбрать лучший render хостинг для 3D рендеров с Eevee
Логистика с Excel: бесплатный курс учёта остатков и подбора транспорта
Онлайн генератор паролей для Windows
Онлайн Сплетница субтитры
Оптимизация обработки форм GEO проекта
Пасхалки в сериале Dexter: раскрытие тайн
Погода в Ревде вечером
Родительский портал Воронеж
Роллы, которые не требуют рекламы
SEO-принципы для нейросетевых разработчиков
Собери 10 пакетов перцев с теплицы
Создание мемов без фотошопа: простые приемы
Сравнение Arsys хостинг сервисов для блогеров с WordPress на 2023 год
VDSina для новичков: советы для начала
Весь экран под циферблат
Видеочат с минимальной задержкой
Виртуальная девушка ИИ
Вложения в компании
Введение в нейросети бесплатно
рейтинг хостингов 2026 Быстрые VDS серверы