Voeg een firewall toe en configureer ssh-toegang tot de server, stel https in voor de site

Zodra de serverconfiguratie voor je site is ingesteld, is het tijd om enkele basisbeveiligingsmaatregelen te nemen.

16 juli 2020 14:03
Thema's: Deployment

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.

1. De firewall inschakelen

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'
2. Stel https in

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).

3. Stel SSH-toegang in van lokale computer naar server

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)