Сервер сайта
Защита сервера сайта
Как закрыть прямой вход на сервер сайта
Зачем закрывать прямой вход
Разрешите HTTP- и HTTPS-подключения к серверу сайта только с IP серверов GUJ и других доверенных сервисов.
Иначе к серверу можно обратиться напрямую и обойти проверки GUJ.
В названиях команд сервер сайта обозначен словом origin.
Что делает скрипт защиты сервера сайта
Скрипт называется lockdown-origin-host.sh. Он использует nftables — системный инструмент для управления сетевым доступом.
- Создает отдельный файл правил
/etc/nftables.d/guj-origin.nft - Создает отдельную таблицу nftables
inet guj_origin- набор правил сетевого доступа для сервера сайта - Закрывает входящие подключения по умолчанию
- Открывает веб-порты сервера сайта, обычно
80и443, только для IP из списка разрешенных - Скачивает из панели список разрешенных IP для веб-портов, если ручной список не задан
- Отдельно спрашивает, ограничивать ли SSH списком разрешенных IP
- Пытается добавить текущий SSH IP автоматически, чтобы не отрезать доступ
- Создает резервную копию старых правил GUJ перед применением
- При отключении удаляет только правила GUJ, не меняя другие правила сетевого доступа сервера
Где запускать
Запускайте этот скрипт только на сервере сайта. Не запускайте его на сервере GUJ.
Если сайт и GUJ установлены на разных серверах, lockdown-origin-host.sh запускается на сервере сайта, а harden-node-host.sh - на сервере GUJ.
Перед запуском
- Убедитесь, что у вас есть доступ к серверу по SSH и права администратора через root или sudo
- Убедитесь, что домен уже может работать через сервер GUJ
- Если SSH должен быть доступен только с разрешенных IP, заранее подготовьте адреса администраторов
- Если сервер сайта принимает запросы не только на
80/443, заранее определите список веб-портов, например80, 443, 8080 - Если используется не основная панель
https://guj.ru, передайте URL панели черезGUJ_PANEL_URL
Обычный запуск с меню
Выполните на сервере сайта:
curl -fsSL https://files.guj.ru/node/lockdown-origin-host.sh | sudo shЕсли запустить команду по SSH без дополнительных параметров, откроется меню. Английское слово allowlist в названиях пунктов означает список разрешённых IP.
CIDR — это запись диапазона IP, например 203.0.113.0/24.
| Пункт | Что делает |
|---|---|
| 1 - Включить/переустановить полную защиту origin | Скачивает из панели список разрешенных IP, создает правила и применяет их |
| 2 - Отключить полную защиту GUJ для origin | Удаляет только таблицу nftables guj_origin и файл guj-origin.nft |
| 3 - Показать текущий статус | Показывает файл правил, активную таблицу nftables и списки разрешенных IP для веб-портов и SSH |
| 4 - Обновить web allowlist из панели | Заново получает список IP серверов GUJ и применяет правила с обновленным списком |
| 5 - Включить ограничение SSH по allowlist | Открывает SSH только для текущего SSH IP, IP из панели и дополнительных IP |
| 6 - Отключить ограничение SSH | Оставляет SSH-порт открытым для всех, остальные GUJ-правила сохраняются |
| 7 - Добавить IP/CIDR в SSH allowlist | Добавляет новые адреса и переустанавливает правила |
| 8 - Удалить IP/CIDR из SSH allowlist | Удаляет адреса и переустанавливает правила |
| 0 - Выход | Выходит без изменений |
Включение полной защиты
Выберите пункт 1 в меню. Скрипт выполнит такие действия:
- Получит список разрешенных IP из
/api/v1/infrastructure/origin-web-allowlist.txt - Откроет веб-порты сервера сайта только для этих IP
- Спросит, разрешать ли SSH только для IP из списка
- Если вы ответите Да, добавит текущий SSH IP и предложит добавить дополнительные IP/CIDR
- Проверит конфигурацию командой
nft -c - Создаст резервную копию старых правил GUJ
- Применит новые правила
Для SSH рекомендуемый ответ - Да. Если текущий SSH IP не удалось определить и список разрешенных IP пуст, скрипт остановится, чтобы не закрыть вам доступ.
SSH на сервере сайта
Доступ по SSH настраивается отдельно от веб-портов. Можно оставить SSH открытым для всех, но безопаснее разрешить его только выбранным IP.
Если ограничение включено, скрипт разрешает SSH:
- с текущего SSH IP, если он определен
- с IP из
/api/v1/infrastructure/ssh-allowlist.txt - с IP, которые вы введете вручную
Добавить IP в список через меню можно пунктом 7. Удалить IP - пунктом 8.
Если после удаления список станет пустым, скрипт оставит SSH открытым, чтобы не закрыть доступ к серверу.
Команды для запуска без меню
Для автоматизации используйте GUJ_ORIGIN_ACTION. Эти команды можно запускать повторно.
| Команда | Назначение |
|---|---|
GUJ_ORIGIN_ACTION=apply | Включить или переустановить полную защиту |
GUJ_ORIGIN_ACTION=disable | Отключить защиту сервера сайта правилами GUJ |
GUJ_ORIGIN_ACTION=status | Показать текущий статус |
GUJ_ORIGIN_ACTION=update-web-allowlist | Обновить из панели список разрешенных IP для веб-портов и применить правила |
GUJ_ORIGIN_ACTION=ssh-on | Ограничить SSH списком разрешенных IP |
GUJ_ORIGIN_ACTION=ssh-off | Снять ограничение и оставить SSH открытым |
GUJ_ORIGIN_ACTION=add-ssh-ip | Добавить IP/CIDR в список разрешенных для SSH |
GUJ_ORIGIN_ACTION=remove-ssh-ip | Удалить IP/CIDR из списка разрешенных для SSH |
Пример добавления SSH IP:
curl -fsSL https://files.guj.ru/node/lockdown-origin-host.sh | sudo env \
GUJ_ORIGIN_ACTION=add-ssh-ip \
GUJ_ORIGIN_SSH_ADD_IPS="198.51.100.10, 203.0.113.0/24" \
shПример удаления SSH IP:
curl -fsSL https://files.guj.ru/node/lockdown-origin-host.sh | sudo env \
GUJ_ORIGIN_ACTION=remove-ssh-ip \
GUJ_ORIGIN_SSH_REMOVE_IPS="198.51.100.10" \
shРучной список разрешенных IP для веб-портов
Если панель временно недоступна или нужно задать список вручную, передайте IP через GUJ_ORIGIN_ALLOWED_WEB_IPS:
curl -fsSL https://files.guj.ru/node/lockdown-origin-host.sh | sudo env \
GUJ_ORIGIN_ALLOWED_WEB_IPS="203.0.113.10, 203.0.113.11" \
GUJ_ORIGIN_TCP_PORTS="80, 443" \
shЕсли сервер сайта использует нестандартный веб-порт, добавьте его в GUJ_ORIGIN_TCP_PORTS, например 80, 443, 8080.
Отключение защиты
Пункт меню 2 или GUJ_ORIGIN_ACTION=disable удаляет только то, что создал скрипт:
- файл
/etc/nftables.d/guj-origin.nft - таблицу nftables
inet guj_origin
Другие таблицы nftables, правила хостинга, Docker и системные правила сетевого доступа не удаляются.
Проверка после настройки
- Проверьте статус через пункт меню 3 или
GUJ_ORIGIN_ACTION=status - Откройте сайт через защищенный домен и убедитесь, что он работает
- Попробуйте обратиться к серверу сайта напрямую с внешнего IP - подключение к веб-портам должно быть закрыто
- Проверьте, что SSH доступен с вашего IP
Этот скрипт предназначен только для сервера сайта. Сервер GUJ защищается скриптом harden-node-host.sh.
Если изменился IP сервера GUJ
Сначала обновите разрешённые IP на сервере сайта. Затем переводите домен на новый сервер GUJ.
curl -fsSL https://files.guj.ru/node/lockdown-origin-host.sh | sudo env \
GUJ_ORIGIN_ACTION=update-web-allowlist \
shПомогла ли эта статья?
Ваш ответ поможет сделать документацию понятнее