ESC

Start typing to search across invoices, services, domains, tickets, and more...

Search... Ctrl+K
Сеть и IP

Как скрыть IP сервера за Cloudflare: доступ к origin только с IP Cloudflare

5 шагов 20 мин чтения 7 просмотров 0
Содержание

Когда сайт работает через Cloudflare, посетители и злоумышленники видят IP-адреса узлов Cloudflare, а не IP вашего сервера. Но если реальный IP уже утёк или сервер по-прежнему принимает подключения на порты 80/443 с любых адресов, атакующий может просто обойти CDN и бить напрямую по origin. В этой инструкции пошагово разберём подключение, поиск утечек и настройку белого списка в файрволе, чтобы origin действительно оказался «спрятан».

Главное

  • Прокси Cloudflare скрывает только IP, в который резолвится домен: если origin принимает подключения на порты 80/443 с любого адреса, злоумышленник может обойти CDN и атаковать сервер напрямую.
  • Реальный IP origin-сервера чаще всего утекает через историю DNS, непроксируемые поддомены, почтовые сервисы, SSL-сертификат, отдаваемый при обращении по IP, и исходящие подключения самого приложения.
  • Главное условие защиты от обхода Cloudflare — файрвол на origin, который пропускает трафик на порты 80/443 только из официальных диапазонов IP Cloudflare.
  • Бесплатный тариф Cloudflare проксирует только HTTP/HTTPS, поэтому SSH, базы данных, игровые серверы и другие TCP/UDP-сервисы по-прежнему защищают собственный файрвол сервера и защита от DDoS на уровне дата-центра.
  • IMIDC предлагает VPS и выделенные серверы с защитой от DDoS и поддержкой нескольких IP, а клиенты могут запросить смену IP через тикет в клиентском центре.

Требования / подготовка

  • Домен уже подключён к Cloudflare (NS-серверы домена заменены на выданные Cloudflare)
  • ОС сервера: Ubuntu 22.04 / 24.04, Debian 12, Rocky Linux 9 или AlmaLinux 9, веб-сервер — Nginx
  • Есть доступ по SSH с правами sudo
  • Сначала обязательно убедитесь, что порт SSH разрешён в файрволе, иначе после изменения правил вы можете потерять доступ к серверу. Также рекомендуем держать открытой VNC-консоль провайдера как запасной способ входа

Пошаговая инструкция

Шаг 1. Включите проксирование Cloudflare

На странице DNS в панели Cloudflare переключите статус прокси для A/AAAA-записей сайта в «Proxied» (оранжевое облако). Теперь dig +short example.com должен возвращать IP-адреса Cloudflare, а не IP вашего сервера.

Шаг 2. Выберите режим SSL Full (strict)

В настройках SSL/TLS выберите Full (strict). Для сертификата на origin можно использовать Let's Encrypt или сгенерировать бесплатный сертификат Origin CA в панели Cloudflare (ему доверяет только Cloudflare, срок действия — до 15 лет). Не используйте режим Flexible: в нём трафик между Cloudflare и origin идёт открытым текстом, к тому же он часто вызывает циклические редиректы.

Шаг 3. Проверьте, где мог утечь реальный IP

До подключения CDN домен мог напрямую указывать на IP сервера. Типичные источники утечки:

  • История DNS: публичные сервисы истории DNS хранят старые записи.
  • Непроксируемые поддомены: поддомены вроде mail, ftp или dev с серым облаком указывают прямо на тот же сервер.
  • Почта: MX-запись указывает на этот же сервер, или в заголовках писем, отправленных сайтом, виден IP сервера.
  • SSL-сертификат и сайт по умолчанию: если при обращении по IP на порт 443 сервер отдаёт сертификат с вашим доменом, его проиндексируют сканеры, обходящие весь интернет.
  • Исходящие подключения приложения: вебхуки, загрузка удалённых изображений, pingback и подобные функции раскрывают IP origin третьим лицам.

Если IP точно утёк, одним Cloudflare проблему полностью не решить — рекомендуем сменить IP сервера. Клиенты IMIDC могут создать тикет в клиентском центре и узнать о вариантах смены или добавления IP.

Шаг 4. Разрешите порты 80/443 только для IP Cloudflare

Cloudflare официально публикует свои диапазоны IP по адресам https://www.cloudflare.com/ips-v4 и https://www.cloudflare.com/ips-v6. Команды ниже сразу берут актуальные списки.

Ubuntu / Debian (UFW):

sudo ufw allow OpenSSH        # If you changed the SSH port, use: sudo ufw allow <port>/tcp

