Linux-serverbeveiliging. Wat eerst te doen

Linux-serverbeveiliging. Wat eerst te doen
Habib M'henni/Wikimedia Commons, CC BY-SA

Tegenwoordig is het opzetten van een server op een hosting een kwestie van een paar minuten en een paar muisklikken. Maar direct na de lancering bevindt hij zich in een vijandige omgeving, omdat hij openstaat voor het hele internet als een onschuldig meisje in een rockerdisco. Scanners vinden het snel en detecteren duizenden automatisch gescripte bots die het netwerk doorzoeken op zoek naar kwetsbaarheden en verkeerde configuraties. Er zijn een paar dingen die u direct na de lancering moet doen om basisbescherming te garanderen.

Inhoud

Niet-rootgebruiker

De eerste stap is om een ​​niet-rootgebruiker voor jezelf aan te maken. Het punt is dat de gebruiker root absolute privileges in het systeem, en als u hem beheer op afstand toestaat, doet u de helft van het werk voor de hacker en laat u een geldige gebruikersnaam voor hem achter.

Daarom moet u een andere gebruiker aanmaken en beheer op afstand via SSH voor root uitschakelen.

Een nieuwe gebruiker wordt gestart door het commando useradd:

useradd [options] <username>

Vervolgens wordt er een wachtwoord voor toegevoegd met het commando passwd:

passwd <username>

Ten slotte moet deze gebruiker worden toegevoegd aan een groep die het recht heeft om verhoogde commando's uit te voeren sudo. Afhankelijk van de Linux-distributie kunnen dit verschillende groepen zijn. In CentOS en Red Hat wordt de gebruiker bijvoorbeeld toegevoegd aan de groep wheel:

usermod -aG wheel <username>

In Ubuntu wordt het toegevoegd aan de groep sudo:

usermod -aG sudo <username>

Sleutels in plaats van SSH-wachtwoorden

Brute kracht of wachtwoordlekken zijn een standaard aanvalsvector, dus het is het beste om wachtwoordauthenticatie in SSH (Secure Shell) uit te schakelen en in plaats daarvan sleutelauthenticatie te gebruiken.

Er zijn verschillende programma's om het SSH-protocol te implementeren, zoals lsh и dropbear, maar de meest populaire is OpenSSH. De OpenSSH-client op Ubuntu installeren:

sudo apt install openssh-client

Serverinstallatie:

sudo apt install openssh-server

De SSH-daemon (sshd) starten op de Ubuntu-server:

sudo systemctl start sshd

Start de daemon automatisch bij elke keer opstarten:

sudo systemctl enable sshd

Opgemerkt moet worden dat het servergedeelte van OpenSSH het clientgedeelte bevat. Dat wil zeggen, door openssh-server u kunt verbinding maken met andere servers. Bovendien kunt u vanaf uw clientcomputer een SSH-tunnel starten van een externe server naar een externe host, waarna de externe host de externe server als de bron van verzoeken beschouwt. Een zeer handige functie voor het maskeren van uw systeem. Zie artikel voor details "Praktische tips, voorbeelden en SSH-tunnels".

Op een clientcomputer heeft het meestal geen zin om een ​​volwaardige server te installeren om de mogelijkheid van externe verbinding met een computer te voorkomen (om veiligheidsredenen).

Dus voor uw nieuwe gebruiker moet u eerst SSH-sleutels genereren op de computer van waaruit u toegang krijgt tot de server:

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

Maak vervolgens vanuit root een SSH-directory op de server in de homedirectory van de gebruiker en voeg de openbare SSH-sleutel toe aan het bestand authorized_keys, met behulp van een teksteditor zoals Vim:

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

vim /home/user_name/.ssh/authorized_keys

Stel ten slotte de juiste machtigingen voor het bestand in:

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 clientzijde moet u de locatie van de geheime sleutel voor authenticatie specificeren:

ssh-add DIR_PATH/keylocation

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

ssh [username]@hostname

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

Het is raadzaam om meerdere back-ups van de privésleutel te maken, want als u wachtwoordauthenticatie uitschakelt en deze kwijtraakt, kunt u zich op geen enkele manier aanmelden bij uw eigen server.

Zoals hierboven vermeld, moet je in SSH authenticatie voor root uitschakelen (dit is de reden waarom we een nieuwe gebruiker zijn begonnen).

Op CentOS/Red Hat vinden we de lijn PermitRootLogin yes in het configuratiebestand /etc/ssh/sshd_config en verander het:

PermitRootLogin no

Voeg op Ubuntu de regel toe PermitRootLogin no naar het configuratiebestand 10-my-sshd-settings.conf:

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

Nadat u hebt gecontroleerd of de nieuwe gebruiker zich met zijn sleutel verifieert, kunt u wachtwoordverificatie uitschakelen om het risico van wachtwoordlekkage of brute kracht te elimineren. Om toegang te krijgen tot de server, heeft een aanvaller nu een privésleutel nodig.

Op CentOS/Red Hat vinden we de lijn PasswordAuthentication yes in het configuratiebestand /etc/ssh/sshd_config en verander het zo:

PasswordAuthentication no

Voeg op Ubuntu de regel toe PasswordAuthentication no indienen 10-my-sshd-settings.conf:

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

Voor instructies over het inschakelen van tweefactorauthenticatie via SSH, zie hier.

