Beveiliging van de Linux-server. Wat eerst te doen

Beveiliging van de Linux-server. Wat eerst te doen
Habib M’henni / Wikimedia Commons, CC BY-SA

Tegenwoordig is het opstarten van een server op een hostingplatform een kwestie van een paar minuten en enkele muisklikken. Maar onmiddellijk na de lancering komt hij in een vijandige omgeving terecht, omdat hij openstaat voor het hele internet, net als een onschuldige meid op een rockdisco. Hij zal snel ontdekt worden door scanners en duizenden automatisch gegenereerde bots die over het netwerk zwerven op zoek naar kwetsbaarheden en verkeerde configuraties. Er zijn een paar dingen die je onmiddellijk na de lancering moet doen om basisbeveiliging te garanderen.

Inhoud

Niet-root gebruiker

Allereerst moet je een niet-root gebruiker aanmaken. Het probleem is dat de gebruiker root absolute privileges in het systeem heeft, en als je hem op afstand laat administreren, maak je het voor een hacker heel gemakkelijk door hem een geldige gebruikersnaam te geven.

Daarom moet je een andere gebruiker aanmaken en het externe beheer voor de root gebruiker via SSH uitschakelen.

Een nieuwe gebruiker maak je aan met het commando useradd:

useradd [options]

Vervolgens kun je een wachtwoord voor hem instellen met het commando passwd:

passwd

Tot slot moet je deze gebruiker toevoegen aan de groep die het recht heeft om commando's met verhoogde privileges uit te voeren. sudoAfhankelijk van de Linux-distributie kunnen dit verschillende groepen zijn. Bijvoorbeeld, in CentOS en Red Hat voeg je de gebruiker toe aan de groep wheel:

usermod -aG wheel

In Ubuntu wordt hij aan de groep toegevoegd sudo:

usermod -aG sudo

Sleutels in plaats van SSH-wachtwoorden

Brute-force-aanvallen of wachtwoordlekken zijn standaard aanvalsvectors, dus het is beter om de wachtwoordauthenticatie via SSH (Secure Shell) uit te schakelen en in plaats daarvan sleutelauthenticatie te gebruiken.

Er zijn verschillende programma's voor de implementatie van het SSH-protocol, zoals lsh en Dropbear, maar de populairste is OpenSSH. De installatie van de OpenSSH-client op Ubuntu:

sudo apt install openssh-client

Installatie op de server:

sudo apt install openssh-server

Het starten van de SSH-daemon (sshd) op de server onder Ubuntu:

sudo systemctl start sshd

Automatisch starten van de daemon bij elke opstart:

sudo systemctl enable sshd

Het is belangrijk op te merken dat de serverzijde van OpenSSH ook de clientzijde omvat. Dat wil zeggen, via openssh-server U kunt verbinding maken met andere servers. Bovendien kunt u vanaf uw cliëntmachine een SSH-tunnel opzetten van de externe server naar een externe host, en dan zal die externe host de externe server beschouwen als de bron van de verzoeken. Een zeer handige functie voor het verbergen van uw systeem. Zie het artikel voor meer informatie. Praktische tips, voorbeelden en SSH-tunnels..

Op de cliëntmachine heeft het meestal geen zin om een volledige server te installeren, om de mogelijkheid van externe toegang tot de computer (uit veiligheidsredenen) te vermijden.

Dus, voor uw nieuwe gebruiker moet u eerst SSH-sleutels genereren op de computer waarvan u toegang tot de server wilt krijgen:

ssh-keygen -t rsa

De publieke sleutel wordt opgeslagen in een bestand .pub en ziet eruit als een reeks willekeurige tekens die begint met ssh-rsa.

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname

Vervolgens moet u vanuit root op de server een SSH-map aanmaken in de home-directory van de gebruiker en de publieke SSH-sleutel toevoegen aan het bestand authorized_keys, met een teksteditor zoals Vim:

mkdir -p /home/user_name/.ssh && touch /home/user_name/.ssh/authorized_keys

vim /home/user_name/.ssh/authorized_keys

