Сервер, щойно отримавши публічну IP-адресу, за лічені хвилини починає отримувати спроби підбору паролів SSH і сканування портів. Базовий захист:
1. SSH:
- вхід лише за ключами, паролі вимкнено (
PasswordAuthentication no); - заборонено вхід root (
PermitRootLogin no) - окремий користувач зsudo; - сучасні ключі (Ed25519), захищені парольною фразою;
- доступ до SSH - лише з певних адрес чи через VPN/bastion (WireGuard, Tailscale), або хоча б
fail2banпроти перебору.
Mozilla публікує рекомендовану конфігурацію OpenSSH з безпечними алгоритмами.
2. Фаєрвол - відкрито лише потрібне:
ufw default deny incoming
ufw allow 22/tcp # або лише з адреси VPN
ufw allow 80,443/tcp
ufw enable
База даних, Redis, панелі моніторингу - не слухають публічний інтерфейс. Окрема пастка Docker: опубліковані порти (ports: 5432:5432) обходять ufw, бо Docker сам керує правилами iptables. Порти служб - лише на 127.0.0.1 або без публікації.
3. Оновлення: автоматичні оновлення безпеки (unattended-upgrades в Ubuntu/Debian), регулярне оновлення ядра з перезавантаженням.
4. Принцип найменших прав:
- застосунок працює від окремого непривілейованого користувача;
- права на файли: код - лише для читання процесом PHP, запис - лише в
storage/іbootstrap/cache/; - без
chmod 777«щоб запрацювало».
5. Мінімум служб: видалити непотрібне ПЗ, не встановлювати phpMyAdmin і подібні панелі на продакшені.
6. Журнали й моніторинг: спроби входу, sudo, зміни в системних файлах, незвичне навантаження. Журнали - на окремий сервер, щоб зловмисник не міг їх стерти.
7. Інфраструктура як код: налаштування через Ansible, cloud-init чи образи - відтворювано й перевірено, а не «руками колись налаштований сервер», про який ніхто не пам'ятає подробиць.
Керовані платформи (Laravel Cloud, Forge, Ploi, контейнерні платформи) беруть частину цього на себе - але відповідальність за доступи, секрети й оновлення застосунку лишається за командою.
Докладніше в документації: Mozilla: рекомендації для OpenSSH