End-to-end шифрование и SSL для вашего сервера через Cloudflare прокси

5 min read

При создании современных веб сервисов возникает много задач инфраструктурного характера:

Сегодня существуют сервисы (например Cloudflare), которые упрощают решение этих задач.

Они работают в качестве прокси. Клиент будет подключаться к серверам Cloudflare, который выступит в качестве посредника запросов и ответов. Таким образом клиент не знает реального адреса вашего веб ресурса и взаимодействует с ним через оптимизированные каналы Cloudflare.

Режим прокси сервера

В данной статье мы решим конкретную задачу – покажем как настроить end-to-end шифрование трафика, обеспечить ваш сайт бесплатным SSL сертификатом, а сам сервер настроить таким образом, что обратиться к нему может только аутентифицированный источник со стороны Cloudflare.

Варианты решения проблемы

При подключении вашего домена к Cloudflare и выбора режима прокси, вы автоматически получаете SSL сертификат. Однако, ваш веб-сервер все-равно остается доступен при условии знания его реального IP адреса. Это может приводить к различным проблемам за счет ошибок конфигурации и добавлять новые векторы атак.

IP whitelisting

Если погуглить решения данной проблемы, можно заметить, что интернет в основном полон предложений ограничивать запросы по IP, не принадлежащим Cloudflare.

Динамический список IP адресов Cloudflare

SSL client certificates

Мы предлагаем использовать для решения этой задачи штатный функционал Authenticated Origin Pulls. Он заключается в получении SSL сертификата, который Cloudflare будет использовать для аутентификации на вашем веб сервере. Нужно лишь установить его в интерфейсе и настроить веб-сервер для проверки клиентского сертификата и блокирования доступа без него.

Аутентифицированное TLS соединение

Инструкция по настройке

Допустим, у вас есть домен, который вы уже подключили к Cloudflare и хотите настроить для него защищенное прокси соединение. В нашем случае таким адресом будет example.com.

Включение прокси для домена

В разделе DNS вашей панели управления необходимо найти или создать доменную А запись и включить режим proxy.

Proxy status должен быть включен

На вкладке SSL/TLS при это нужно выбрать режим end-to-end шифрования Full (strict).

Включен режим шифрования end-to-end

Генерация Origin сертификата

Теперь наступает самое интересное. На вкладке SSL/TLS нужно выбрать секцию Origin Server и нажать кнопку Create Certificate для создания сертификата.

Страница Origin Certificates

Далее вы можете оставить всё по умолчанию, доверив Cloudflare сгенерировать сертификат для вас, а можете по желанию загрузить свой собственный сертификат.

Страница генерации Origin сертификата

Важно отметить, что в бесплатной версии сертификат будет поддерживаться только для домена 1 и 2 уровней. Проще говоря, если вы владеете доменом example.com, то вы сможете использовать аутентификацию только для домена example.com и *.example.com. Использовать этот подход для домена test.stage.example.com увы не получится.

В результате вам будут представлены для копирования два файла: сертификат (CRT) и ключ (KEY).

Теперь на предыдущей странице вы можете включить обязательную аутентификацию.

Включенная обязательная аутентификация

Настраиваем Nginx

Нам понадобится еще один файл — корневой сертификат, которым подписаны клиентские.

Сохраним все три файла в директорию /etc/ssl.

Теперь ваша Nginx конфигурация может выглядеть следующим образом.

server { listen 443 ssl; server_name example.com; ssl on; ssl_certificate /etc/ssl/example.com.crt; ssl_certificate_key /etc/ssl/example.com.key; ssl_client_certificate /etc/ssl/origin-pull-ca.pem; ssl_verify_client on; location / { proxy_pass http://localhost:3000/; } } server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; }

Проверим, что сайт доступен по адресу https://example.com

Дополнительно проверим, что сайт недоступен по прямому адресу без аутентификации:

curl -H "Host: example.com" https://<IP ADDRESS>/ -v -k

В ответ вы должны получить ошибку 400 No required SSL certificate was sent

Выводы

Мы разобрали как включить Cloudflare прокси для вашего домена, автоматически получить бесплатный SSL сертификат и настроить end-to-end шифрование и аутентификацию при помощи штатного функционала Authenticated Origin Pulls.