Как защитить сайт от атак и получить бесплатный SSL сертификат на 15 лет

Статья вышла при терпеливых напоминаниях о необходимости ее написания от Евгения Васильевича Батулина, за что ему особая благодарность.

Предназначено для администраторов Linux серверов и ориентировано на Nginx.

«Cloudflare — американская компания, предоставляющая услуги CDN, защиту от DDoS-атак, безопасный доступ к ресурсам и серверы DNS. Сервисы Cloudflare работают как обратный прокси для сайта.» — Wikipedia

Часть первая: активация сервиса Cloudflare

1. Регистрируемся на Cloudflare

2. Не забудьте подтвердить ваш электронный почтовый адрес. (Don’t forget to verify your email address.)

3. Жмём:
+ Add Site

4. Вводим домен сайта в поле,
жмём «Add site».

5. Выбираем план (внизу есть бесплатный),
жмём «Continue».

6. Ждём, пока закончится сканирование DNS записей.
В случае необходимости, редактируем записи (не обязательно).

Замечание: если вы используете внешние сервисы, например если ваша почта хранится у Google/Яндекс, или есть FTP сервер, то при включении проксирования эти сервисы не будут работать.

жмём «Continue».

7. На этом этапе нужно заменить текущие name-серверы домена на name-серверы Cloudflare.

7.1 Определите вашего регистратора через WHOIS.

7.2 Войдите в административный аккаунт регистратора вашего домена.

7.3 Удалите текущие name-сервера

(Cloudflare подскажет, что именно нужно удалить)

7.4 Добавить name-серверы Cloudflare

(Cloudflare подскажет, что добавить и предложит скопировать — «Click to copy»)

7.5 Сохранить изменения у регистратора

Изменения регистратора могут вступать в силу в течение 24 часов. Вы получите email когда ваш сайт активируется у Cloudflare.

Жмём «Done, check nameservers»

8. Запускаем «Quick Start Guide», жмём Get started.

Включаем всё, что захотим, методично нажимая «Save» ...

Функция «Always Use HTTPS» — «Всегда использовать HTTPS» по умолчанию — выключена, рекомендую включить, «Save» ...

В разделе «Auto Minify» галочками включаем все функции кеширования: JavaScript, CSS, HTML и «Save» ...

Brotli сжатие тоже включаем.

В итоге получаем:

Summary
    Automatic HTTPS Rewrites: ON
    Always use HTTPS: ON
    Auto Minify: JS, CSS, HTML
    Brotli: ON

Жмём «Finish»

Если Cloudflare еще не активировал сайт — жмём «Check nameservers» в надежде, что это ускорит процесс. Срабатывает эта кнопка не чаще 1 раза в час.

Ждём письма об активации. Как только оно пришло — сайт защищен от атак.

Часть вторая: установка сертификатов

Суть нижеследующей процедуры сводиться к тому, чтобы подключить сертификат Cloudflare к Nginx

Если Вы уже успели выйти из аккаунта Cloudflare — нужно снова зайти и выбрать наш домен.

9. Переходим в раздел: SSL/TLS > Origin Server. Нажимаем «Create Certificate».

10. Соглашаемся на генерацию RSA ключа для домена на 15 лет! Жмём «Create»

11. Очень важный пункт, будьте внимательны. Получаем сертификат (Origin Certificate) и приватный ключ (Private Key) к нему. Их нужно сохранить в двух отдельных файлах на нашем сервере. Для удобства, создадим директорию для сертификатов нашего сайта в общем хранилище сертификатов:

mkdir /etc/cloudflare

Переходим в созданную директорию:

cd /etc/ssl/cloudflare

Затем создадим файлы для сертификата (расширение — .crt) и ключа (расширение — .key) домена, для удобства в имени файлов укажем годы их действия (в данном примере с 2021 по 2036 годы — 15 лет!).

Соответственно, замените domain.com — на ваш домен и 2021-2036  — на ваш срок действия сертификата во всех следующих примерах:

touch domain.com-2021-2036.crt
touch domain.com-2021-2036.key

Теперь в файл сертификата необходимо скопировать текст Origin Certificate, а в файл ключа текст Private Key из текстовых полей, используем для этого ссылку «Click to copy» («Клик для копирования», внизу каждого поля).

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

Нажимаем «OK» внизу страницы, видим срок действия (15 лет!) сертификатов.

12. Осталось внести еще одно важное изменение в файл сертификата (domain.com-2021-2036.crt), добавив после текста сертификата вашего домена еще и текст корневого сертификата Cloudflare. Для этого скачайте корневой сертификат Cloudflare, нажав на ссылку «Cloudflare Origin RSA PEM» на этой странице.

Добавьте текст скачанного файла «origin_ca_rsa_root.pem» в конец файла сертификата domain.com-2021-2036.crt

Это значит, что если сейчас ваш файл domain.com-2021-2036.crt выглядит, примерно, так:

-----BEGIN CERTIFICATE-----
... ... ... ... ... ... ...
.текст сертификата домена .
... ... ... ... ... ... ...
-----END CERTIFICATE-----

То после изменения он будет выглядеть, примерно, так:

-----BEGIN CERTIFICATE-----
... ... ... ... ... ... ...
.текст сертификата домена .
... ... ... ... ... ... ...
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
... ... ... ... ... ... ...
текст корневого сертификата
... ... ... ... ... ... ...
-----END CERTIFICATE-----

Теперь внутри одного файла domain.com-2021-2036.crt у вас будет 2 сертификата — сертификат домена и корневой сертификат CloudFlare.

12. Указываем новые параметры nginx

Вносим изменения в файл конфигурации nginx (по умолчанию он находится здесь: /etc/nginx/sites-available/default).

Вначале файла конфигурации добавляем секцию переадресации всех http запросов на https для домена domain.com:

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name _;
    return 301 https://domain.com$request_uri;
}
А ниже, в основной конфигурации, включаем порт 443 по умолчанию и SSL шифрование на нём, указывая пути до файла с сертификатами и до файла с приватным ключом:
server {
    server_name domain.com;
    listen 443 ssl default_server;
    listen [::]:443 ssl default_server;
    ssl_certificate     /etc/ssl/cloudflare/domain.com-2021-2036.crt;
    ssl_certificate_key /etc/ssl/cloudflare/domain.com-2021-2036.key;
    ...
}
Перезапускаем nginx, отрываем наш сайт и видим что теперь он работает только на https, а сертификат будет действовать, с Божьей помощью, следующие 15 лет.