Zorg er tenslotte voor dat de juiste machtigingen voor het bestand zijn ingesteld:

chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keys

en verander het eigendom naar deze gebruiker:

chown -R username:username /home/username/.ssh

Aan de kant van de cliënt moet de locatie van de privé sleutel voor authenticatie worden opgegeven:

ssh-add DIR_PATH/keylocation

Nu kunt u inloggen op de server onder de gebruikersnaam met deze sleutel:

ssh [username]@hostname

Na autorisatie kunt u het scp-commando gebruiken om bestanden te kopiëren, of de tool sshfs om een bestandssysteem of mappen op afstand te koppelen.

Het wordt aangeraden om meerdere back-ups van de privésleutel te maken, want als u de authenticatie op wachtwoord uitschakelt en deze verliest, heeft u helemaal geen toegang meer tot uw eigen server.

Zoals hierboven vermeld, moet de root-authenticatie in SSH worden uitgeschakeld (om deze reden hebben we een nieuwe gebruiker aangemaakt).

Op CentOS/Red Hat vinden we de regel PermitRootLogin yes in het configuratiebestand /etc/ssh/sshd_config en wijzigen deze:

PermitRootLogin no

Op Ubuntu voegen we de regel toe PermitRootLogin no aan het configuratiebestand 10-my-sshd-settings.conf:

sudo echo "PermitRootLogin no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Nadat gecontroleerd is dat de nieuwe gebruiker zich kan authentiseren met zijn sleutel, kan de authenticatie met wachtwoord worden uitgeschakeld om het risico van uitlekken of brute-forcing te minimaliseren. Nu moet een aanvaller de privé-sleutel verkrijgen om toegang tot de server te krijgen.

Op CentOS/Red Hat vinden we de regel PasswordAuthentication yes in het configuratiebestand /etc/ssh/sshd_config en we wijzigen het als volgt:

PasswordAuthentication no

Op Ubuntu voegen we de regel toe PasswordAuthentication no naar bestand 10-my-sshd-settings.conf:

sudo echo "PasswordAuthentication no" >> /etc/ssh/sshd_config.d/10-my-sshd-settings.conf

Voor instructies over het instellen van twee-factor-authenticatie via SSH, zie hier.

Firewall

De firewall zorgt ervoor dat er alleen verkeer naar de server gaat via de poorten die je expliciet hebt toegestaan. Dit beschermt tegen het exploiteren van poorten die per ongeluk zijn ingeschakeld met andere services, waardoor de aanvalsvlak aanzienlijk wordt verminderd.

Voor het installeren van de firewall moet je ervoor zorgen dat SSH op de uitzonderingenlijst staat en niet wordt geblokkeerd. Anders kunnen we na het inschakelen van de firewall geen verbinding meer maken met de server.

De Uncomplicated Firewall (ufw) wordt meegeleverd met de Ubuntu-distributie, terwijl CentOS/Red Hat — firewalld.

SSH toestaan in de firewall op Ubuntu:

sudo ufw allow ssh

Op CentOS/Red Hat gebruiken we het commando firewall-cmd:

sudo firewall-cmd --zone=public --add-service=ssh --permanent

Na deze procedure kun je de firewall inschakelen.

Op CentOS/Red Hat starten we de systemd-service voor firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Op Ubuntu gebruiken we het volgende commando:

sudo ufw enable

Fail2Ban

Dienst Fail2Ban analyseert de logs op de server en telt het aantal toegangspogingen vanaf elk IP-adres. In de instellingen zijn er regels aangegeven voor hoeveel toegangspogingen zijn toegestaan binnen een bepaald tijdsinterval — waarna dit IP-adres voor een bepaalde periode wordt geblokkeerd. Bijvoorbeeld, we staan 5 mislukte SSH-authenticatiepogingen toe binnen een periode van 2 uur, waarna dit IP-adres voor 12 uur wordt geblokkeerd.

Installatie van Fail2Ban op CentOS en Red Hat:

sudo yum install fail2ban

