Cloudflare – это сервис, который находится между посетителем веб-сайта и сервером и работает как обратный прокси. Он предоставляет сеть доставки контента (CDN), набор инструментов для защиты от DDoS атак и распределенные серверы доменных имен.
Nginx – это очень популярный веб-сервер, который обслуживает множество крупных сайтов с высоким трафиком. Различные организации часто используют Nginx для обслуживания сайтов, а Cloudflare –как провайдер CDN и DNS.
В этом руководстве вы защитите свой сайт с помощью сертификата Origin CA от Cloudflare и настроите Nginx для поддержки авторизованных pull запросов. Преимущества такой настройки в том, что у вас будет доступ к CDN и быстрое разрешение DNS, и при этом все соединения будут проходить через Cloudflare. Это не даст злоумышленникам получить доступ к серверу.
Требования
- Виртуальный сервер с пользователем sudo
- Nginx, установленный и настроенный
- Аккаунт Cloudflare.
- Зарегистрированный и добавленный в аккаунт Cloudflare домен, который указывает на сервер Nginx.
- Виртуальный хост Nginx для этого домена.
1: Создание TLS-сертификата Origin CA
Центр сертификации Cloudflare Origin CA позволяет создавать подписанные Cloudflare бесплатные TLS-сертификаты и устанавливать их на сервер Nginx. TLS-сертификат Cloudflare поможет нам защитить соединение между серверами Cloudflare и Nginx.
Сгенерировать сертификат Origin CA можно через панель управления Cloudflare в браузере. Выберите домен, для которого переназначается сертификат, и перейдите в раздел SSL/TLS. Откройте вкладку Origin Server и нажмите Create Certificate.

Оставьте опцию Let CloudFlare generate a private key and a CSR включенной.

Нажмите Next, после чего на экране появится диалоговое окно с полями Origin Certificate и Private key. Теперь нам нужно перенести сертификат и закрытый ключ с CloudFlare на наш сервер. Для безопасности информация о закрытом ключе больше отображаться не будет, поэтому скопируйте ключ на свой сервер, прежде чем нажимать Ок.

