Содержание
Cloudflare: SSL сертификаты Full Strict
Получаем бесплатные wildcard сертификаты от Cloudflare.
Cloudflare
Переходим в dash.cloudflare.com и выбираем свой домен.
1️⃣ SSL/TLS → Origin Server → Create Certificate
2️⃣ Выбираем тип RSA
3️⃣ Нужно скопировать crt и key. Повторно посмотреть private key будет нельзя - только генерировать сертфикат заново.
4️⃣ SSL/TLS → Origin Server → Authenticated Origin Pulls
5️⃣ SSL/TLS → Overview → Full (strict)
Теперь всё это добро нужно куда-нибудь сохранить. Кому как удобней:
/etc/cloudflare/*
/etc/ssl/certs
/etc/nginx/ssl
Должно быть 3 файла
/etc/cloudflare/cert/cloudflare_origin_rsa.pem /etc/cloudflare/cert/foobar.com_cert.pem /etc/cloudflare/cert/foobar.com_privatekey.pem
Где взять origin_rsa см. ниже
Origin pull CA
Скачать PEM файл authenticated_origin_pull_ca.pem
Apache
SSLVerifyClient require SSLVerifyDepth 1 SSLCACertificateFile /path/to/cloudflare_origin_rsa.pem
nginx
ssl_client_certificate /path/to/cloudflare_origin_rsa.pem; ssl_verify_client on;
Cloudflare Root сертификат
Этот шаг необязательный. При желании можно собрать полную цепочку сертификатов.
Чтобы добавить корневые сертификаты Cloudflare в сертификат Origin, необходимо загрузить и объединить их (ca+origin). См.Add Cloudflare Origin CA root certificates
Для RSA private keys
wget -O cloudflare_root.pem https://developers.cloudflare.com/ssl/static/origin_ca_rsa_root.pem
Для ECDSA private keys
wget -O cloudflare_root.pem https://developers.cloudflare.com/ssl/static/origin_ca_ecc_root.pem
Объединить
cat foobar.com_cert.pem cloudflare_root.pem > foobar.com_cert_full.pem
Nginx
Конфигурационный файл
server { listen 80; # listen [::]:80; server_name punx.cc www.punx.cc; return 301 https://$server_name$request_uri; } server { listen 443 http2 ssl; # listen [::]:443 http2 ssl; server_name punx.cc www.punx.cc; root /var/www/punx.cc/public_html; index index.html index.php; location / { try_files $uri $uri/ =404; } ssl_certificate /etc/cloudflare/punx.cc_cert.pem; ssl_certificate_key /etc/cloudflare/punx.cc_privatekey.pem; ssl_client_certificate /etc/cloudflare/authenticated_origin_pull_ca.pem; ssl_verify_client on; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_stapling on; ssl_stapling_verify on; resolver 1.1.1.1 1.0.0.1 valid=300s; resolver_timeout 10s; }
Apache
<VirtualHost *:80> Redirect permanent / https://punx.cc/ ServerName punx.cc ServerAlias www.punx.cc </VirtualHost> <VirtualHost *:443> ServerName punx.cc ServerAlias www.punx.cc DocumentRoot /var/www/punx.cc/public_html #ErrorLog ${APACHE_LOG_DIR}/error.log #CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/cloudflare/punx.cc_cert.pem SSLCertificateKeyFile /etc/cloudflare/punx.cc_privatekey.pem SSLCertificateChainFile /etc/cloudflare/origin_ca_rsa_root.pem SSLProtocol all -SSLv2 -SSLv3 SSLHonorCipherOrder on SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS <IfModule headers_module> Header always edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure #Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains" </IfModule> </VirtualHost>
Проверка
Проверяем домен на сайте ssllabs. Для А+ видимо нужно или оставить только tls13 или поиграться со шрифтами шифрами.
Real IP
Для отображения реального IP посетителя сайта
nginx
set_real_ip_from 173.245.48.0/20; set_real_ip_from 103.21.244.0/22; set_real_ip_from 103.22.200.0/22; set_real_ip_from 103.31.4.0/22; set_real_ip_from 141.101.64.0/18; set_real_ip_from 108.162.192.0/18; set_real_ip_from 190.93.240.0/20; set_real_ip_from 188.114.96.0/20; set_real_ip_from 197.234.240.0/22; set_real_ip_from 198.41.128.0/17; set_real_ip_from 162.158.0.0/15; set_real_ip_from 104.16.0.0/13; set_real_ip_from 104.24.0.0/14; set_real_ip_from 172.64.0.0/13; set_real_ip_from 131.0.72.0/22; #real_ip_header CF-Connecting-IP; real_ip_header X-Forwarded-For;
apache
Debian/Ubuntu
a2enmod remoteip /etc/apache2/sites-available/000-default.conf RemoteIPHeader CF-Connecting-IP ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined Заменить LogFormat в ''apache.conf''. Меняем ''%h'' на ''%a'' в файле ''/etc/apache2/apache2.conf''. Меняем <code bash>LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
на
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
Добавляем в файл /etc/apache2/conf-available/remoteip.conf
RemoteIPHeader CF-Connecting-IP RemoteIPTrustedProxy 173.245.48.0/20 RemoteIPTrustedProxy 103.21.244.0/22 RemoteIPTrustedProxy 103.22.200.0/22 RemoteIPTrustedProxy 103.31.4.0/22 RemoteIPTrustedProxy 141.101.64.0/18 RemoteIPTrustedProxy 108.162.192.0/18 RemoteIPTrustedProxy 190.93.240.0/20 RemoteIPTrustedProxy 188.114.96.0/20 RemoteIPTrustedProxy 197.234.240.0/22 RemoteIPTrustedProxy 198.41.128.0/17 RemoteIPTrustedProxy 162.158.0.0/15 RemoteIPTrustedProxy 104.16.0.0/13 RemoteIPTrustedProxy 104.24.0.0/14 RemoteIPTrustedProxy 172.64.0.0/13 RemoteIPTrustedProxy 131.0.72.0/22
a2enconf remoteip
CentOS
В CentOS модуль remoip уже загружен. Добавляем в файл /etc/httpd/conf.d/remoteip.conf
RemoteIPHeader X-Forwarded-For RemoteIPTrustedProxy 173.245.48.0/20 # и далее все адреса CF
В файле /etc/httpd/conf/httpd.conf
заменить
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
на
LogFormat "%a %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
Обсуждение