Секурим Апач.

Posted: 2016-07-12 in IT, Networks, Security
Метки:

Цель заметки — свести воедино куски конфигов, которые необходимо поправить, чтобы получить топовые оценки на SSL Labs и High-Tect Bridge.

Важная заметка: всё это имеет смысл, только если стоят все секурити-фиксы, апач и пых топовые, лишние модули отключены, и прочее. Если у вас апач 2.2 с пыхом 5.3 на древней центоси — то вы ССЗБ или жертва грустных обстоятельств (говно-битрикс и прочее). Погнали.

Подготовка:
Сперва генерим CSR-запросы сертификатов маленьким скриптом:
#!/bin/sh

openssl genrsa -out server.key 4096
openssl req -new -sha512 -key server.key -out server.csr
Использовать 4096-битные ключи и SHA-512 обязательно. Получаем сертификат в любом CA, есть бесплатный на Start SSL.

Размещаем ключи на сервере.
Генерим из них строчки для Key_pinning (один их трех способов):
1). openssl rsa -pubout -in public.key -outform der | openssl dgst -sha256 -binary | base64
2). openssl req -noout -in request.csr -pubkey | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | base64
3). openssl x509 -noout -in certificate.pem -pubkey | openssl rsa -pubin -outform der | openssl dgst -sha256 -binary | base64

Патчим конфиги:

—— httpd.conf, vhost.conf ——
# Гасим левые методы (OPTIONS, DELETE, TRACK, TRACE, OPTIONS) в httpd.conf , толеко три метода в белом списке:

<Directory "/var/www/html">
Order allow,deny
deny from all

Header set Public-Key-Pins «pin-sha256=\»XXX\»; pin-sha256=\»YYY\»; max-age=ZZZ»

—— SSL.conf, ssl-vhost.conf ——
# Отключаем SSL, оставляем только TLS :
SSLProtocol all -SSLv2 -SSLv3
Эта строчка оставляет только TLS трех версий — 1.0, 1.1 и 1.2
Можно оставить только последний, но тогда сайт будет недоступен со старых андроидов.

# Параноим набор шифров :
SSLCipherSuite HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4

SSLHonorCipherOrder on
SSLCompression off

—— security.conf ——
TraceEnable Off

ServerSignature Off
ServerTokens Prod

Header always set Strict-Transport-Security «max-age=31024000; includeSubdomains; preload»
Header always set Public-Key-Pins «pin-sha256=\»abc..hf=\»; pin-sha256=\»cde..xy=\»; max-age=31024000″
Header always set X-Frame-Options «DENY»
Header always set X-XSS-Protection: «1; mode=block»
Header always set X-Content-Type-Options: «nosniff»
Header always set Content-Security-Policy «default-src ‘self’; \
img-src ‘self’; \
report-uri https://secure.my-domain.ru/csp/csp-reports.php&#187;

 

—— php.ini ——
expose_php = Off

Рестартим, тестим.

Помните, что применяя всё более усиленные конфигурации SSL/TLS, вы делаете ресурс недоступных для все большего числа старых систем. Старые версии Java, Android или IE не смогут зайти на сайт, в конфиге которого SSL умеет только TLS 1.2 c эллипитескими кривыми. Если же ресурс и не должен быть доступен со старых небезопасных систем — прописываем смело.

Обсуждение закрыто.