Хранить сертификат мы будем в каталоге /etc/ssl/. Он уже существует на сервере.
Сначала скопируйте содержимое сертификата Origin Certificate, который отображается в диалоговом окне браузера.
Затем откройте файл /etc/ssl/ cert.pem для редактирования:
sudo nano /etc/ssl/cert.pem
Вставьте содержимое сертификата в этот файл. Затем сохраните и выйдите из редактора.
Вернитесь в браузер и скопируйте содержимое Private key. Откройте файл /etc/ssl/key.pem в редакторе:
sudo nano /etc/ssl/key.pem
Вставьте ключ в файл, сохраните его и закройте редактор.
Примечание: Иногда, когда вы копируете сертификат и ключ из панели управления Cloudflare и вставляете их в файлы, вместе с текстом вставляются пустые строки. Nginx воспринимает такие сертификаты и ключи как недействительные, поэтому пустые строки нужно обязательно удалить.
Важно! Сертификат Origin CA принимает только Cloudflare, поэтому использовать его можно только на серверах, которые подключены к Cloudflare. Если в какой-то момент вы приостановите или отключите Cloudflare, сертификат перестанет быть доверенным, а Origin CA выдаст ошибку.
Итак, мы скопировали ключ и сертификат на сервер. Пора обновить конфигурацию Nginx, чтобы использовать их.
2: Установка Origin CA на Nginx
С помощью панели управления Cloudlfare мы получили сертификат и закрытый ключ, а затем сохранили файлы на сервере. Нужно обновить конфигурацию Nginx, чтобы веб-сервер мог использовать их для защиты соединения между серверами Cloudflare и вашим сервером.
Сначала нужно изменить настройки UFW, чтобы он мог поддерживать трафик HTTPS. Включите стандартный профиль Nginx Full, который открывает трафик по портам 80 и 443.
sudo ufw allow ‘Nginx Full’
Перезапустите брандмауэр:
sudo ufw reload
Убедитесь, что новые правила вступили в силу:
sudo ufw status
Вы увидите такой вывод:
Status: activeTo Action From— —— —-OpenSSH ALLOW AnywhereNginx Full ALLOW AnywhereOpenSSH (v6) ALLOW Anywhere (v6)Nginx Full (v6) ALLOW Anywhere (v6)
После этого можно отредактировать блок server (аналог виртуального хоста в Nginx). Во время установки Nginx создает стандартный виртуальный хост. Удалите его, если он существует, на данный момент у нас уже должен быть пользовательский виртуальный хост.
sudo rm /etc/nginx/sites-enabled/default
Откройте конфигурационный файл Nginx для вашего домена:
sudo nano /etc/nginx/sites-available/your_domain
Сейчас он должен выглядеть так:
server { listen 80; listen [::]:80; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; server_name your_domain www.your_domain; location / { try_files $uri $uri/ =404; }
Сюда нужно внести такие поправки:
- Настроить прослушивание порта 80 и перенаправить все запросы на https.
- Включить прослушивание порта 443 и добавить поддержку сертификата и закрытого ключа.
Внесите эти изменения в файл, после чего он будет выглядеть так:
server { listen 80; listen [::]:80; server_name your_domain www.your_domain; return 302 https://$server_name$request_uri;}server { # SSL configuration listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; server_name your_domain www.your_domain; root /var/www/your_domain/html; index index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; }}
Сохраните и закройте файл.
Проверьте файл на наличие ошибок:
sudo nginx -t
Если ошибок нет, обновите параметры, перезапустив Nginx:
sudo systemctl restart nginx
Перейдите в раздел SSL/TLS в панели Cloudflare, откройте вкладку Overview и измените режим SSL/TLS encryption mode на Full (strict). После этого Cloudflare сможет шифровать соединение между своими серверами и Nginx.

После этого посетите свой сайт (https://your_domain) и убедитесь, что он настроен правильно. На экране вы должны увидеть свою домашнюю страницу, а браузер сообщит, что сайт защищен.
Чтобы просмотреть детали сертификата, откройте Developer Tools, выберите Security tab, а затем View Certificate.
Примечание: Возможно, вы заметили, что в сертификате Cloudflare не отмечен как издатель. Это связано с тем, что Cloudflare может использовать другие центры сертификации, такие как Let’s Encrypt. Полный список можно найти в документации Cloudflare.
Далее мы настроим Authenticated Origin Pulls. Благодаря этому сервер сможет подтвердить, что он взаимодействует именно с Cloudflare, а не с каким-то посторонним сервером. При этом Nginx будет настроен на прием запросов, которые используют действительный сертификат клиента Cloudflare. Запросы, которые не прошли через CloudFlare, будут сброшены.
3: Настройка Authenticated Origin Pulls
А теперь мы поможем Nginx убедиться, что он действительно взаимодействует с Cloudflare. Для этого нужно настроить аутентификацию клиента TLS.
При TLS-рукопожатии обе стороны предоставляют свои сертификаты на проверку. При этом сервер настроен только на прием запросов, которые используют валидный сертификат клиента Cloudflare. Запросы, которые не прошли через Cloudflare, не имеют необходимого сертификата, а потому будут сбрасываться. Это означает, что злоумышленники не смогут обойти систему безопасности Cloudflare и напрямую подключиться к Nginx.
Cloudflare представляет сертификаты, подписанные ЦС, так:
——BEGIN CERTIFICATE——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——END CERTIFICATE——
Также можно загрузить сертификат напрямую с Cloudflare.
Скопируйте сертификат.
Откройте файл /etc/ssl/cloudflare.crt, где будет храниться наш сертификат.
sudo nano /etc/ssl/cloudflare.crt
Вставьте сертификат в файл, сохраните и закройте его.
Теперь обновите конфигурацию Nginx, чтобы включить поддержку TLS Authenticated Origin Pulls. Откройте конфигурационный файл домена:
sudo nano /etc/nginx/sites-available/your_domain
Добавьте директивы ssl_client_certificate и ssl_verify_client, как показано ниже:
. . .server { # SSL configuration listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/ssl/cert.pem; ssl_certificate_key /etc/ssl/key.pem; ssl_client_certificate /etc/ssl/cloudflare.crt; ssl_verify_client on; . . .
Сохраните файл и закройте редактор.
Убедитесь, что в конфигурациях Nginx нет ошибок:
sudo nginx -t
Если ошибок нет, перезапустите Nginx, чтобы изменения вступили в силу:
sudo systemctl restart nginx
Чтобы включить Authenticated Pulls, откройте раздел SSL/TLS в панели Cloudflar, перейдите во вкладку Origin Server и включите опцию Authenticated Origin Pulls.

Посетите свой сайт, чтобы убедиться, что он настроен правильно. Как и прежде, вы увидите свою домашнюю страницу.
Чтобы убедиться, что сервер будет принимать запросы через ЦС Cloudflare, попробуйте отключить Authenticated Origin Pulls, а затем перезагрузить сайт. Появится следующее сообщение об ошибке:

Сервер возвращает ошибку, если запрос не подписан центром Cloudflare.
Примечание: Большинство браузеров кэшируют запросы, поэтому во время проверки вы можете использовать режим инкогнито. Чтобы Cloudflare не кэшировал запросы вашего веб-сайта, перейдите в раздел Overview в панели управления Cloudflare и нажмите на переключатель Development Mode.
Протестировав настройку, вернитесь в раздел SSL/TLS и снова включите Authenticated Origin Pulls.
Заключение
В этом мануале вы научились включать поддержку шифрования трафика между Cloudflare и сервером Nginx, используя сертификат Origin от Cloudflare, а также настраивать Authenticated Origin Pulls на сервере Nginx. Теперь сервер принимает запросы только от серверов Cloudflare, не позволяя посторонним пользователям подключаться напрямую.
