Zodra de serverconfiguratie voor je site is ingesteld, is het tijd om enkele basisbeveiligingsmaatregelen te nemen.
In een eerdere tutorial hebben we een site geconfigureerd om te draaien op een DigitalOcean-server met Gunicorn, Nginx en Supervisor. We gaan nu de firewall inschakelen, versleutelde toegang (https) tot de site instellen en de toegang tot de server beveiligen met ssh-sleutels.
DigitalOcean heeft een goede tutorial met instructies voor het instellen van UFW (Uncomplicated FireWall). Log in als rootgebruiker (of gebruik sudo
bij elke opdracht). Eerst zorgen we ervoor dat de firewall ons in staat stelt verbinding te maken met ssh
, en daarna zetten we ufw
aan:
ufw allow OpenSSH
ufw enable
We kunnen controleren welke diensten zijn toegestaan met:
ufw status
Alle services zijn nu geblokkeerd, behalve ssh
. Als je toegang tot poort 8000
wilt toestaan voor ontwikkeling, typ dan:
ufw allow 8000
In productie hebben we poort 8000
niet meer nodig, dus we kunnen deze weer blokkeren met:
ufw delete allow 8000
We willen ook de firewall voor Nginx openen. Om te zien welke applicaties ufw
herkent, typ:
ufw app list
De lijst zou Nginx HTTP (voor toegang via poort 80
), Nginx HTTPS (via poort 443
) en Nginx Full (via beide poorten) moeten bevatten. Schakel zowel HTTP als HTTPS in:
ufw allow 'Nginx Full'
Er is wederom een goede tutorial op DigitalOcean over het gebruik van het programma Certbot om gratis TLS/SSL-certificaten van Let's Encrypt te integreren in je Nginx-configuratie. We zullen de gedetailleerde instructies niet herhalen; Installeer Certbot en zijn Nginx-pakket:
sudo apt install certbot python3-certbot-nginx
Voer het Certbot-pakket uit met:
sudo certbot --nginx -d pythoneatstail.com -d www.pythoneatstail.com
Als dit de eerste keer is dat je Certbot gebruikt, moet je een e-mailadres opgeven (zie de tutorial). Vervolgens vraagt Certbot of het al het HTTP-verkeer naar HTTPS moet leiden; kies 2 om hiermee akkoord te gaan. Je kunt de door Certbot gemaakte wijzigingen bekijken in het configuratiebestand /etc/nginx/sites-available/pet
.
Afhankelijk van de versie van het Certbot-pakket op je besturingssysteem, geeft Let's Encrypt je site mogelijk een kwalificatie B in plaats van de hoogste kwalificatie, omdat de minder veilige protocollen TLS 1.0/1.1 nog steeds zijn ingeschakeld. Dat komt omdat Certbot de parameter ssl_protocols
in het configuratiebestand nginx.conf
overschrijft.
Je site zou nu beschikbaar moeten zijn op https://www.pythoneatstail.com (gebruik je eigen domeinnaam).
In een eerdere tutorial hebben we een gebruiker gemaakt met wachtwoordtoegang tot de server. Standaard heeft ook de rootgebruiker een wachtwoord nodig. Door een RSA-sleutelpaar te genereren en de openbare sleutel op de server op te slaan, kunnen we gebruikers zonder wachtwoord toegang geven vanaf de lokale computer. Genereer een sleutelpaar door de volgende opdracht in je terminal op je lokale computer te typen:
ssh-keygen
Als je extra beveiliging wilt, kun je desgewenst een wachtwoordzin toevoegen. De standaardlocatie is verborgen submap .ssh
van de thuismap van de lokale gebruiker. Er zijn twee bestanden: id_rsa
voor de geheime sleutel en id_rsa.pub
voor de openbare sleutel. Print de inhoud van id_rsa.pub
naar je terminal met:
cat .ssh/id_rsa.pub
en kopieer de hele string naar het klembord. Maak verbinding met de server met ssh
en (nog één keer) wachtwoord, en maak in de homedirectory van de gebruiker die je ssh
toegang wilt geven (bijv. /root
voor de rootgebruiker, /home/usr_pe
voor usr_pet
) een verborgen directory .ssh
en een bestand authorized_keys
daarin:
mkdir .ssh
touch .ssh/authorized_keys
Open het bestand met je editor en plak de inhoud van het klembord erin. De gebruiker moet zich nu zonder wachtwoord kunnen aanmelden. Als je wilt, kun je wachtwoordaanmelding uitschakelen door het PasswordAuthentication
-statement te veranderen in het bestand /etc/ssh/sshd_config
. Bewerk het bestand zodat er staat:
PasswordAuthentication no
Start de ssh
-service opnieuw op met:
service ssh restart
Nu zou je alleen met ssh
rechtstreeks toegang tot de server moeten hebben.
Zelfs een veiligere site kan gecorrumpeerd raken en gegevens kunnen verloren gaan. Lees verder om te leren hoe je een back-up kunt maken van je gegevens en deze kunt herstellen.
Reageer op dit artikel (log eerst in of bevestig hieronder met naam en email)