Первая эволюция: когда ты уже умеешь писать код, но твой сервер — это проходной двор
Автор: Алексей Пасечник (Arhellist). Канонический адрес: https://arhellist.ru/blog/pervaya-evolyutsiya/.
Опубликовано: 2026-07-02.
В интернете нет "безопасных" серверов. Есть серверы, которые ещё не взломали. И есть серверы, которые взломают через 5 минут после того, как ты запустишь на них свой первый проект.
Ты прошёл курс. Ты научился создавать приложения по полному циклу. От настройки окружения до деплоя в продакшн. Сделал пару пет-проектов. Всё работает. Ты чувствуешь себя богом.
Ты запускаешь свой первый реальный проект на VPS. Настраиваешь Node.js, PostgreSQL, Redis, Nginx. Деплоишь. Всё летает. Ты доволен.
А через три дня ты видишь в логах:
Failed password for root from 185.234.216.89 port 22 Failed password for root from 185.234.216.89 port 22 Failed password for root from 185.234.216.89 port 22
Ты только что прошёл свою первую эволюцию. Добро пожаловать в мир, где код — это только половина дела.
🔓 Миф о "безопасности по умолчанию" Когда ты только начинаешь, тебе кажется: "Я же поставил пароль. Всё ок."
Нет. Не ок.
Твой пароль — даже если он "SuperPuper123!" — будет подобран за 2 секунды. Твой SSH-порт 22 сканируется ботами каждые 5 минут. Твой PostgreSQL на 5432 порту уже пытаются взломать. Твой Redis без пароля — это просто бесплатный склад для майнеров криптовалюты.
Интернет — это не дружелюбное место. Это джунгли. И ты там — новенький, без оружия, с табличкой "Пожалуйста, не воруйте мои данные".
Я понял это, когда на моём первом сервере через неделю после деплоя оказался майнер крипты, который жрал 100% CPU. Я не знал, как он попал. Я просто увидел, что сервер тормозит, зашёл в htop, и там... чужой процесс. Счастье, что это был просто майнер, а не кто-то, кто слил базу с пользователями.
С тех пор я понял: безопасность — это не "опция". Это фундамент. Если ты не заложишь её на этапе проектирования, она придёт к тебе сама. В образе взломанного сервера в 3 часа ночи.
⚙️ Что нужно знать про ИБ веб-приложений Это не про "поставить антивирус". Это про:
Для кода:
OWASP Top 10 — это не скучный документ, а список того, как тебя могут убить. SQL-инъекции, XSS, CSRF, небезопасная десериализация. Ты должен знать их в лицо.
Валидация и санитизация — никогда не верь тому, что приходит от пользователя. Даже если это "просто имя".
Параметризованные запросы — если ты склеиваешь SQL строку с пользовательским вводом — ты уже проиграл.
JWT и сессии — храни секреты правильно. Не в коде. В .env. И .env не должен попасть в репозиторий, никогда.
CORS — не открывай доступ всем подряд. Только тем доменам, которым реально нужно.
Для сервера:
SSH — не на 22 порту. Не с паролем. Только по ключам. Двухфакторка — обязательно.
Базы данных — не на внешнем интерфейсе. Только localhost. Отдельные пользователи с минимальными правами.
Бэкапы — не просто делать, а шифровать и хранить отдельно.
Мониторинг — ты должен знать, что происходит на сервере. Кто заходит, что меняется, что падает.
Обновления — автоматические. Безопасность — это гонка вооружений. Если ты не обновляешься — ты отстаёшь.
📖 Мануал, который спасёт тебе жизнь Я написал руководство по максимальной безопасности сервера. Оно называется manualMAXSecurityServer.md.
Это не "галочки для галочек". Это эшелонированная оборона. Каждый слой — как пояс на средневековых доспехах. Если один пробьют — остальные остановят.
Что внутри (кратко):
SSH-защита на уровне паранойи
Порт 22222 (не 22). Port Knocking (три порта в правильной последовательности — и только тогда ты откроешь SSH). Только ключи Ed25519. Никаких паролей. Двухфакторная аутентификация (TOTP) даже для ключей. Root закрыт наглухо.
Сеть: забань всех, открой только нужных
UFW запрещает вообще всё. Даже исходящие соединения. Разрешено только то, без чего сервер не работает: DNS, обновления, NTP. И конечно, только твои IP имеют доступ к SSH.
Защита от атак: две линии обороны
Fail2ban — блокирует IP после 2 неудачных попыток. На сутки.
CrowdSec — современный вариант. Он не просто банит, он обменивается данными с другими серверами по всему миру. Если кто-то атакует их — он уже в чёрном списке у тебя.
Мониторинг целостности (AIDE)
AIDE запоминает "отпечатки" всех важных файлов. Если кто-то изменит /etc/passwd, /bin/bash или твой код — ты узнаешь об этом в ежедневном отчёте по почте.
Аудит всего (auditd)
Каждое изменение, каждый запущенный процесс, каждое сетевое соединение — логируется. Если тебя взломают, ты сможешь восстановить картину происходящего.
Защита твоего приложения
Node.js запускается от непривилегированного пользователя. Через systemd с ограничениями: памяти, CPU, прав на запись, доступа к ядру. AppArmor изолирует процесс дополнительно. Никаких прав на запись в системные папки.
Базы данных только для своих
PostgreSQL и Redis слушают только localhost. Отдельные пользователи с правами только на чтение/запись своей БД. Redis без FLUSHALL и CONFIG команд. И конечно — сложные пароли.
Nginx: заголовки, которые стреляют
X-Frame-Options: DENY. X-Content-Type-Options: nosniff. CSP (Content Security Policy) — строгие правила, что может загружать страница. HSTS — только HTTPS. И все это — чтобы клиентский код не украли и не подменили.
Автоматическое обновление безопасности
Пакеты обновляются сами. Без твоего участия. Если обновление что-то ломает — есть процедура отката.
Ежедневные зашифрованные бэкапы
Дампы БД и код архивируются, шифруются GPG и отправляются на отдельный сервер. Если твой сервер сгорит — ты восстановишь всё за 15 минут.
Анти-руткиты и аудит
rkhunter и chkrootkit проверяют систему на признаки взлома. Lynis сканирует уязвимости. И всё это — в ежедневных отчётах на почту.
Изоляция в Docker
Даже если приложение скомпрометируют — оно не получит доступ к хост-системе. Минимальные права, read-only файловая система, никаких привилегий.
💎 Итог: почему это важно Безопасность — это не про "я поставлю пароль и всё будет ок".
Безопасность — это про:
Защиту пользователей. Твои пользователи доверили тебе свои данные. Имей совесть.
Защиту бизнеса. Утечка данных стоит миллионы. Репутацию — ещё дороже.
Защиту себя. Никто не хочет объяснять клиенту, почему его база слита в интернет.
Безопасность — это не страшно. Это просто требует дисциплины.
Каждый раз, когда ты разворачиваешь новый сервер, ты проходишь этот путь: от "всё работает, ура!" до "ой, меня взломали". Вопрос только в том, сколько раз тебе нужно обжечься, прежде чем ты начнёшь делать это правильно с первого раза.
Я обжигался трижды. Три раза я фиксил последствия чужого проникновения. Три раза я пересматривал свои подходы. Теперь я делаю так, как описано в мануале. С первого раза. Без сюрпризов.
Учись на моих ошибках. Или на своих — но тогда будет больнее, но поучительнее.
О чём пишем
- Архитектура и эксплуатация веб-продуктов
- AI-агенты, RAG и практические контуры
- Кейсы LMS, маркетплейсов и защищённых коммуникаций
- Заметки по Next.js, Node.js, PostgreSQL и realtime