Veebiserverite seadistamine31. Oct '13
Sissejuhatus
Siinsest kirjatükist leiad vihjeid kuidas Apache ning nginx seadistada kõige õigemal moel.
Transportkihi turvamine
HTTPS-i saab üles sättida sisuliselt kahel moel:
Kasutada mõnda veebilehitsejate poolt tunnustatud sertifitseerimiskeskust
Allkirjastada ise sertifikaat ning lisada sertifikaat tööjaamadesse
Transportkihi turbe puhul on oluline välja lülitada SSLv2 ja SSLv3 tugi ning keelata nõrgad sümmeetrilised sihvrid takistamaks POODLE ja DROWN ründeid.
Logjam rünnete vältimiseks peab genereerima Diffie-Hellmani parameetrid:
openssl dhparam -out /etc/ssl/web/dhparams.pem
Järgnevates konfiguratsioonifailides on viited sellele failile. Potensiaalsete MITM rünnete ärahoidmiseks on heaks tavaks praktiseerida ka HTTP Strict Transport Security 1 poliitikat.
Sertifitseerimiskeskuse mängimine
Esmalt tuleb sertifitseerimiskeskusena (certificate authority) kasutatavas masinas üles seada sertifitseerimiskeskuse võti ning sertifikaat:
Antud juhul ca.key on sertifitseerimiskeskuse võti, mis ei tohiks rändama minna ning ca.crt on sertifitseerimiskeskuse sertifikaat mille abil saab verifitseerida võtmega allkirjastatud serverite ja klientide sertifikaate.
Veebiserveri sertifikaadi genereermine:
Oluline on, et veebiserverina kasutataval sertifikaadil oleks märgitud järnevad sertifikaadi lipud:
keyUsage = critical,digitalSignature,keyEncipherment
extendedKeyUsage = serverAuth
Kasuta scp, wget, e-posti vms vahendeid et faile üle võrgu liigutada.
Apache seadistamine
Apache paigaldamiseks:
apt-get install apache2 libapache2-mod-php5
Lülita sisse ka moodulid:
a2enmod php5 # .php failide parsimiseks
a2enmod ssl # Transportkihi turbe jaoks
a2enmod headers # Päiste saatmise jaoks
a2enmod rewrite # Ümbersuunamiste jaoks
Loo Apache veebisaidi konfiguratsiooni jaoks /etc/apache2/sites-available/owncloud.conf fail järgneva sisuga:
<VirtualHost *:80>
ServerName owncloud.example.com
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>
<VirtualHost *:443>
SSLOpenSSLConfCmd DHParameters /etc/ssl/web/dhparams.pem
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
ServerName owncloud.example.com
DocumentRoot /var/www/owncloud/
<Directory /var/www/owncloud>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Require all granted
</Directory>
SSLEngine on
# Serveri serdid
SSLCertificateFile /etc/ssl/web/bundle.crt
SSLCertificateKeyFile /etc/ssl/web/server.key
# Valideeri klienti
SSLCACertificateFile /etc/ssl/minu-ca/certs/ca.crt
SSLCARevocationFile /etc/ssl/minu-ca/crl/ca.crl
SSLCARevocationCheck chain
SSLVerifyClient require
SSLVerifyDepth 1
</VirtualHost>
Veebisaidi sisse lülitamiseks:
a2ensite owncloud
Taaskäivita Apache:
service apache2 restart
nginx veebiserveri seadistamine
Nginx on vene päritolu BSD litsentsi all levitatav veebiserver mis on jõudsalt turuosa haaranud viimaste aastate jooksul 2. Apache2 kasutab lõimesi (thread), et mitmeid kasutajaid teenindada. Selle puhul lööb välja niinimetatud C10K probleem, ehk et üle 10000 ühenduse tegemine Apache2 veebiserverisse muutub keeruliseks. Nginx kasutab Linux puhul epoll meetodit võrgusoklitega majandamiseks, mistõttu ta saab vabalt hakkama 500000+ ühenduse üleval hoidmisega.
Nginx veebiserveri pakett on Debian ning Ubuntu varamutes olemas, kuid sellest on mitu varianti: nginx, nginx-full, nginx-extras. Viimases on kõige rohkem kellasid ja vilesid sisse kompileeritud:
sudo apt-get install nginx-extras
PHP jaoks tuleb paigaldada PHP-FPM rakendus:
sudo apt-get install php5-fpm \
php5-mysql php5-sqlite php5-pgsql \
php5-curl php5-xml php5-gd php5-ldap
Ubuntu 16.04 peal on võimalik paigaldada ka otse PHP7:
sudo apt-get install php7.0-fpm \
php7.0-mysql php7.0-sqlite3 php7.0-pgsql \
php7.0-curl php7.0-xml php7.0-gd php7.0-ldap
Loo transportkihi turbe seadistuste jaoks eraldi konfiguratsioonifail /etc/nginx/conf.d/tls.conf järgneva sisuga:
ssl_certificate /etc/ssl/web/bundle.crt;
ssl_certificate_key /etc/ssl/web/server.key;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_dhparam /etc/ssl/web/dhparams.pem;
Veebisaidi seadistuste failid paigutatakse /etc/nginx/sites-available/nimi.conf alla ning sisselülitatud seadistuste jaoks tehakse symlink /etc/nginx/sites-enabled/ alla.
OwnCloud puhul /etc/nginx/sites-available/owncloud.conf võiks olla järgnev:
server {
# Kui HTTPS on seadistamata jäta vahele see serveri lõik ning
# allpool asenda "listen 443 ssl" --> "listen 80"
listen 80;
server_name owncloud.example.com;
rewrite ^ https://owncloud.example.com;
}
server {
listen 443 ssl;
server_name owncloud.example.com;
root /var/www/owncloud/;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}
location / {
# The following 2 rules are only needed with webfinger
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 = 404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS on;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_read_timeout 300;
}
# Optional: set long EXPIRES header on static assets
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
access_log off;
}
}
Konfiguratsiooni saame sisse lülitada nii:
ln -s ../sites-available/owncloud.conf /etc/nginx/sites-enabled/owncloud.conf
Testi nginx konfiguratsiooni:
nginx -t
Kui kõik klapib (taaskäivita) teenus:
service nginx restart