Інфраструктура та розгортання
Застосунок може бути бездоганним, а сервер - усе одно відкритим навстіж. Ці перевірки стосуються того, як і де він працює.
Чек-лист
- Відкривай лише ті порти, які маєш на увазі. Брандмауер хоста, що дозволяє 22,
80 і 443, сам по собі недостатній: Docker публікує порти контейнерів, записуючи
правила iptables, які обходять ufw, тож
-p 9000:9000може бути доступним з інтернету, навіть коли брандмауер "дозволяє лише 443". Прив'язуй порти контейнерів до127.0.0.1, якщо вони не мають бути публічними, і скануй свою публічну IP-адресу, щоб переконатися, що саме відкрито. - Тримай адмін-панелі поза публічним інтернетом. Панелі на кшталт Portainer, інструменти адміністрування баз даних і UI метрик ніколи не повинні бути доступні з інтернету. Нова адмін-панель без облікового запису - це повний захват системи: будь-хто, хто дістанеться до неї під час налаштування, отримає контроль над сервером. Політики перезапуску можуть знову відкрити це вікно.
- Прив'язуй серверні застосунки до loopback і ставь перед ними зворотний проксі.
Застосунок слухає
127.0.0.1; nginx або край завершує TLS і пересилає запити. - Зроби origin недоступним, крім як через край. Якщо використовуєш Cloudflare або подібний сервіс, забезпечуй це через автентифіковані origin pulls (mTLS) або список дозволених IP, щоб зловмисники не могли обійти WAF, звернувшись до IP origin.
- Став заголовки безпеки.
Strict-Transport-Security,X-Content-Type-Options: nosniff,X-Frame-Options: DENY(абоframe-ancestors 'none'), суворийContent-Security-Policy(бажаноscript-src 'self'безunsafe-inlineчиunsafe-eval),Referrer-Policyі зафіксованийPermissions-Policy. - Не розкривай версію та стек. Прибери банери
ServerіX-Powered-By. - Заблокуй доступ до dotfiles і збірки.
/.env,/.git/, файли конфігурації та source maps не мають бути доступними з веб. Переконайся, що кожен із них повертає 403 або 404. - Показуй загальні помилки. Жодних трасувань стеку чи внутрішніх шляхів для користувачів; деталі логуй на сервері.
- Підтримуй середовище виконання оновленим і запускай застосунок від імені непривілейованого користувача з мінімальними правами, у контейнері або пісочниці, де це практично.
Як тестувати
- Зі свого комп'ютера поза своєю мережею скануй публічні IP на відкриті порти.
- Запитай
/.env,/.git/configі файл.mapна своєму домені. - Прочитай заголовки відповіді своєї головної сторінки і перевір кожен пункт вище.