Firewall

De firewall zorgt ervoor dat alleen het verkeer op de poorten die je direct toestaat naar de server gaat. Dit beschermt tegen misbruik van poorten die per ongeluk zijn ingeschakeld met andere services, waardoor het aanvalsoppervlak aanzienlijk wordt verkleind.

Voordat u een firewall installeert, moet u ervoor zorgen dat SSH is opgenomen in de uitsluitingslijst en niet wordt geblokkeerd. Anders kunnen we na het starten van de firewall geen verbinding maken met de server.

Ubuntu-distributie wordt geleverd met ongecompliceerde firewall (ufw), en met CentOS/Red Hat - firewalld.

SSH toestaan ​​in de firewall op Ubuntu:

sudo ufw allow ssh

Gebruik op CentOS/Red Hat de opdracht firewall-cmd:

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

Na deze procedure kunt u de firewall starten.

Start op CentOS/Red Hat de systemd-service voor firewalld:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Op Ubuntu gebruiken we de volgende opdracht:

sudo ufw enable

Fail2Ban

Dienst Fail2Ban analyseert logs op de server en telt het aantal toegangspogingen van elk IP-adres. De instellingen specificeren de regels voor hoeveel toegangspogingen zijn toegestaan ​​voor een bepaald interval - waarna dit IP-adres voor een bepaalde tijd wordt geblokkeerd. Laten we bijvoorbeeld 5 mislukte SSH-authenticatiepogingen binnen 2 uur toestaan ​​en vervolgens het opgegeven IP-adres 12 uur lang blokkeren.

Fail2Ban installeren op CentOS en Red Hat:

sudo yum install fail2ban

Installatie op Ubuntu en Debian:

sudo apt install fail2ban

Launch:

systemctl start fail2ban
systemctl enable fail2ban

Het programma heeft twee configuratiebestanden: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. Verbodsbeperkingen worden gespecificeerd in het tweede bestand.

Jail voor SSH is standaard ingeschakeld met standaardinstellingen (5 pogingen, interval 10 minuten, ban voor 10 minuten).

[STANDAARD] ignorecommand=bantime=10m vindtijd=10m maxopnieuw proberen=5

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

Automatische beveiligingsupdates

Zoals u weet, worden er voortdurend nieuwe kwetsbaarheden gevonden in alle programma's. Nadat de informatie is gepubliceerd, worden exploits toegevoegd aan populaire exploitpacks, die massaal worden gebruikt door hackers en tieners bij het scannen van alle servers op een rij. Daarom is het erg belangrijk om beveiligingsupdates te installeren zodra ze verschijnen.

Op de Ubuntu-server zijn automatische beveiligingsupdates standaard ingeschakeld, dus er is geen verdere actie vereist.

Op CentOS/Red Hat moet u de applicatie installeren dnf-automatisch en schakel de timer in:

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

Timercontrole:

sudo systemctl status dnf-automatic.timer

De standaardpoorten wijzigen

SSH is in 1995 ontwikkeld om telnet (poort 23) en ftp (poort 21) te vervangen, aldus de auteur van het programma, Tatu Iltonen standaard poort 22 geselecteerd, en is goedgekeurd door IANA.

Natuurlijk weten alle aanvallers op welke poort SSH draait - en scannen ze deze samen met de rest van de standaardpoorten om de softwareversie te achterhalen, om standaard root-wachtwoorden te controleren, enzovoort.

Het meerdere keren wijzigen van standaardpoorten - vertroebeling - vermindert de hoeveelheid afvalverkeer, de grootte van de logboeken en de belasting van de server, en verkleint ook het aanvalsoppervlak. Hoewel sommige bekritiseren deze methode van "bescherming door obscuriteit" (beveiliging door onduidelijkheid). De reden is dat deze techniek in strijd is met het fundamentele architectonische bescherming. Daarom heeft bijvoorbeeld het Amerikaanse National Institute of Standards and Technology in "Serverbeveiligingshandleiding" geeft de noodzaak aan van een open serverarchitectuur: "De veiligheid van een systeem mag niet afhangen van de geheimhouding van de implementatie van zijn componenten", zegt het document.

Theoretisch is het wijzigen van de standaardpoorten in strijd met de praktijk van open architectuur. Maar in de praktijk wordt de hoeveelheid kwaadaardig verkeer juist verminderd, dus dit is een eenvoudige en effectieve maatregel.

Het poortnummer kan worden geconfigureerd door de richtlijn te wijzigen Port 22 in het configuratiebestand / Etc / ssh / sshd_config. Het wordt ook aangegeven door de parameter -p <port> в sshd. SSH-client en programma's sftp steun ook de optie -p <port>.

Parameter -p <port> kan worden gebruikt om het poortnummer op te geven bij het verbinden met de opdracht ssh op linux. IN sftp и scp parameter wordt gebruikt -P <port> (hoofdletter P). Opdrachtregelinstructie overschrijft elke waarde in configuratiebestanden.

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

Als advertentie

Bestel en ga direct aan de slag! Oprichting van VDS elke configuratie en met elk besturingssysteem binnen een minuut. Met de maximale configuratie kunt u optimaal profiteren - 128 CPU-cores, 512 GB RAM, 4000 GB NVMe. Episch 🙂

Linux-serverbeveiliging. Wat eerst te doen

Bron: www.habr.com