Как разместить сайт с помощью Cloudflare и Nginx в Ubuntu 16.04

Автор выбрал Electronic Frontier Foundation для получения пожертвования в размере 200 долларов США в рамках Write для ДОНОЦИЙ program.

Вступление

Cloudflare - это сервис, который находится между посетителем и сервером владельца сайта, выступая в качестве обратного прокси-сервера для сайтов. Cloudflare предоставляет сеть доставки контента (CDN), а также услуги по предотвращению DDoS-атак и серверу распределенных доменных имен.

Nginx - это популярный веб-сервер, отвечающий за размещение некоторых из крупнейших и наиболее посещаемых сайтов в Интернете. Организации обычно обслуживают веб-сайты с помощью Nginx и используют Cloudflare в качестве поставщика CDN и DNS.

В этом руководстве вы защитите свой веб-сайт, обслуживаемый Nginx, с помощью сертификата Origin CA от Cloudflare и сконфигурируете Nginx для использования аутентифицированных запросов извлечения. Преимущества использования этой настройки состоят в том, что вы получаете выгоду от CDN Cloudflare и быстрого разрешения DNS, гарантируя, что все соединения проходят через Cloudflare. Это предотвращает попадание любых вредоносных запросов на ваш сервер.

Предпосылки

Для завершения этого урока вам понадобится следующее:

Шаг 1 - Генерация исходного сертификата CA TLS

Cloudflare Origin CA позволяет вам генерировать бесплатный сертификат TLS, подписанный Cloudflare, для установки на ваш сервер Nginx. С помощью сгенерированного Cloudflare сертификата TLS вы можете защитить соединение между серверами Cloudflare и вашим сервером Nginx.

Чтобы создать сертификат с помощью Origin CA, перейдите в раздел * Crypto * панели управления Cloudflare. Оттуда нажмите кнопку * Создать сертификат * в разделе * Сертификаты происхождения *:

изображение: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/KcTiCQW.png [параметр создания сертификата на информационной панели Cloudflare]

Оставьте параметр по умолчанию * Let CloudFlare генерировать закрытый ключ и CSR * выбранным.

изображение: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/8IX2ULI.png [Параметры исходного CA CA]

Нажмите * Next *, и вы увидите диалоговое окно с * Origin Certificate * и * Private key *. Вам необходимо перенести как сертификат источника, так и закрытый ключ из CloudFlare на ваш сервер.

изображение: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/bIBA8tf.png [Диалог, показывающий сертификат происхождения и закрытый ключ]

Мы будем использовать каталог + / etc / ssl / certs + на сервере для хранения сертификата происхождения. Каталог + / etc / ssl / private + будет содержать файл закрытого ключа. Обе папки уже существуют на сервере.

Сначала скопируйте содержимое * Origin Certificate *, отображаемого в диалоговом окне вашего браузера.

Затем на вашем сервере откройте + / etc / ssl / certs / cert.pem + для редактирования:

sudo nano /etc/ssl/certs/cert.pem

Вставьте содержимое сертификата в файл. Затем сохраните и выйдите из редактора.

Затем вернитесь в браузер и скопируйте содержимое * Закрытого ключа *. Откройте файл + / etc / ssl / private / key.pem + для редактирования:

sudo nano /etc/ssl/private/key.pem

Вставьте ключ в файл, сохраните файл и выйдите из редактора.

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

Шаг 2 - Установка сертификата Origin CA в Nginx

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

Nginx создает блок сервера по умолчанию во время установки. Удалите его, если он существует, так как вы уже настроили пользовательский блок сервера для своего домена:

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

Затем откройте файл конфигурации Nginx для вашего домена:

sudo nano /etc/nginx/sites-available/

Файл должен выглядеть так:

example.com»> / и т.д. / Nginx / сайты-доступные /

server {
       listen 80;
       listen [::]:80;

       root /var/www//html;
       index index.html index.htm index.nginx-debian.html;

       server_name  ;

       location / {
               try_files $uri $uri/ =404;
       }
}

Мы изменим файл конфигурации Nginx, чтобы сделать следующее:

  • Прослушайте порт + 80 + и перенаправьте все запросы на использование + https +.

  • Прослушайте порт + 443 + и используйте сертификат происхождения и закрытый ключ, который вы добавили в предыдущем разделе.

Измените файл так, чтобы он выглядел следующим образом:

example.com»> / и т.д. / Nginx / сайты-доступные /

server {
   listen 80;
   listen [::]:80;
   server_name  ;

}











   server_name  ;

   root /var/www/example.com/html;
   index index.html index.htm index.nginx-debian.html;


   location / {
           try_files $uri $uri/ =404;
   }

