Ćwiczenia do wykonania:
- Stwórz plik wirtualnego hosta dla http (port 80)
- Zainstaluj/włącz mod ssl
- Stwórz plik wirtualnego hosta dla https (port 443)
openSUSE Leap/SLES 15.x
Domyślnie w openSUSE Leap, katalog DocumentRoot /srv/www/htdocs i katalog CGI /srv/www/cgi-bin należą do użytkownika i grupy root. Nie należy zmieniać tych uprawnień. Jeśli katalogi są zapisywalne dla wszystkich, każdy użytkownik może umieszczać w nich pliki. Pliki te mogą być następnie wykonywane przez Apache z uprawnieniami wwwrun, co może dać użytkownikowi niezamierzony dostęp do zasobów systemu plików.
Debian / Ubuntu / Red Hat / Fedora
Użyj podkatalogów /srv/www lub /var/www (zależnie od dystrybucji) do umieszczenia katalogów DocumentRoot i CGI dla twoich wirtualnych hostów i upewnij się, że katalogi i pliki należą do użytkownika i grupy root.
Konfiguracja wirtualnego hosta
SLES
Katalog konfiguracyjny hosta wirtualnego zawiera szablon /etc/apache2/vhosts.d/vhost-ssl.template z dyrektywami specyficznymi dla SSL, które są obszernie udokumentowane. Patrz Sekcja 24.2.2.1, “Konfiguracja hosta wirtualnego” , aby zapoznać się z ogólną konfiguracją hosta wirtualnego.
Aby rozpocząć, skopiuj szablon do /etc/apache2/vhosts.d/MYSSL-HOST.conf i edytuj go. Dostosowanie wartości dla następujących dyrektyw powinno być wystarczające:
- DocumentRoot
- ServerName
- ServerAdmin
- ErrorLog
- TransferLog
sudo cp /etc/apache2/vhosts.d/vhost-ssl.template /etc/apache2/vhosts.d/strona.com.pl.conf
####### Debian
W przypadku Debian tworzymy plik wirtualnego hosta dla http (port 80) za pomocą poniższego polecenia:
sudo vi /etc/apache2/sites-available/strona.com.pl.conf
Red Hat
W przypadku Red Hat tworzymy plik wirtualnego hosta dla http (port 80) za pomocą poniższego polecenia:
sudo vi /etc/httpd/conf.d/strona.com.pl.conf
Przykładowa konfiguracja wirtualnego hosta (port 80, czyli http) dla Debian / Ubuntu / Red Hat / Fedora
<VirtualHost *:80>
ServerName strona.com.pl
ServerAlias www.strona.com.pl
DocumentRoot /var/www/strona.com.pl/public_html
ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access.log combined
#ErrorLog /var/log/apache2/error.log # Debian/Ubuntu
#CustomLog /var/log/apache2/access.log combined # Debian/Ubuntu
DirectoryIndex index.php
LogLevel info warn
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
<files readme.html>
order allow,deny
deny from all
</files>
</VirtualHost>
Wyjaśnienie:
Staraj się utrzymywać logikę w katalogu z wirtualnymi hostami i twórz pliki konfiguracyjne wirtualnych hostów w postaci nazwa-domeny.conf
sudo a2ensite strona.com.pl.conf
Co spowoduje stworzenie dowiązania symbolicznego w katalogu /etc/apache2/sites-enabled.
Tworzenie fizycznej struktury i wgranie strony na serwer.
Teraz należy stworzyć katalog dla strony w katalogu /srv/www lub /var/www
sudo -i
(wpisz hasło użytkownika root)
cd /srv/www/
lub
cd /var/www
sudo mkdir strona.com.pl
Wyjaśnienie:
W openSUSE/SLES katalog DocumentRoot jest ustawiony jak wspomniano wcześniej na /srv/www/htdocs i można go zmienić na /srv/www w pliku /etc/apache2/default-server.conf, co moim zdaniem jest bardziej eleganckie i dużo bardziej logiczne. Poza tym podczas instalacji systemu, lub, gdy mamy wolumeny logiczne, można ustawić /srv jako osobną partycję/wolumen logiczny.
W Debian/Ubuntu/Red Hat/Fedora natomiast jest to katalog /var/www
Ustaw użytkownika serwera WWW, www-data, jako właściciela katalogu domowego swojej witryny. www-data jest grupą. W przypadku CentOS będzie to grupa apache. Natomiast w przypadku openSUSE/SLES będzie to użytkownik root i grupa root. Uprawnienia w openSUSE/SLES dla katalogu www możemy nadać (naprawić) za pomocą poniższej komendy:
sudo chown -R root:root /srv/www
A następnie zrestartować apache.
sudo systemctl restart apache2.service
Zmiana właściciela i grupy dla katalogu strony
SLES
sudo chown -R root:root /srv/www/example.com.pl/
Debian
sudo chown -R root:root /var/www/example.com.pl/
Red Hat
sudo chown -R root:root /var/www/example.com.pl/
Aktywacja modułu mod_ssl w systemach linuksowych:
SLES
sudo a2enmod ssl
Debian
sudo a2enmod ssl
Red Hat
sudo yum install mod_ssl
lub
sudo dnf install mod_ssl
Instalacja i konfiguracja certyfikatu SSL za pomocą Let’s Encrypt.
Wykorzystamy do tego stronę https://certbot.eff.org
Z rozwijanej listy Software wybieramy Apache, system operacyjny, to albo Ubuntu 16.04, albo Debian 9, albo CentOS/RHEL 7 i postępujemy zgodnie ze wskazówkami.
Wybierz stronę bez www, lub z www, jak tobie pasuje, ponieważ certbot nam rozpozna wirtualny host dla http, który utworzony został wcześniej.
Nie włączaj przekierowania z http na https, ponieważ to zrobisz po stronie Cloudflare. Inaczej napotkasz błąd. Dlatego wybierz 1 , gdy zapyta o redirect.
Certbot zainstaluje automatycznie certyfikat, utworzy plik wirtualnego hosta.
W przypadku Debian / Ubuntu należy wejść do katalogu sites-available i włączyć dowiazanie symboliczne:
sudo -i
cd /etc/apache2/sites-available
ls -al
a2ensite strona.com.pl-le-ssl.conf
Polecam zmodyfikować plik wirtualnego hosta dla https, aby ostatecznie wyglądał tak:
SLES
W przypadku openSUSE / SLES tworzymy plik wirtualnego hosta dla http (port 443) za pomocą poniższego polecenia:
sudo vi /etc/apache2/vhosts.d/strona.com-le-ssl.conf
Debian
W przypadku Debian tworzymy plik wirtualnego hosta dla http (port 443) za pomocą poniższego polecenia:
sudo vi /etc/apache2/sites-available/strona.com.pl-le-ssl.conf
Red Hat
W przypadku Red Hat tworzymy plik wirtualnego hosta dla http (port 443) za pomocą poniższego polecenia:
sudo vi /etc/httpd/conf.d/strona.com.pl-le-ssl.conf
Przykładowa konfiguracja wirtualnego hosta (port 443, czyli https) dla Debian / Ubuntu / Red Hat / Fedora
<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/run/httpd/ssl_stapling(32768)
<VirtualHost *:443>
Header always set Strict-Transport-Security "max-age=15768000"
SSLEngine on
ServerName strona.com.pl
ServerAlias www.strona.com.pl
DocumentRoot /var/www/strona.com.pl/public_html
LogLevel debug
ErrorLog /var/log/httpd/error.log
CustomLog /var/log/httpd/access.log combined
<Directory /var/www/strona.com.pl/public_html>
Options Indexes FollowSymLinks Includes IncludesNOEXEC SymLinksIfOwnerMatch
AllowOverride All
Require all granted
DirectoryIndex index.php
RewriteEngine On
</Directory>
Include /etc/letsencrypt/options-ssl-apache.conf
SSLUseStapling on
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite HIGH:!aNULL:!MD5
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AE$
SSLHonorCipherOrder on
SSLCompression off
SSLSessionTickets off
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
<files readme.html>
order allow,deny
deny from all
</files>
SSLCertificateFile /etc/letsencrypt/live/strona.com.pl/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/strona.com.pl/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/strona.com.pl/chain.pem
</VirtualHost>
</IfModule>