Как я из cloudflare мигрировал

Во всех своих проектах до недавнего времени использовал этот замечательный сервис. Да и такое ощущение, что его использует половина интернета.

Ведь за свою бесплатную цену Cloudflare предлагает действительно богатый функционал:

  • защита от DDoS,
  • кэширование статических файлов,
  • выпуск SSL-сертификатов,
  • туннель (Cloudflare Tunnel) и Zero Trust,
  • и, конечно, DNS-роутинг.

С помощью их Cloudflare Tunnel мне удавалось строить довольно хитрую схему, в которой весь трафик шел по TCP-туннелю, а сами сервера оставались полностью скрыты от внешнего мира. Безопасность и устойчивость за 0 рублей - красота

Это все вкусно, но в текущих реалиях за последние 3 года Cloudflare очень сильно деградировал. Блокировка его IP-адресов на территории РФ и похожая политика самого Cloudflare достигли своего пика в середине июля. В результате сайты, находящиеся под Cloudflare, просто перестали открываться для большей части пользователей в России.

Пришло время прощаться.

Была идея сделать пару reverse proxy-серверов, которые по туннелю передавали бы трафик на основной сервер. Архитектурно красиво, но экономически — сомнительно. Да и мы не Яндекс плодить инфраструктуру ради пары сервисов: GitLab, Affine, ArgoCD и нескольких приложений.

Что нужно было от замены Cloudflare:

  • Автоматическая выдача SSL-сертификатов.
  • DNS-провайдер, совместимый с cert-manager, и желательно российский.
  • Минимальная защита от DDoS.
  • Базовый мониторинг.

Поэтому я выбрал народное и проверенное решение: Let’s Encrypt + Fail2Ban (спасибо за подсказку) + Prometheus/Grafana

Самым большим открытием стало, что не нужно изобретать велосипед для интеграции DNS с cert-manager. Selectel выложил готовый веб хук для интеграции с Let's Encrypt.

Он позволяет cert-manager автоматически выпускать сертификаты через DNS-валидацию без танцев с бубном. Указываешь ClusterIssuer, и всё работает.

И что ещё приятнее — в каждом проекте не нужно руками добавлять сертификаты. Достаточно одной аннотации в Ingress cert-manager.io/cluster-issuer: "letsencrypt-dns" и После этого cert-manager сам всё выдаёт и обновляет - ну вкусняшка.

Остались два пункта, которые раньше обеспечивал Cloudflare: защита от DDoS и наблюдение за сервисами.

Fail2Ban Для базовой защиты я использую Fail2Ban, настроенный на отслеживание логов Nginx и SSH. Он автоматически банит IP-адреса, которые ведут себя подозрительно: перебирают пароли, стучатся не туда или пробуют нестандартные пути (типа /.env, /admin и т.п.) Плюс — добавил логирование с IP в отдельный файл и простую систему алертов.

Prometheus + Grafana Для мониторинга завёл связку Prometheus + Grafana. Это позволяет отслеживать:

  • нагрузку на CPU, память, диск,
  • трафик,
  • аптайм сервисов,
  • а также кастомные метрики. Можно легко повесить алерты на Discord/Telegram и держать руку на пульсе - опять красота.

Cloudflare — мощный инструмент, но он перестал быть универсальным решением для рунета. Миграция на своё решение заняла время, но дала контроль над инфраструктурой и гибкость.

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