Сохраните файл и выйдите из редактора.

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

sudo nginx -t

Если проблем не обнаружено, перезапустите Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

Теперь перейдите в раздел * Crypto * панели мониторинга Cloudflare и измените режим * SSL * на * Full *. Это информирует Cloudflare о необходимости всегда шифровать соединение между Cloudflare и вашим исходным сервером Nginx.

изображение: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/xO3frBH.png [Включить полный режим SSL на панели инструментов Cloudflare]

Теперь посетите ваш сайт по адресу + https: // +, чтобы убедиться, что он настроен правильно. Вы увидите свою домашнюю страницу, и браузер сообщит, что сайт безопасен.

В следующем разделе вы настроите Authenticated Origin Pulls, чтобы убедиться, что ваш исходный сервер действительно общается с Cloudflare, а не с другим сервером. Таким образом, Nginx будет настроен на прием только тех запросов, которые используют действительный сертификат клиента от Cloudflare, а запросы, которые не прошли через CloudFlare, будут отбрасываться.

Шаг 3 - Настройка проверенных источников

Сертификат Origin CA поможет Cloudflare убедиться, что он взаимодействует с правильным сервером происхождения. Но как ваш исходный сервер Nginx может убедиться, что он действительно общается с Cloudflare? Введите аутентификацию клиента TLS.

В аутентифицированном клиентском рукопожатии TLS обе стороны предоставляют сертификат для проверки. Исходный сервер настроен на прием только тех запросов, которые используют действительный сертификат клиента от Cloudflare. Запросы, которые не прошли через Cloudflare, будут отброшены, поскольку у них не будет сертификата Cloudflare. Это означает, что злоумышленники не могут обойти меры безопасности Cloudflare и напрямую подключиться к вашему серверу Nginx.

Cloudflare представляет сертификаты, подписанные ЦС, со следующим сертификатом:

-----BEGIN CERTIFICATE-----
MIIGBjCCA/CgAwIBAgIIV5G6lVbCLmEwCwYJKoZIhvcNAQENMIGQMQswCQYDVQQG
EwJVUzEZMBcGA1UEChMQQ2xvdWRGbGFyZSwgSW5jLjEUMBIGA1UECxMLT3JpZ2lu
IFB1bGwxFjAUBgNVBAcTDVNhbiBGcmFuY2lzY28xEzARBgNVBAgTCkNhbGlmb3Ju
aWExIzAhBgNVBAMTGm9yaWdpbi1wdWxsLmNsb3VkZmxhcmUubmV0MB4XDTE1MDEx
MzAyNDc1M1oXDTIwMDExMjAyNTI1M1owgZAxCzAJBgNVBAYTAlVTMRkwFwYDVQQK
ExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmlnaW4gUHVsbDEWMBQGA1UE
BxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZvcm5pYTEjMCEGA1UEAxMa
b3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
DwAwggIKAoICAQDdsts6I2H5dGyn4adACQRXlfo0KmwsN7B5rxD8C5qgy6spyONr
WV0ecvdeGQfWa8Gy/yuTuOnsXfy7oyZ1dm93c3Mea7YkM7KNMc5Y6m520E9tHooc
f1qxeDpGSsnWc7HWibFgD7qZQx+T+yfNqt63vPI0HYBOYao6hWd3JQhu5caAcIS2
ms5tzSSZVH83ZPe6Lkb5xRgLl3eXEFcfI2DjnlOtLFqpjHuEB3Tr6agfdWyaGEEi
lRY1IB3k6TfLTaSiX2/SyJ96bp92wvTSjR7USjDV9ypf7AD6u6vwJZ3bwNisNw5L
ptph0FBnc1R6nDoHmvQRoyytoe0rl/d801i9Nru/fXa+l5K2nf1koR3IX440Z2i9
+Z4iVA69NmCbT4MVjm7K3zlOtwfI7i1KYVv+ATo4ycgBuZfY9f/2lBhIv7BHuZal
b9D+/EK8aMUfjDF4icEGm+RQfExv2nOpkR4BfQppF/dLmkYfjgtO1403X0ihkT6T
PYQdmYS6Jf53/KpqC3aA+R7zg2birtvprinlR14MNvwOsDOzsK4p8WYsgZOR4Qr2
gAx+z2aVOs/87+TVOR0r14irQsxbg7uP2X4t+EXx13glHxwG+CnzUVycDLMVGvuG
aUgF9hukZxlOZnrl6VOf1fg0Caf3uvV8smOkVw6DMsGhBZSJVwao0UQNqQIDAQAB
o2YwZDAOBgNVHQ8BAf8EBAMCAAYwEgYDVR0TAQH/BAgwBgEB/wIBAjAdBgNVHQ4E
FgQUQ1lLK2mLgOERM2pXzVc42p59xeswHwYDVR0jBBgwFoAUQ1lLK2mLgOERM2pX
zVc42p59xeswCwYJKoZIhvcNAQENA4ICAQDKDQM1qPRVP/4Gltz0D6OU6xezFBKr
LWtDoA1qW2F7pkiYawCP9MrDPDJsHy7dx+xw3bBZxOsK5PA/T7p1dqpEl6i8F692
g//EuYOifLYw3ySPe3LRNhvPl/1f6Sn862VhPvLa8aQAAwR9e/CZvlY3fj+6G5ik
3it7fikmKUsVnugNOkjmwI3hZqXfJNc7AtHDFw0mEOV0dSeAPTo95N9cxBbm9PKv
qAEmTEXp2trQ/RjJ/AomJyfA1BQjsD0j++DI3a9/BbDwWmr1lJciKxiNKaa0BRLB
dKMrYQD+PkPNCgEuojT+paLKRrMyFUzHSG1doYm46NE9/WARTh3sFUp1B7HZSBqA
kHleoB/vQ/mDuW9C3/8Jk2uRUdZxR+LoNZItuOjU8oTy6zpN1+GgSj7bHjiy9rfA
F+ehdrz+IOh80WIiqs763PGoaYUyzxLvVowLWNoxVVoc9G+PqFKqD988XlipHVB6
Bz+1CD4D/bWrs3cC9+kk/jFmrrAymZlkFX8tDb5aXASSLJjUjcptci9SKqtI2h0J
wUGkD7+bQAr+7vr8/R+CBmNMe7csE8NeEX6lVMF7Dh0a1YKQa6hUN18bBuYgTMuT
QzMmZpRpIBB321ZBlcnlxiTJvWxvbCPHKHj20VwwAz7LONF59s84ZsOqfoBv8gKM
s0s5dsq5zpLeaw==
-----END CERTIFICATE-----

