ComputerBas

Tips, tricks and manuals

Je bent niet ingelogd.

#1 2021-12-25 01:30:51

Bas
Administrator
Geregistreerd: 2019-11-10
Posts: 91

Debian 12 en een veilige website

Met deze handleiding krijg je Debian 12.0, Apache 2.4.57, PHP 8.2.5, SSH, SSL, HTTPS, HTTP2, WAF, securityheaders en een veilige website.

Installeer Debian 12 Server met Cinnamon desktop, websever en SSH server.
Log in als root.

Open terminal:

root@vps#

apt update
apt upgrade

Installeer UFW en zet de firewall aan:

apt install ufw
ufw status
ufw app list
ufw allow SSH
ufw allow 'WWW Full'
ufw enable
ufw status

SSH:

Om onderstaande makkelijk te kunnen plakken in je terminal moet je root toestaan voor SSH.

nano /etc/ssh/sshd_config

PermitRootLogin yes

Reboot of reload SSH
Nu kan je vanaf je computer inloggen op je webserver met SSH als root.
Als je dit niet veilig genoeg vind geef dan in de firewall aan welk IP adres toegang mag hebben via SSH en verwijder alle andere.

ufw allow from hier.je.ip.adres to any port 22
ufw status
ufw reload
ufw status

Kijk op welke regel SSH staat en verwijder de regel.

ufw status
ufw delete 1
ufw reload

Kijk nog een keer op welke regel SSH (v6) staat en verwijder de regel.

ufw delete 4
ufw reload
ufw status

En dan de website.

Ik gebruik in deze handleiding de domeinnaam computerbas.nl

Installeer CertBot voor Apache websites:

apt install certbot python3-certbot-apache

Apache:

systemctl status apache2
apache2ctl configtest
systemctl restart apache2
mkdir -p /var/www/computerbas
nano /var/www/computerbas/index.html

en dan

<html>
<head>
<title>Welkom op computerbas.nl!</title>
</head>
<body>
<h1>Gelukt! Virtual host werkt!</h1>
</body>
</html>

Om te kijken of het allemaal gelukt is doe je dit:

hostname -I
apt install curl
curl -4 icanhazip.com
http://your_server_ip
systemctl restart apache2

en dan

nano /etc/apache2/sites-available/computerbas.conf

Zet onderstaande in de configfile :

<VirtualHost *:80>

ServerAdmin bas@computerbas.nl
ServerName computerbas.nl
ServerAlias www.computerbas.nl
DocumentRoot /var/www/computerbas
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Maak een aparte config file per website in plaats van de default config file:

a2dissite 000-default.conf
a2ensite computerbas.conf
apache2ctl configtest
systemctl restart apache2

PHP 8.2:

apt install php8.2
apt install php8.2-mysql
apt install php8.2-zip
apt install php8.2-fpm
apt install php8.2-mbstring
apt install php-curl
apt install php8.2-curl
a2enmod proxy_fcgi setenvif
systemctl restart apache2
a2enconf php8.2-fpm
systemctl restart apache2
a2enmod setenvif
a2enmod deflate
a2enmod filter
a2enmod expires
a2enmod rewrite
a2enmod include

HTTP2:

a2dismod php8.2
systemctl restart apache2
a2dismod mpm_prefork
a2enmod mpm_event
systemctl restart apache2
service php8.2-fpm restart
a2enmod http2
systemctl restart apache2
a2enmod headers
systemctl restart apache2

SSL:

certbot --apache --rsa-key-size 4096 --must-staple --staple-ocsp -d computerbas.nl -d www.computerbas.nl

sudo certbot renew --dry-run

Security:

apt install libapache2-mod-security2

systemctl restart apache2

nano /etc/apache2/conf-enabled/security.conf

en dan spoofen of hiden.

ServerTokens Full

ServerSignature On

SecServerSignature "ComputerBas"

TraceEnable Off

WAF:

nano /etc/modsecurity/modsecurity.conf 

#SecRuleEngine DetectionOnly
SecRuleEngine On

En dan..

Securityheaders in ssl.conf