for ip in $(curl -fsS https://www.cloudflare.com/ips-v4) $(curl -fsS https://www.cloudflare.com/ips-v6); do
  sudo ufw allow proto tcp from "$ip" to any port 80,443 comment 'Cloudflare'
done

# Remove earlier rules that opened 80/443 to everyone (delete whichever actually exist)
sudo ufw delete allow 'Nginx Full'
sudo ufw delete allow 80/tcp
sudo ufw delete allow 443/tcp

sudo ufw enable
sudo ufw status numbered

Если при удалении правила появляется сообщение «Could not delete non-existent rule», его можно игнорировать.

Rocky / Alma 9 (firewalld + ipset):

sudo firewall-cmd --permanent --new-ipset=cf4 --type=hash:net
sudo firewall-cmd --permanent --new-ipset=cf6 --type=hash:net --option=family=inet6

for ip in $(curl -fsS https://www.cloudflare.com/ips-v4); do
  sudo firewall-cmd --permanent --ipset=cf4 --add-entry="$ip"
done
for ip in $(curl -fsS https://www.cloudflare.com/ips-v6); do
  sudo firewall-cmd --permanent --ipset=cf6 --add-entry="$ip"
done

for svc in http https; do
  sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source ipset=cf4 service name=$svc accept"
  sudo firewall-cmd --permanent --add-rich-rule="rule family=ipv6 source ipset=cf6 service name=$svc accept"
done

# Remove the http/https services that were open to all sources
sudo firewall-cmd --permanent --remove-service=http --remove-service=https
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

Диапазоны IP Cloudflare время от времени меняются, поэтому раз в несколько месяцев сверяйте правила с официальным списком.

Важно: порты, опубликованные через Docker, обходят правила UFW. Если сайт работает в Docker, привяжите порты контейнера к 127.0.0.1, а наружу отдавайте трафик через Nginx на хосте.

Шаг 5. Отклоняйте запросы напрямую по IP

Добавьте в Nginx сайт по умолчанию, который обрывает соединения по голому IP или неизвестным именам хостов, чтобы сертификат не выдавал ваш домен:

sudo tee /etc/nginx/conf.d/00-default.conf > /dev/null <<'EOF'
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 444;
}
server {
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    server_name _;
    ssl_reject_handshake on;
}
EOF

Директива ssl_reject_handshake требует Nginx 1.19.4 или новее. Штатные версии в Ubuntu 24.04, Debian 12 и Rocky/Alma 9 подходят, а версия 1.18 из Ubuntu 22.04 — нет, поэтому обновитесь из официального репозитория nginx.org. В Ubuntu/Debian также удалите встроенный сайт по умолчанию, чтобы избежать конфликта default_server:

sudo rm -f /etc/nginx/sites-enabled/default

Шаг 6. Записывайте реальные IP посетителей в Nginx

За Cloudflare в логах Nginx вместо IP клиента оказывается IP узла Cloudflare. Восстановить настоящий адрес поможет модуль realip:

{
  for ip in $(curl -fsS https://www.cloudflare.com/ips-v4) $(curl -fsS https://www.cloudflare.com/ips-v6); do
    echo "set_real_ip_from $ip;"
  done
  echo "real_ip_header CF-Connecting-IP;"
} | sudo tee /etc/nginx/conf.d/cloudflare-realip.conf > /dev/null

sudo nginx -t && sudo systemctl reload nginx

Шаг 7. Проверьте результат

Выполните команды с другой машины. Первая должна завершиться ошибкой или по тайм-ауту, а доступ по домену — работать как обычно:

curl -m 10 -I http://YOUR_SERVER_IP
curl -I https://example.com

Частые вопросы (FAQ)

После настройки сайт не открывается, Cloudflare показывает ошибку 521/522. Что делать?

Это значит, что Cloudflare не может подключиться к origin. Проверьте, что в файрволе есть все диапазоны IP Cloudflare (включая IPv6), что Nginx запущен и что режим SSL соответствует сертификату на origin.

Может ли Cloudflare защитить SSH, игровые порты и другие не-веб-сервисы?

Бесплатный тариф проксирует только трафик HTTP/HTTPS и только на определённых портах. SSH, базы данных, игровые серверы и другие TCP/UDP-сервисы через Cloudflare не идут, поэтому их по-прежнему защищают собственный файрвол сервера и защита от DDoS на уровне дата-центра.

Есть ли более строгая проверка, чем белый список IP?

Да. Включите в Cloudflare Authenticated Origin Pulls (mTLS) — тогда Nginx на origin будет принимать только запросы с клиентским сертификатом Cloudflare. Это не позволит посторонним направить на ваш IP трафик через собственный аккаунт Cloudflare.

Что делать, если IP origin уже атакуют?

Сначала определите тип атаки и объём трафика, затем смените IP и выполните все описанные выше шаги защиты. Мощные атаки полностью забивают канал аплинка, и в этом случае нужна защита от DDoS повышенной ёмкости от провайдера.

Итоги

Скрыть IP origin можно, соблюдая три правила: весь трафик идёт через прокси Cloudflare, прошлые утечки найдены и устранены, а файрвол origin принимает подключения только от Cloudflare. С не-HTTP-сервисами и очень крупными атаками CDN в одиночку не справится. IMIDC предлагает VPS и выделенные серверы с защитой от DDoS и поддержкой нескольких IP — они могут стать базовым уровнем защиты для вашего origin. Чтобы сменить IP или подобрать вариант защиты, создайте тикет в клиентском центре — поддержка работает 24/7.

Читайте также

Помог ли вам данный ответ?

Похожие руководства