Вы также можете загрузить сертификат непосредственно с Cloudflare here.

Скопируйте этот сертификат.

Затем создайте файл + / etc / ssl / certs / cloudflare.crt + для хранения сертификата Cloudflare:

sudo nano /etc/ssl/certs/cloudflare.crt

Вставьте сертификат в файл. Затем сохраните файл и выйдите из редактора.

Теперь обновите конфигурацию Nginx для использования проверок подлинности TLS. Откройте файл конфигурации для вашего домена:

sudo nano /etc/nginx/sites-available/

Добавьте директивы + ssl_client_certificate + и + ssl_verify_client +, как показано в следующем примере:

example.com»> / и т.д. / Nginx / сайты-доступные /

. . .

server {

   # SSL configuration

   listen 443 ssl http2;
   listen [::]:443 ssl http2;
   ssl        on;
   ssl_certificate         /etc/ssl/certs/cert.pem;
   ssl_certificate_key     /etc/ssl/private/key.pem;



   . . .

Сохраните файл и выйдите из редактора.

Затем проверьте, чтобы убедиться, что в вашей конфигурации Nginx нет синтаксических ошибок.

sudo nginx -t

Если проблем не обнаружено, перезапустите Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

Наконец, чтобы включить Authenticated Pulls, откройте раздел * Crypto * на панели инструментов Cloudflare и включите опцию * Authenticated Origin Pulls *.

изображение: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/s5sYOVs.png [Включить проверку подлинности источника]

Теперь посетите ваш сайт по адресу + https: // +, чтобы убедиться, что он был настроен правильно. Как и раньше, вы увидите свою домашнюю страницу.

Чтобы убедиться, что ваш сервер будет принимать только запросы, подписанные CA Cloudflare, включите параметр * Authenticated Origin Pulls *, чтобы отключить его, а затем перезагрузите веб-сайт. Вы должны получить следующее сообщение об ошибке:

изображение: https: //assets.digitalocean.com/articles/cloudflare_secure_nginx_1604/w7qNH8P.png [сообщение об ошибке]

Ваш исходный сервер выдает ошибку, если запрос не подписан CA Cloudflare.

Теперь, когда вы знаете, что он работает правильно, вернитесь в раздел * Crypto * на панели инструментов Cloudflare и снова включите параметр * Authenticated Origin Pulls *, чтобы включить его.

Заключение

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

Related