Er zijn meer dan 100 HTTP response headers en je hebt ze zeker niet allemaal nodig. Alle mogelijk denkbare headers die je redelijkerwijs nodig zou kunnen hebben voor beveiliging staan hieronder.
Probeer ze zeker niet allemaal tegelijk aan te zetten want dan kom je er niet achter welke header een probleem geeft als je website het niet meer doet. Als je meer wilt weten over een specifieke header check wikipedia: https://en.wikipedia.org/wiki/List_of_H … der_fields

Als je Let's Encrypt gebruikt voor je SSL certificaat staat het configuratie bestand hier:

/etc/letsencrypt/options-ssl-apache.conf

En in:

/etc/apache2/sites-enabled/000-default-le-ssl.conf

staat :

Include /etc/letsencrypt/options-ssl-apache.conf

Om een nieuw configuratie bestand te gebruiken doe je dit:

sudo nano /etc/apache2/sites-available/computerbas.conf
<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/var/run/apache2/stapling_cache(128000)
<VirtualHost *:443>
DocumentRoot /var/www/computerbas
ServerName www.computerbas.nl
ServerAlias computerbas.nl
Include /etc/letsencrypt/ssl.conf
SSLCertificateFile /etc/letsencrypt/live/computerbas.nl/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/computerbas.nl/privkey.pem
</VirtualHost>
<Directory /var/www/computerbas>
    DirectoryIndex index.php
    AddType application/x-httpd-php .php
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
</IfModule>

en dan

sudo nano /etc/letsencrypt/ssl.conf
SSLEngine On
SSLHonorCipherOrder On
SSLCompression Off
SSLUseStapling On
SSLOptions +StrictRequire
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-SHA
Protocols h2
SSLOpenSSLConfCmd ECDHParameters secp384r1
SSLOpenSSLConfCmd Curves secp521r1:secp384r1
SSLSessionTickets Off
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
ExpiresActive On
ExpiresDefault "access plus 1 week"
SetEnv no-gzip 

#Kijk uit met deze settings! Controleer of je website nog wel werkt na elke stap!
#Check het debugscherm van je browser en de logboeken van je webserver!

Header always set Strict-Transport-Security 'max-age=63072000; includeSubDomains; preload'
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff
#Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
#Header always set Set-Cookie __Secure-sessionid=9876543210;Path=/;Secure;HttpOnly;SameSite=Strict
Header always set X-Xss-Protection '1; mode=block'
Header always set Referrer-Policy 'no-referrer'
Header always set X-Permitted-Cross-Domain-Policies 'master-only'
Header always set X-Download-Options 'noopen'
Header always set X-Powered-By ComputerBas
Header always set Expect-CT max-age=0
Header always set Expect-Staple 'max-age=31536000; includeSubDomains; preload'
Header always set Access-Control-Allow-Origin computerbas.nl
Header always set Accept-Ranges bytes
Header always set Allow "GET, POST"
Header always set X-DNS-Prefetch-Control on
Header always set X-Robots-Tag all
#Header always set X-Robots-Tag none
Header always set Trailer Max-Forwards
Header always set Tk ?
Header always set X-UA-Compatible IE=edge
Header always set X-AspNet-Version ComputerBas
Header always set Access-Control-Allow-Credentials true
Header always set Access-Control-Allow-Methods "POST, GET"
Header always set Access-Control-Allow-Headers "origin"
Header always set Access-Control-Request-Method "POST, GET"
Header always set Access-Control-Request-Headers "X-PINGOTHER, Content-Type"
Header always set Access-Control-Max-Age 3600
Header always set Access-Control-Expose-Headers: Content-Length
Header always set Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=(), midi=(),fullscreen=()"

#Kijk uit met de onderstaande CSP settings! Controleer of je website nog wel werkt in het debug scherm van de browser.

Header always set Content-Security-Policy "default-src 'none'; media-src 'self'; object-src 'none'; font-src 'self'; frame-ancestors 'none'; form-action 'none'; manifest-src 'self'; img-src data: 'self'; base-uri 'none'; style-src 'self'; connect-src 'self'; script-src https://www.computerbas.nl; child-src https://gadgets.buienradar.nl; upgrade-insecure-requests;"

Alles werkend? Cool! Maak een snapshot en een backup!

Laatst bewerkt door Bas (2023-06-05 20:51:26)

Offline

Forum footer

Powered by FluxBB 1.5.11