Manuals
RU EN

Сервер · 84

Firewall на VDS для PHP-сайта

Сервер 5 мин чтения

Свежий VDS из панели провайдера часто торчит всем подряд: SSH, иногда MySQL, панель на странном порту. Firewall — первое, что настраиваете до выкладки скрипта с реальными данными. Не после взлома.

Цель простая: снаружи только то, что нужно людям и вам. PHP-сайт обычно хочет 80/443, админ — SSH. MySQL с интернета не нужен.

Минимум портов

  • 22/tcp (или ваш нестандартный SSH) — только для админов, лучше с ограничением по IP если IP стабильный.
  • 80/tcp — HTTP (редирект, выпуск Let’s Encrypt).
  • 443/tcp — HTTPS.
  • 3306/tcp снаружи — закрыть. Слушать 127.0.0.1.

Панель ISPmanager/другое — отдельный порт; либо закрыть снаружи и ходить через SSH-туннель, либо жёстко ограничить IP. Оставлять панель миру с паролем «из письма» нельзя.

UFW (Ubuntu) — типичный каркас

ufw default deny incoming
ufw default allow outgoing
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable

Перед enable убедитесь, что SSH-правило есть. Иначе отрежете себя. Консоль провайдера (KVM/VNC) должна быть под рукой.

firewalld на CentOS/RHEL — та же идея другими командами: ssh, http, https в zone public; mysql не открывать.

MySQL только локально

В bind-address = 127.0.0.1 (или аналог для MariaDB). Скрипт на этой же машине коннектится к localhost — этого достаточно. Удалённый доступ к БД с домашнего ПК — через SSH-туннель, не через открытый 3306.

Открытый MySQL с паролем root/root на свежем VDS — классика сканеров. Даже с «сложным» паролем лишняя поверхность.

SSH

  • Ключи вместо пароля.
  • fail2ban или аналог.
  • По возможности другой порт + запрет root-login по паролю.

Не путайте «закрыть 22» с «оставить только ключи на 22». Если закроете SSH неверно — только консоль провайдера спасёт.

Cloudflare и origin. Если проксируете сайт через CF, на origin всё равно держите firewall. Можно ограничить 80/443 только IP Cloudflare — но тогда прямая проверка по IP сервера усложнится. Делайте осознанно.

Let’s Encrypt

HTTP-01 challenge требует доступность 80 снаружи (или DNS-challenge). Не закрывайте 80 насовсем, если пользуетесь http-проверкой. После выпуска редирект на 443 — норма. SSL: мануал.

Связка со стеком

Nginx/FPM: настройка. Выбор VDS: VDS для PHP. Root-доступ: VPS с root. Установка скрипта после базовой безопасности: установка.

Проверка

С другой машины:

nmap -p 22,80,443,3306 YOUR_IP

3306 не должен светиться open для мира. С самого сервера mysql на 127.0.0.1 работает.

Если после firewall сайт не открывается — смотрите ufw status и что nginx слушает 0.0.0.0:80/443. Connection refused к сайту ≠ ошибка PHP.

Бэкапы и мониторинг

Firewall не заменяет бэкапы и не ловит дыру в самом PHP-скрипте. Копии: бэкап. Доступность: мониторинг. Инциденты по продукту: поддержка.

На локальном Windows MicroServer домашний firewall обычно не трогаете ради *.loc — это другой контур: локальный сервер.

Порядок правил важен

В iptables/ufw сначала разрешаете SSH, потом остальное, потом включаете политику deny. Обратный порядок на удалённой машине без KVM — классический способ закрыть себе доступ. Перед экспериментом откройте веб-консоль провайдера и проверьте, что она жива.

Если сменили порт SSH на 2222 — правило ufw должно разрешать 2222, а не только OpenSSH-профиль на 22. Иначе после reload сессия ещё жива, а новый логин уже нет.

Панели и дополнительные порты

ISPmanager, phpMyAdmin, RabbitMQ, Redis UI — всё это часто слушает порты. Либо закрываете снаружи, либо ограничиваете IP. Redis и MySQL на 0.0.0.0 с паролем «1» — готовый инцидент. Для PHP-скрипта Microscript снаружи достаточно веба и SSH.

Если нужен доступ к MySQL с рабочего ноутбука — SSH-туннель:

ssh -L 3307:127.0.0.1:3306 user@vds

Локально подключаетесь к 127.0.0.1:3307. Порт 3306 на публичном интерфейсе не открываете.

Провайдерский firewall и ufw вместе

У многих VDS есть security groups / firewall в личном кабинете. Правила там и на машине должны согласовываться. Открыли 443 в ufw, забыли в панели провайдера — снаружи порт закрыт. Наоборот тоже бывает. При «сайт не открывается» проверяйте оба слоя, потом уже Nginx.

Гео и сканеры

После старта VDS в логах auth сразу чужие логины. Это нормальный фон интернета. fail2ban на sshd снижает шум. Не подставляйте пароль root из письма дольше первого часа. Ключи SSH — база. Про общий hardening после покупки: VPS с root, выбор VDS.

Что сделать после настройки веба

  1. Проверить с телефона на LTE (не тот же Wi‑Fi/VPN), что сайт открывается.
  2. Проверить, что nmap снаружи не показывает 3306.
  3. Выпустить SSL — SSL.
  4. Поставить скрипт — установка.
  5. Включить мониторинг uptime — мониторинг.

Если после ufw enable пропал сайт, а SSH жив — скорее забыли allow 80/443. Если пропало всё — консоль провайдера и ufw disable / правка правил.

Docker и firewall

Docker любит вставлять свои цепочки iptables. Правила ufw иногда неожиданно обходятся пробросом портов контейнера. Если поднимаете MySQL в Docker с publish 3306:3306 на 0.0.0.0 — получите дыру мимо «логической» политики. Публикуйте на 127.0.0.1:3306 или не публикуйте вовсе, оставьте docker network.

Для классического стека Nginx+PHP-FPM+MariaDB на хосте без Docker таких сюрпризов меньше: Nginx + PHP-FPM. Бэкапы и переносы после того, как периметр закрыт: бэкап, перенос.

Не открывайте «временно всем всё» через ufw allow 3306 на ночь ради удобства коллеги — утром забудете закрыть. Туннель быстрее настроить один раз, чем разбирать взломанную БД. То же про панель на 8080/1500: либо VPN, либо allow с конкретного IP. После любых правок firewall проверьте сайт с мобильного интернета и SSH новым окном терминала, не полагаясь на уже открытую сессию. Если отрезали себя — консоль провайдера, не «переустановка VDS с нуля» сразу. Выбор машины и root: VDS, VPS с root. Установка скрипта уже за закрытым периметром: установка.

Частые вопросы

Firewall на vds для php сайта?

Открытый MySQL снаружи — частая дыра на свежем VDS.

Сколько времени занимает «Firewall на VDS для PHP-сайта»?

Ориентир по тексту мануала — около 5 мин. На практике зависит от хостинга и подготовки базы.

Нужен ли отдельный сервер?

Для большинства скриптов достаточно хостинга или VDS с PHP и MySQL. Подбор сервера — в разделе VDS и требованиях к PHP/MySQL.

Какой vds для скрипта доски объявлений?

Разбор рядом в мануале по этому запросу. какой vds для скрипта доски объявлений

Vps с root для php скрипта?

Разбор рядом в мануале по этому запросу. vps с root для php скрипта

Раздел
VDS и сервер для PHP

Сервер под PHP/MySQL: от выбора тарифа до Nginx и firewall.