Шаг 1. Найти утечки
- Проверьте историю DNS домена в публичных сервисах исторических записей: если сайт когда-то работал без защиты, старый адрес почти наверняка там есть.
- Переберите поддомены: mail, ftp, cpanel, admin, dev, test, staging, old. Каждый, который указывает прямо на сервер, раскрывает его адрес.
- Отправьте письмо с сайта (например, восстановление пароля) и посмотрите заголовки Received.
- Проверьте журналы прозрачности сертификатов на все выпущенные имена — там видны забытые поддомены.
- Найдите функции сайта, которые делают исходящие запросы по ссылке пользователя: загрузка картинки по URL, предпросмотр ссылок, вебхуки.
- Проверьте TXT-запись SPF: в ней часто прямо указан IP сервера (ip4:...).
- Посмотрите, не отдаёт ли сервер свой адрес в заголовках ответа, страницах ошибок или файлах вроде phpinfo.
# Какие адреса сейчас отдают поддомены
for s in www mail ftp cpanel admin dev test staging old api; do
printf '%-10s ' "$s"; dig +short "$s.example.ru" A | tr '\n' ' '; echo
done
# Есть ли IP в SPF
dig +short example.ru TXT | grep spfШаг 2. Сменить адрес
Если адрес нашёлся в истории DNS или где-то ещё, единственный надёжный путь — получить у хостинга новый IP и сразу подключить его к фильтру, нигде не публикуя. Перед сменой убедитесь, что новый адрес не попадёт в те же места: поддомены переведены на фильтр или удалены, почта вынесена, SPF не содержит адрес веб-сервера.
Шаг 3. Закрыть прямой доступ
Даже неизвестный адрес могут найти сканированием диапазонов хостинга, поэтому порты 80 и 443 должны принимать подключения только с узлов фильтрации. Делать это лучше на уровне файрвола: тогда прямые подключения не доходят до веб-сервера вообще.
# iptables: HTTP(S) только с узлов фильтрации (адреса условные)
iptables -A INPUT -p tcp -m multiport --dports 80,443 -s 203.0.113.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 -s 198.51.100.0/24 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j DROPШаг 4. Вынести почту
MX-запись указывает прямо на почтовый сервер. Если почта работает на том же сервере, что и сайт, вынесите её на отдельный сервер или внешний сервис. Письма с сайта отправляйте через внешний SMTP: тогда в заголовках будет адрес почтового сервиса, а не ваш.
Шаг 5. Проверить результат
Попробуйте открыть сайт по IP напрямую с внешней машины: curl -k https://IP/ -H 'Host: example.ru' должен завершиться таймаутом. Повторяйте проверку утечек после каждого нового поддомена и смены почтовой схемы.
Вопросы и ответы
Можно ли не менять IP, а просто закрыть доступ файрволом?
Закрытый файрволом сервер не ответит на HTTP-запросы, но объёмная атака на канал по известному адресу всё равно может его перегрузить. Поэтому если адрес засветился, его лучше сменить.
Как быть с SSH и панелью управления?
Их адрес тот же, что у сервера. Ограничьте доступ к ним своими адресами или VPN, а панель управления не публикуйте на поддомене основного домена.
Помогает ли CDN скрыть адрес?
Только если весь трафик идёт через него, а прямой доступ закрыт. CDN, через который отдаётся лишь статика, адрес основного сервера не скрывает.