na základech:
nutný základ
aptitude update aptitude upgrade
na PC vygenerovat a odeslat klíče na server
ssh-keygen -t ed25519 -a 10 ssh-copy-id user@server.cz
v /etc/ssh/sshd_config:
PasswordAuthentication no Port 12345 service ssh restart
v Debianu bývá dost stará verze PHP, takže přidáme repo Ondřeje Surého:
aptitude install lsb-release wget https://packages.sury.org/php/apt.gpg -O /etc/apt/trusted.gpg.d/php-sury.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php-sury.list aptitude update
doinstalovat:
aptitude install bash-completion aptitude install apache2 aptitude install mariadb-server mariadb-client aptitude install php8.x libapache2-mod-php8.x aptitude install php8-apcu service apache2 restart
vytvořit soubor /var/www/html/info.php s obsahem:
<?php phpinfo(); ?>
a doladit:
apt-cache search php8.x service apache2 restart
vytvořit adresář do kterého nasypeme statický obsah, nebo wordpress, dokuwiky, …
mkdir /var/www/mujserver.cz
vytvořit soubor /etc/apache2/sites-available/mujserver.cz s obsahem:
<VirtualHost *:80> ServerName www.mujserver.cz ServerAlias mujserver.cz DocumentRoot /var/www/mujserver.cz </VirtualHost>
a sajtu povolíme a reloudneme Apače
a2ensite mujserver.cz service apache2 reload
Nezabezpečené HTTP snad už dneska nikdo nechce, takže pokračujem.
Podrobněji na Rootu
Cesta ke zdroji
Napřed vytvoříme přesměrování pro adresář .well-known, který bude sloužit pro ověřování při generování certifikátů, ale v dokument rootu ho nechceme.
Doplníme tedy do /etc/apache2/sites-available/mujserver.cz.conf:
Alias "/.well-known" "/srv/letsencrypt/webroot/.well-known" <Directory /srv/letsencrypt/webroot/> AllowOverride None Require all granted Satisfy Any </Directory>
Pak založíme uživatele, pod kterým poběží získávání certifikátů
useradd -m letsencrypt
a vytvoříme adresáře s patřičným oprávněním
mkdir /srv/cert mkdir /srv/letsencrypt/webroot -p chown -R letsencrypt:letsencrypt /srv/cert/ chown -R letsencrypt:letsencrypt /srv/letsencrypt/
Poté přidáme oprávnění uživateli letsencrypt k reloadu apače.
visudo
a doplníme na:
# User privilege specification root ALL=(ALL:ALL) ALL letsencrypt ALL = NOPASSWD: /etc/init.d/apache2 reload
Následně přejdeme k instalaci klienta:
cd /home/letsencrypt su letsencrypt git clone https://github.com/Neilpang/acme.sh.git cd ./acme.sh ./acme.sh --install --certhome /srv/cert
instalátor zapíše i plánovanou událost do crontabu (pod userem letsencrypt)
a poté si vygenerujeme certifikáty
.acme.sh/acme.sh --issue -d mujserver.cz -d www.mujserver.cz -d xyz.mujserver.cz -w /srv/letsencrypt/webroot/ --reloadcmd "sudo /etc/init.d/apache2 reload"
Nakonec, už jako root, upravíme soubor /etc/apache2/sites-available/mujserver.cz, aby apač věděl, kde má certifikáty:
<VirtualHost *:443> ServerName www.mujserver.cz ServerAlias mujserver.cz DocumentRoot /var/www/mujserver.cz ServerAdmin ferda@example.cz SSLEngine on SSLCertificateFile /srv/cert/mujserver.cz/mujserver.cz.cer SSLCertificateKeyFile /srv/cert/mujserver.cz/mujserver.cz.key SSLCertificateChainFile /srv/cert/mujserver.cz/fullchain.cer </VirtualHost>
Pro apač 2.4:
<VirtualHost *:443> ServerName www.mujserver.cz ServerAlias mujserver.cz DocumentRoot /var/www/mujserver.cz ServerAdmin ferda@example.cz SSLEngine on SSLCertificateFile /srv/cert/mujserver.cz/fullchain.cer SSLCertificateKeyFile /srv/cert/mujserver.cz/mujserver.cz.key </VirtualHost>
v /etc/apache2/mods-available/ssl.conf odkomentovat:
SSLHonorCipherOrder on
a doladíme
a2enmod ssl service apache2 restart
další zabezpečení
v souboru /etc/apache2/conf-available/security.conf odkomentovat:
Header set X-Frame-Options: "sameorigin" Header set X-Content-Type-Options: "nosniff"
a doplnit:
Header always set X-Xss-Protection "1; mode=block"
a nakonec
a2enmod headers service apache2 restart
php
HSTS
do konfigurace virtualhosta dolnit:
<VirtualHost *:443> ... Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload" ... </VirtualHost>
!!!Pro začátek nastavit menší max-age (minuty, hodiny), pak prodlužovat, aby si to člověk na dva roky nezaříznul!!!