Nastavení VPS

Instalace


na základech:

  1. Debian 8 → 11
  2. Apache 2
  3. PHP5 → 8.x


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:

  1. vypnout přihlašování heslem
  2. natavit na jakém portu má server naslouchat ssh spojení
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

Nastavení sajty


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!!!