Сервер сайта
Защита сервера сайта
Как закрыть прямой вход на сервер сайта
Зачем закрывать прямой вход
Origin-сервер - это сервер, на котором реально работает сайт. GUJ-нода принимает публичный трафик, фильтрует его и проксирует разрешенные запросы на origin.
Если origin открыт для всего интернета, атакующий может обойти GUJ и обратиться к сайту напрямую. Тогда WAF, anti-DDoS, bot-фильтры и rate limit на GUJ-ноде не помогут.
Правильная схема: посетители ходят на GUJ-ноду, а origin принимает HTTP/HTTPS только от IP GUJ-нод и разрешенных инфраструктурных IP.
Что делает lockdown-origin-host.sh
- Создает отдельный файл правил
/etc/nftables.d/guj-origin.nft - Создает отдельную nftables table
inet guj_origin - Закрывает входящие подключения по умолчанию
- Открывает web-порты origin, обычно
80и443, только для IP из allowlist - Скачивает web allowlist из панели GUJ, если ручной список не задан
- Отдельно спрашивает, ограничивать ли SSH по IP allowlist
- Пытается добавить текущий SSH IP автоматически, чтобы не отрезать доступ
- Делает backup старых GUJ-правил перед применением
- При отключении удаляет только правила GUJ, не трогая чужие firewall-правила сервера
Где запускать
Запускайте этот скрипт только на origin-сервере сайта. Не запускайте его на GUJ-ноде.
Если сайт и GUJ-нода установлены на разных серверах, lockdown-origin-host.sh запускается на сервере сайта, а harden-node-host.sh - на сервере GUJ-ноды.
Перед запуском
- Убедитесь, что у вас есть SSH-доступ к серверу и права root/sudo
- Убедитесь, что домен уже может работать через GUJ-ноду
- Если SSH должен быть закрыт по allowlist, заранее подготовьте IP, с которых администраторы будут подключаться к серверу
- Если origin слушает не только
80/443, заранее определите список web-портов, например80, 443, 8080 - Если используется не основная панель
https://guj.ru, передайте URL панели черезGUJ_PANEL_URL
Обычный запуск с меню
Выполните на origin-сервере:
curl -fsSL https://files.guj.ru/node/lockdown-origin-host.sh | sudo shЕсли команда запущена в интерактивной SSH-сессии, откроется меню:
| Пункт | Что делает |
|---|---|
| 1 - Включить/переустановить полную защиту origin | Скачивает web allowlist из панели, генерирует правила и применяет firewall |
| 2 - Отключить полную защиту GUJ для origin | Удаляет только guj_origin table и файл guj-origin.nft |
| 3 - Показать текущий статус | Показывает файл правил, активную nftables table, web allowlist и состояние SSH allowlist |
| 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 - Откроет web-порты origin только для этих IP
- Спросит, закрывать ли SSH по allowlist
- Если вы ответите Да, добавит текущий SSH IP и предложит добавить дополнительные IP/CIDR
- Проверит конфигурацию командой
nft -c - Сделает backup старых GUJ-правил
- Применит новые правила
Для SSH рекомендуемый ответ - Да. Если текущий SSH IP не удалось определить и allowlist пустой, скрипт остановится, чтобы не отрезать доступ.
SSH на origin
SSH управляется отдельно от web-портов. Вы можете оставить SSH открытым, но безопаснее включить allowlist.
При включенном SSH allowlist скрипт разрешает SSH:
- с текущего SSH IP, если он определен
- с IP из
/api/v1/infrastructure/ssh-allowlist.txt - с IP, которые вы введете вручную
Добавить IP в SSH allowlist через меню можно пунктом 7. Удалить IP - пунктом 8.
Если после удаления список станет пустым, скрипт оставит SSH открытым, чтобы не закрыть доступ к серверу.
Неинтерактивные команды
Для автоматизации используйте GUJ_ORIGIN_ACTION. Эти команды можно запускать повторно.
| Команда | Назначение |
|---|---|
GUJ_ORIGIN_ACTION=apply | Включить или переустановить полную защиту |
GUJ_ORIGIN_ACTION=disable | Отключить GUJ-защиту origin |
GUJ_ORIGIN_ACTION=status | Показать текущий статус |
GUJ_ORIGIN_ACTION=update-web-allowlist | Обновить web allowlist из панели и применить правила |
GUJ_ORIGIN_ACTION=ssh-on | Включить SSH allowlist |
GUJ_ORIGIN_ACTION=ssh-off | Отключить SSH allowlist и оставить SSH открытым |
GUJ_ORIGIN_ACTION=add-ssh-ip | Добавить IP/CIDR в SSH allowlist |
GUJ_ORIGIN_ACTION=remove-ssh-ip | Удалить IP/CIDR из SSH allowlist |
Пример добавления 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Ручной web allowlist
Если панель временно недоступна или нужно задать список вручную, передайте 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Если origin использует нестандартный web-порт, добавьте его в GUJ_ORIGIN_TCP_PORTS, например 80, 443, 8080.
Отключение защиты
Пункт меню 2 или GUJ_ORIGIN_ACTION=disable удаляет только то, что создал скрипт:
- файл
/etc/nftables.d/guj-origin.nft - nftables table
inet guj_origin
Чужие таблицы nftables, правила хостинга, Docker и системные firewall-правила не удаляются.
Проверка после настройки
- Проверьте статус через пункт меню 3 или
GUJ_ORIGIN_ACTION=status - Откройте сайт через защищенный домен и убедитесь, что он работает
- Попробуйте обратиться к origin напрямую с внешнего IP - подключение к web-портам должно быть закрыто
- Проверьте, что SSH доступен с вашего IP
Этот скрипт предназначен только для сервера сайта. Сама GUJ-нода защищается скриптом harden-node-host.sh.
Если IP ноды изменился
Сначала обновите web allowlist и правила firewall на origin, затем переводите домен на новую ноду.
curl -fsSL https://files.guj.ru/node/lockdown-origin-host.sh | sudo env \
GUJ_ORIGIN_ACTION=update-web-allowlist \
shПомогла ли эта статья?
Ваш ответ поможет сделать документацию понятнее