Автор выбрал Electronic Frontier Foundation для получения пожертвования в рамках программы Write for DOnations.
Введение
Cloudflare – это сервис, который находится между посетителем и сервером владельца веб-сайта, действуя как обратный прокси для веб-сайтов. Cloudflare предоставляет сеть доставки контента (CDN), а также защиту от DDoS и распределенные службы доменных имен сервера (DNS).
Nginx – это популярный веб-сервер, ответственный за хостинг некоторых из крупнейших и наиболее посещаемых сайтов в Интернете. Обычно организации используют Nginx для обслуживания веб-сайтов и Cloudflare в качестве CDN и провайдера DNS.
В этом руководстве вы обеспечите безопасность вашего веб-сайта, обслуживаемого Nginx, с использованием сертификата Origin CA от Cloudflare и затем настроите Nginx для использования аутентифицированных запросов на извлечение. Преимущества использования этой настройки заключаются в том, что вы получаете преимущества от CDN Cloudflare и быстрого разрешения DNS, при этом обеспечивается прохождение всех соединений через Cloudflare. Это предотвращает попадание на сервер вредоносных запросов.
Предварительные требования
Для завершения этого учебного пособия вам понадобится следующее:
- Один сервер с Ubuntu 22.04, настроенный в соответствии с руководством по начальной настройке сервера Ubuntu 22.04, включая
sudo
пользователя без прав администратора и настройку брандмауэра. - Nginx установленный на вашем сервере. Вы можете следовать нашему руководству по установке Nginx на Ubuntu 22.04.
- A Cloudflare account.
- A registered domain added to your Cloudflare account that points to your Nginx server. Our guide on how to mitigate DDoS attacks against your website with Cloudflare can help you set this up. Our introduction to DNS terminology, components, and concepts can also provide assistance.
- Настроенный серверный блок Nginx для вашего домена, что вы можете сделать, следуя Шагу 5 руководства по установке Nginx на Ubuntu 22.04.
Шаг 1 — Генерация сертификата TLS Origin CA
Cloudflare Origin CA позволяет вам сгенерировать бесплатный сертификат TLS, подписанный Cloudflare, для установки на вашем сервере Nginx. Используя сгенерированный Cloudflare сертификат TLS, вы можете защитить соединение между серверами Cloudflare и вашим сервером Nginx.
Для создания сертификата с Origin CA войдите в свою учетную запись Cloudflare в веб-браузере. Выберите домен, который хотите защитить, и перейдите на раздел SSL/TLS в вашем панели управления Cloudflare. Оттуда перейдите на вкладку Origin Server и нажмите кнопку Create Certificate:
Оставьте выбранную по умолчанию опцию Создать закрытый ключ и CSR с помощью Cloudflare.
Нажмите Create, и вы увидите диалоговое окно с Сертификатом Origin и Закрытым ключом. Вам необходимо передать как сертификат, так и закрытый ключ с сервера Cloudflare на ваш сервер. По соображениям безопасности информация о Закрытом ключе не будет отображаться снова, поэтому скопируйте ключ на свой сервер, прежде чем нажать Ok.
Вы будете использовать каталог /etc/ssl
на сервере для хранения файлов сертификата и закрытого ключа. Этот каталог уже существует на сервере.
Сначала скопируйте содержимое Сертификата Origin, отображаемое в диалоговом окне в вашем браузере.
Затем, на вашем сервере, откройте файл /etc/ssl/cert.pem
в выбранном вами текстовом редакторе:
Вставьте содержимое сертификата в файл. Затем сохраните и закройте редактор. Если вы используете nano
, нажмите Ctrl+X
, затем, когда появится запрос, Y
, а затем Enter.
Затем вернитесь в свой браузер и скопируйте содержимое Закрытого ключа. Откройте файл /etc/ssl/key.pem
для редактирования:
Вставьте закрытый ключ в файл, сохраните его и закройте редактор.
Примечание: Иногда, когда вы копируете сертификат и ключ с панели управления Cloudflare и вставляете их в соответствующие файлы на сервере, вставляются пустые строки. Nginx будет рассматривать такие сертификаты и ключи как недействительные, поэтому убедитесь, что в ваших файлах нет пустых строк.
Предупреждение: Сертификат Origin CA от Cloudflare доверяется только Cloudflare и, следовательно, должен использоваться только серверами источников, которые активно подключены к Cloudflare. Если вы в какой-то момент приостановите или отключите Cloudflare, ваш сертификат Origin CA вызовет ошибку недоверенного сертификата.
Теперь, когда вы скопировали файлы ключа и сертификата на свой сервер, вам нужно обновить конфигурацию Nginx, чтобы использовать их.
Шаг 2 — Установка сертификата Origin CA в Nginx
В предыдущем разделе вы создали сертификат и закрытый ключ источника, используя панель управления Cloudflare, и сохранили файлы на своем сервере. Теперь вы обновите конфигурацию Nginx для вашего сайта, чтобы использовать сертификат и закрытый ключ источника для защиты соединения между серверами Cloudflare и вашим сервером.
Сначала убедитесь, что UFW разрешит трафик HTTPS. Включите Nginx Full
, который откроет как порт 80
(HTTP), так и порт 443
(HTTPS):
Теперь перезагрузите UFW:
Наконец, проверьте, разрешены ли ваши новые правила, и что UFW активен:
Вы увидите вывод, подобный этому:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx Full ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx Full (v6) ALLOW Anywhere (v6)
Теперь вы готовы настроить свой серверный блок Nginx. Nа момент установки Nginx создается серверный блок по умолчанию. Удалите его, если он все еще существует, так как вы уже настроили пользовательский серверный блок для вашего домена:
Затем откройте файл конфигурации Nginx для вашего домена:
Файл должен выглядеть так:
Вы измените файл конфигурации Nginx, чтобы выполнить следующее:
- Слушать порт
80
и перенаправлять все запросы на использованиеhttps
. - Слушать порт
443
и использовать оригинальный сертификат и закрытый ключ, добавленные в предыдущем разделе.
Измените файл, чтобы он выглядел следующим образом:
Сохраните файл и выйдите из редактора.
Затем протестируйте, чтобы убедиться, что ваши файлы конфигурации Nginx не содержат синтаксических ошибок:
Если вы не обнаружили проблем, перезапустите Nginx, чтобы применить внесенные изменения:
Теперь перейдите в раздел SSL/TLS панели управления Cloudflare, перейдите на вкладку Обзор и измените режим шифрования SSL/TLS на Полный (строгий). Это сообщает Cloudflare всегда шифровать соединение между Cloudflare и вашим исходным сервером Nginx.
Теперь посетите ваш веб-сайт по адресу https://your_domain
, чтобы убедиться, что он настроен правильно. Вы увидите отображенную главную страницу, и браузер сообщит, что сайт защищен.
Для просмотра сведений о вашем сертификате откройте Инструменты разработчика в вашем браузере, выберите вкладку Безопасность и затем Просмотреть сертификат.
Примечание: Вы можете заметить, что в вашем сертификате не указан Cloudflare в качестве выдающего лица. Это потому, что Cloudflare может использовать других удостоверяющих центров, таких как Let’s Encrypt. Для полного списка ознакомьтесь с документацией продукта Cloudflare по удостоверяющим центрам.
В следующем разделе вы настроите аутентифицированные источники получения, чтобы убедиться, что ваш исходный сервер действительно общается с Cloudflare, а не с каким-то другим сервером. Таким образом, Nginx будет настроен на прием только тех запросов, которые используют действительный клиентский сертификат от Cloudflare; все запросы, которые не прошли через Cloudflare, будут отклонены.
Шаг 3 — Настройка аутентифицированных источников получения
Сертификат Origin CA поможет Cloudflare проверить, что он общается с правильным исходным сервером. В этом шаге будет использоваться аутентификация клиента TLS для проверки того, что ваш исходный сервер Nginx общается с Cloudflare.
Во время установки TLS-соединения с аутентификацией клиента обе стороны предоставляют сертификат, который должен быть проверен. Оригинальный сервер настроен так, чтобы принимать только запросы, использующие действительный клиентский сертификат от Cloudflare. Запросы, которые не прошли через Cloudflare, будут отброшены, так как у них не будет сертификата Cloudflare. Это означает, что злоумышленники не могут обойти защитные меры Cloudflare и прямо подключиться к вашему серверу Nginx.
Cloudflare представляет сертификаты, подписанные ЦС, с помощью следующего сертификата:
-----BEGIN CERTIFICATE-----
MIIGCjCCA/KgAwIBAgIIV5G6lVbCLmEwDQYJKoZIhvcNAQENBQAwgZAxCzAJBgNV
BAYTAlVTMRkwFwYDVQQKExBDbG91ZEZsYXJlLCBJbmMuMRQwEgYDVQQLEwtPcmln
aW4gUHVsbDEWMBQGA1UEBxMNU2FuIEZyYW5jaXNjbzETMBEGA1UECBMKQ2FsaWZv
cm5pYTEjMCEGA1UEAxMab3JpZ2luLXB1bGwuY2xvdWRmbGFyZS5uZXQwHhcNMTkx
MDEwMTg0NTAwWhcNMjkxMTAxMTcwMDAwWjCBkDELMAkGA1UEBhMCVVMxGTAXBgNV
BAoTEENsb3VkRmxhcmUsIEluYy4xFDASBgNVBAsTC09yaWdpbiBQdWxsMRYwFAYD
VQQHEw1TYW4gRnJhbmNpc2NvMRMwEQYDVQQIEwpDYWxpZm9ybmlhMSMwIQYDVQQD
ExpvcmlnaW4tcHVsbC5jbG91ZGZsYXJlLm5ldDCCAiIwDQYJKoZIhvcNAQEBBQAD
ggIPADCCAgoCggIBAN2y2zojYfl0bKfhp0AJBFeV+jQqbCw3sHmvEPwLmqDLqynI
42tZXR5y914ZB9ZrwbL/K5O46exd/LujJnV2b3dzcx5rtiQzso0xzljqbnbQT20e
ihx/WrF4OkZKydZzsdaJsWAPuplDH5P7J82q3re88jQdgE5hqjqFZ3clCG7lxoBw
hLaazm3NJJlUfzdk97ouRvnFGAuXd5cQVx8jYOOeU60sWqmMe4QHdOvpqB91bJoY
QSKVFjUgHeTpN8tNpKJfb9LIn3pun3bC9NKNHtRKMNX3Kl/sAPq7q/AlndvA2Kw3
Dkum2mHQUGdzVHqcOgea9BGjLK2h7SuX93zTWL02u799dr6Xkrad/WShHchfjjRn
aL35niJUDr02YJtPgxWObsrfOU63B8juLUphW/4BOjjJyAG5l9j1//aUGEi/sEe5
lqVv0P78QrxoxR+MMXiJwQab5FB8TG/ac6mRHgF9CmkX90uaRh+OC07XjTdfSKGR
PpM9hB2ZhLol/nf8qmoLdoD5HvODZuKu2+muKeVHXgw2/A6wM7OwrinxZiyBk5Hh
CvaADH7PZpU6z/zv5NU5HSvXiKtCzFuDu4/Zfi34RfHXeCUfHAb4KfNRXJwMsxUa
+4ZpSAX2G6RnGU5meuXpU5/V+DQJp/e69XyyY6RXDoMywaEFlIlXBqjRRA2pAgMB
AAGjZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgECMB0GA1Ud
DgQWBBRDWUsraYuA4REzalfNVzjann3F6zAfBgNVHSMEGDAWgBRDWUsraYuA4REz
alfNVzjann3F6zANBgkqhkiG9w0BAQ0FAAOCAgEAkQ+T9nqcSlAuW/90DeYmQOW1
QhqOor5psBEGvxbNGV2hdLJY8h6QUq48BCevcMChg/L1CkznBNI40i3/6heDn3IS
zVEwXKf34pPFCACWVMZxbQjkNRTiH8iRur9EsaNQ5oXCPJkhwg2+IFyoPAAYURoX
VcI9SCDUa45clmYHJ/XYwV1icGVI8/9b2JUqklnOTa5tugwIUi5sTfipNcJXHhgz
6BKYDl0/UP0lLKbsUETXeTGDiDpxZYIgbcFrRDDkHC6BSvdWVEiH5b9mH2BON60z
0O0j8EEKTwi9jnafVtZQXP/D8yoVowdFDjXcKkOPF/1gIh9qrFR6GdoPVgB3SkLc
5ulBqZaCHm563jsvWb/kXJnlFxW+1bsO9BDD6DweBcGdNurgmH625wBXksSdD7y/
fakk8DagjbjKShYlPEFOAqEcliwjF45eabL0t27MJV61O/jHzHL3dknXeE4BDa2j
bA+JbyJeUMtU7KMsxvx82RmhqBEJJDBCJ3scVptvhDMRrtqDBW5JShxoAOcpFQGm
iYWicn46nPDjgTU0bX1ZPpTpryXbvciVL5RkVBuyX2ntcOLDPlZWgxZCBp96x07F
AnOzKgZk4RzZPNAxCXERVxajn/FLcOhglVAKo5H0ac+AitlQ0ip55D2/mf8o72tM
fVQ6VpyjEXdiIXWUq/o=
-----END CERTIFICATE-----
Вы также можете загрузить сертификат непосредственно из документации Cloudflare.
Скопируйте этот сертификат.
Затем создайте файл /etc/ssl/cloudflare.crt
, чтобы сохранить сертификат Cloudflare:
Добавьте сертификат в файл. Затем сохраните файл и выйдите из редактора.
Теперь обновите конфигурацию Nginx для использования аутентификации источника с TLS. Откройте файл конфигурации для вашего домена:
Добавьте директивы ssl_client_certificate
и ssl_verify_client
, как показано в следующем примере:
Сохраните файл и выйдите из редактора.
Затем протестируйте Nginx, чтобы убедиться, что в вашей конфигурации Nginx нет синтаксических ошибок:
Если проблем не обнаружено, перезапустите Nginx, чтобы применить внесенные изменения:
Наконец, чтобы включить проверку подлинности Pulls, откройте раздел SSL/TLS в панели управления Cloudflare, перейдите на вкладку Origin Server и переключите опцию Authenticated Origin Pulls.
Теперь посетите свой веб-сайт по адресу https://your_domain
, чтобы убедиться, что настройка выполнена правильно. Как и раньше, вы увидите свою домашнюю страницу.
Чтобы убедиться, что ваш сервер принимает только запросы, подписанные сертификатом Cloudflare CA, переключите опцию Authenticated Origin Pulls, чтобы отключить ее, а затем перезагрузите свой веб-сайт. Вы должны получить следующее сообщение об ошибке:
Ваш исходный сервер вызывает ошибку, если запрос не подписан сертификатом Cloudflare CA.
Примечание: Большинство браузеров кэшируют запросы, поэтому для просмотра указанных изменений вы можете использовать режим инкогнито/частного просмотра в вашем браузере. Чтобы предотвратить кэширование запросов Cloudflare во время настройки вашего веб-сайта, перейдите в раздел Обзор в панели управления Cloudflare и переключите опцию Development Mode.
Теперь, когда вы убедились, что все работает правильно, вернитесь в раздел SSL/TLS в панели управления Cloudflare, перейдите на вкладку Origin Server и снова переключите опцию Authenticated Origin Pulls, чтобы включить ее.
Заключение
В этом учебнике вы обезопасили ваш веб-сайт, работающий на Nginx, шифруя трафик между Cloudflare и сервером Nginx с помощью сертификата Origin CA от Cloudflare. Затем вы настроили проверку подлинности происхождения запросов на сервере Nginx, чтобы гарантировать, что он принимает запросы только от серверов Cloudflare, предотвращая прямое подключение к серверу Nginx со стороны других лиц.