Spis Treści
Zabezpieczanie serwera www
Kilka plików konfiguracyjnych jest umieszczone repozytorium skryptów. Niemniej bardzo istotne są nagłówki http wysyłane przez serwer www.
Wykonanie funkcji skrótu z certyfikatu ssl
Na podstawie certyfikatu serwera wykonujemy funkcję skrótu:
/usr/local/bin/openssl x509 -pubkey < /usr/local/etc/apache22/www.bsdserwis.com.chained.pem | /usr/local/bin/openssl pkey -pubin -outform der | /usr/local/bin/openssl dgst -sha256 -binary | base64
Zgodnie z dobrymi praktykami warto mieć od razu wygenerowane zapasowe klucze. Wtedy funkcję skrótu generujemy z pliku CSR:
openssl req -pubkey < bsdserwis.first.csr | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64
UWAGA!!! Wsparcie dla HPKP wygasło. Wykonywania funkcji skrótu i generowanie nagłówków HPKP nie jest już konieczne. Zamiast tego wykorzystyany jest mechanizm Certificate Transparency
Albo też korzystając z repozytorium skryptów można uruchomić następujące narzędzie:
# uruchomienie funkcji skrótu dla certyfikatu
#
le.pin256 -t x509 -f cert/www.bsdserwis.com.signed.crt
# uruchomienie funkcji skrótu dla CSR
#
le.pin256 -t req -f certs/www2.bsdserwis.com.csr
Ustawianie nagłówków w serwerze www
apache24
Na przykładzie nagłówków dla VirtualHost www.bsdserwis.com:
<IfModule mod_headers.c>
Header merge X-Frame-Options SAMEORIGIN
Header merge X-Content-Type-Options nosniff
Header merge X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"
##Header merge X-Robots-Tag all
Header set Content-Security-Policy "upgrade-insecure-requests; default-src https:; form-action https:; script-src 'self' https://seo.bsdserwis.com/; img-src '
self' https://seo.bsdserwis.com/; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com; object-src 'sel
f'; report-uri /cgi-bin/csp-report.cgi"
##Header set Public-Key-Pins 'pin-sha256="q3FEYGQ1rmfOZYWF9xqsdnWTgeOp//KINboUIbD2yfU="; pin-sha256="+S7LdocaP8qP3IgtUWSUaD6jVZj7lMy/085etzGv2dY="; pin-sha256="
IPp8IyvXbZshoKZ7Dur3u/NfO531iHphaU4huvmYePo="; max-age=2592000; includeSubdomains'
Header set Referrer-Policy: strict-origin
X-Robots-Tag
Bardzo ważny nagłówek. Określa to samo (albo i mocniej), co zawartość pliku robots.txt. Zgodnie z dokumentacją Google trzeba ustawić poprawną wartość.
none warto dać dla serwisów administracyjnych, zaś all dla normalnych witryn.
nginx
Na przykładzie nagłówków dla serwera webowego:
add_header X-Robots-Tag all;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload";
add_header Referrer-Policy strict-origin;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Permitted-Cross-Domain-Policies none;
add_header Content-Security-Policy "upgrade-insecure-requests; default-src https:; form-action https:; script-src 'self' https://seo.bsdserwis.com/; img-src '
self' https://seo.bsdserwis.com/; style-src 'self' https://fonts.googleapis.com; font-src 'self' https://fonts.googleapis.com https://fonts.gstatic.com; object-src 'sel
f'; report-uri /cgi-bin/csp-report.cgi"
Dodanie raportowania naruszeń CSP
Jest to odpowiednio zmodyfikowany przepis na zupę1, dostosowany do moich potrzeb.
Skrypt
Powstał dedykowany skrypt, który jest umieszczony w repozytorium konfiguracji. Skrypt korzysta z dwóch modułów PERLa, które trzeba zainstalować w systemie. Najlepiej skorzystać z repozytorium pakietów:
pkg install -y www/p5-CGI converters/p5-JSON
apache24
Konfiguracja ogólna
W repozytorium konfiguracji został umieszczony plik konfiguracyjny 015-csp-report.conf, który jest dołączany do konfiguracji serwera www:
# definicja specjalnego logu
#
LogFormat "%h %l %u %t \"%{User-Agent}i\" \"%{Referer}i\" \"%{X-CSP-request}o\" \"%{X-CSP-blocked-uri}o\" \"%{X-CSP-violated-directive}o\"" csplog
# ustawienie zmiennej /srodowiskowej dla wybranego URLa
SetEnvIf Request_URI "^/cgi-bin/csp-report.cgi" CSPLOG
Konfiguracja dla wybranej witryny
Dla wybranej witryny należy wykonać następującą konfigurację (podano istotne fragmenty):
<IfDefine SSL>
<VirtualHost [...]>
<IfModule mod_headers.c>
Header set Content-Security-Policy "[...] ; report-uri /cgi-bin/csp-report.cgi"
</IfModule>
<IfModule mod_alias.c>
ScriptAlias /cgi-bin/csp-report.cgi /usr/local/www/cgi-bin/csp-report.cgi
ScriptAlias /cgi-bin/ "/var/www/htdocs/virtuals/[...]/cgi-bin/"
</IfModule>
# CSP Log
CustomLog /var/log/httpd/forum.vectraklub.pl/csp.log csplog env=CSPLOG
</VirtualHost>
</IfDefine>
nginx
Konfiguracja ogólna
Konfiguracja została umieszczona w repozytorium konfiguracji w pliku 015-csp-log-format.conf, która jest dołączana do pliku nginx.conf:
log_format csplog '$remote_addr - $remote_user '
'[$time_local] "$http_user_agent" '
'"$http_x_csp_referrer" "$http_x_csp_document_uri" '
'"$http_x_csp_blocked_uri" "$http_x_csp_violated_directive"';
Konfiguracja dla wybranej witryny
Dla wybranej witryny należy wykonać następującą konfigurację zapisaną w repozytorium konfiguracji w pliku 015-csp-report.conf:
location /cgi-bin/csp-report.cgi {
alias /usr/local/www/cgi-bin/csp-report.cgi;
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap/fcgiwrap.sock;
fastcgi_index mailgraph.cgi;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
set $csplog 1;
}
Samo logowanie należy zapisać w definicji wirtualki:
{{{#!highlight nginx numbers=off
access_log /var/log/nginx/www.domain.tld/csp.log csplog if=$csplog;
Źródła w sieci internet
(c) 2004 - 2026 BSD Serwis Krzysztof Stryjek. W przypadku błędów, poprawek proszę kontaktować się z administratorem wiki.
Serwer już nie działa - 2018.06.18 (1)