Installatie op Ubuntu en Debian:

sudo apt install fail2ban

Run:

systemctl start fail2ban
systemctl enable fail2ban

Het programma heeft twee configuratiebestanden: /etc/fail2ban/fail2ban.conf en /etc/fail2ban/jail.conf. Beperkingen voor bannen worden in het tweede bestand aangegeven.

De jail voor SSH is standaard ingeschakeld met de standaardinstellingen (5 pogingen, interval van 10 minuten, ban voor 10 minuten).

[DEFAULT]
ignorecommand =
bantime = 10m
findtime = 10m
maxretry = 5

Naast SSH kan Fail2Ban ook andere services op de webserver nginx of Apache beschermen.

Automatische beveiligingsupdates

Zoals bekend worden er voortdurend nieuwe kwetsbaarheden in programma's ontdekt. Na de publicatie van informatie worden exploits opgenomen in populaire exploit-packs, die massaal worden gebruikt door hackers en jongeren bij het scannen van alle servers. Daarom is het zeer belangrijk om beveiligingsupdates te installeren zodra ze beschikbaar komen.

Op de Ubuntu-server zijn automatische beveiligingsupdates ingeschakeld in de standaardconfiguratie, zodat er geen extra acties nodig zijn.

Op CentOS/Red Hat moet de applicatie dnf-automatic worden geïnstalleerd en de timer ingeschakeld worden:

sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timer

Timercontrole:

sudo systemctl status dnf-automatic.timer

Verander standaardpoorten

SSH werd in 1995 ontwikkeld als vervanging voor telnet (poort 23) en ftp (poort 21), daarom koos de auteur van het programma Tatu Ylönen voor poort 22 als standaard, wat werd goedgekeurd door IANA.

Natuurlijk zijn alle kwaadwillenden zich ervan bewust op welke poort SSH draait — en scannen ze deze samen met andere standaardpoorten om de softwareversie, de standaard rootwachtwoorden, enzovoorts, te controleren.

Het veranderen van standaardpoorten — obfuscatie — vermindert het volume van ongewenst verkeer, de grootte van de logs en de belasting van de server aanzienlijk, en verkleint ook de aanvalsoppervlakte. Hoewel sommigen deze methode bekritiseren als "bescherming door onduidelijkheid" (. security through obscurity). De reden is dat deze techniek indruist tegen fundamentele architectonische beveiliging. Daarom stelt het Amerikaanse National Institute of Standards and Technology in het "Server Security Guide" de noodzaak van een open serverarchitectuur vast: "De beveiliging van het systeem mag niet afhankelijk zijn van de verborgenheid van de implementatie van zijn componenten," staat in het document.

Theoretisch gezien gaat het veranderen van standaardpoorten in tegen de praktijk van open architectuur. Maar in de praktijk neemt het volume van kwaadaardig verkeer daadwerkelijk af, zodat dit een eenvoudige en effectieve maatregel is.

Het poortnummer kan worden ingesteld door de richtlijn Port 22 in het configuratiebestand te wijzigen. /etc/ssh/sshd_configHet wordt ook opgegeven met de parameter -p in sshd. SSH-client en programma's sftp ondersteunen ook de parameter -p.

Parameter -p die kan worden gebruikt om het poortnummer op te geven bij verbinding maken met de opdracht ssh op Linux. In sftp en scp wordt de parameter -P (hoofding P). De opdracht vanuit de opdrachtregel overschrijft elke waarde in de configuratiebestanden.

Als er veel servers zijn, kunnen bijna al deze acties ter bescherming van de Linux-server worden geautomatiseerd met een script. Maar als er maar één server is, is het beter om het proces handmatig te controleren.

Adverteervermelding

Bestel nu en begin meteen met werken! VDS aanmaken van elke configuratie en met elk besturingssysteem binnen een minuut. De maximale configuratie laat je echt losgaan — 128 CPU-kernen, 512 GB RAM, 4000 GB NVMe. Epic 🙂

Beveiliging van de Linux-server. Wat eerst te doen

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster