
, CC BY-SA
Tegenwoordig is het opzetten van een server op een hostingdienst een kwestie van een paar minuten en een paar muisklikken. Maar direct na de lancering bevindt het zich in een vijandige omgeving, omdat het zich als een onschuldig meisje in een rockdisco openstelt voor het hele internet. Het wordt snel opgemerkt door scanners en gedetecteerd door duizenden automatisch gescripte bots die het netwerk afspeuren 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
Het eerste wat u moet doen, is een niet-rootgebruiker voor uzelf aanmaken. 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 houdt u hem een geldige gebruikersnaam over.
Daarom moet u een andere gebruiker aanmaken en extern beheer via SSH voor root uitschakelen.
Er wordt een nieuwe gebruiker aangemaakt met de opdracht useradd:
useradd [options] <username> Vervolgens wordt er een wachtwoord aan toegevoegd met behulp van de opdracht passwd:
passwd <username> Ten slotte moet deze gebruiker worden toegevoegd aan een groep die het recht heeft om opdrachten uit te voeren met verhoogde bevoegdheden. 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 force of wachtwoordlekken zijn een standaard aanvalsmethode. Daarom is het beter om wachtwoordauthenticatie in SSH (Secure Shell) uit te schakelen en in plaats daarvan sleutelauthenticatie te gebruiken.
Er zijn verschillende programma's voor het implementeren van het SSH-protocol, zoals и , maar de populairste is OpenSSH. OpenSSH-client installeren op Ubuntu:
sudo apt install openssh-clientInstallatie op de server:
sudo apt install openssh-serverDe SSH-daemon (sshd) starten op een server waarop Ubuntu draait:
sudo systemctl start sshdStart de daemon automatisch bij elke opstart:
sudo systemctl enable sshd Houd er rekening mee dat het servergedeelte van OpenSSH het clientgedeelte omvat. Dat wil zeggen, door openssh-server U kunt verbinding maken met andere servers. Bovendien kunt u vanaf uw clientcomputer een SSH-tunnel starten van de externe server naar een externe host. De externe host beschouwt de externe server dan als de bron van de verzoeken. Een zeer handige functie om uw systeem te verbergen. Voor meer details zie het artikel .
Meestal heeft het geen zin om een volwaardige server op een clientcomputer te installeren, om de mogelijkheid van een externe verbinding met de computer te voorkomen (vanwege veiligheidsredenen).
Voor uw nieuwe gebruiker moet u eerst SSH-sleutels genereren op de computer waarmee u inlogt op de server:
ssh-keygen -t rsa De openbare sleutel wordt opgeslagen in een bestand .pub en ziet eruit als een reeks willekeurige tekens die beginnen met ssh-rsa.
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ3GIJzTX7J6zsCrywcjAM/7Kq3O9ZIvDw2OFOSXAFVqilSFNkHlefm1iMtPeqsIBp2t9cbGUf55xNDULz/bD/4BCV43yZ5lh0cUYuXALg9NI29ui7PEGReXjSpNwUD6ceN/78YOK41KAcecq+SS0bJ4b4amKZIJG3JWm49NWvoo0hdM71sblF956IXY3cRLcTjPlQ84mChKL1X7+D645c7O4Z1N3KtL7l5nVKSG81ejkeZsGFzJFNqvr5DuHdDL5FAudW23me3BDmrM9ifUmt1a00mWci/1qUlaVFft085yvVq7KZbF2OP2NQACUkwfwh+iSTP username@hostname
Maak vervolgens als root een SSH-directory aan op de server in de home directory 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_keysvim /home/user_name/.ssh/authorized_keysStel ten slotte de juiste machtigingen voor het bestand in:
chmod 700 /home/user_name/.ssh && chmod 600 /home/user_name/.ssh/authorized_keysen verander het eigendom naar deze gebruiker:
chown -R username:username /home/username/.sshAan de clientzijde moet u de locatie van de geheime sleutel voor authenticatie opgeven:
ssh-add DIR_PATH/keylocationU kunt nu inloggen op de server onder de gebruikersnaam met behulp van deze sleutel:
ssh [username]@hostnameNa autorisatie kunt u de scp-opdracht gebruiken om bestanden te kopiëren, het hulpprogramma om een bestandssysteem of mappen op afstand te koppelen.
Het is raadzaam om meerdere back-ups van de privésleutel te maken. Als u de wachtwoordauthenticatie uitschakelt en de sleutel verliest, kunt u namelijk helemaal niet meer inloggen op uw eigen server.
Zoals hierboven vermeld, moet u de authenticatie voor root in SSH uitschakelen (daarom hebben we een nieuwe gebruiker aangemaakt).
Op CentOS/Red Hat vinden we de regel 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.confNadat u hebt gecontroleerd of de nieuwe gebruiker met zijn sleutel is geauthenticeerd, kunt u de wachtwoordauthenticatie uitschakelen om het risico op wachtwoordlekken of brute force-aanvallen te voorkomen. Om toegang te krijgen tot de server, heeft een aanvaller een privésleutel nodig.
Op CentOS/Red Hat vinden we de regel PasswordAuthentication yes in het configuratiebestand /etc/ssh/sshd_config en verander het als volgt:
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.confVoor instructies over het inschakelen van tweefactorauthenticatie via SSH, zie .
Firewall
De firewall zorgt ervoor dat alleen het verkeer dat u expliciet heeft toegestaan, naar de server gaat. Dit beschermt tegen misbruik van poorten die per ongeluk met andere services zijn ingeschakeld, waardoor het aanvalsoppervlak aanzienlijk wordt verkleind.
Voordat u de firewall installeert, moet u ervoor zorgen dat SSH is toegevoegd aan de uitzonderingenlijst en niet wordt geblokkeerd. Anders kunnen we na het starten van de firewall geen verbinding maken met de server.
De Ubuntu-distributie wordt geleverd met een eenvoudige firewall (), en met CentOS/Red Hat - .
SSH toestaan in de firewall op Ubuntu:
sudo ufw allow ssh Op CentOS/Red Hat gebruiken we de opdracht firewall-cmd:
sudo firewall-cmd --zone=public --add-service=ssh --permanentNa deze procedure kunt u de firewall starten.
Start op CentOS/Red Hat de systemd-service voor firewalld:
sudo systemctl start firewalld
sudo systemctl enable firewalldOp Ubuntu gebruiken we de volgende opdracht:
sudo ufw enable
Fail2Ban
Dienst analyseert logboeken op de server en telt het aantal toegangspogingen vanaf elk IP-adres. De instellingen specificeren regels voor het aantal toegangspogingen dat binnen een bepaald interval is toegestaan. Daarna wordt het opgegeven IP-adres gedurende een bepaalde periode geblokkeerd. We staan bijvoorbeeld 5 mislukte SSH-authenticatiepogingen binnen een periode van 2 uur toe. Daarna blokkeren we dit IP-adres gedurende 12 uur.
Fail2Ban installeren op CentOS en Red Hat:
sudo yum install fail2banInstallatie op Ubuntu en Debian:
sudo apt install fail2banLaunch:
systemctl start fail2ban
systemctl enable fail2ban Het programma heeft twee configuratiebestanden: /etc/fail2ban/fail2ban.conf и /etc/fail2ban/jail.conf. De beperkingen voor het verbod worden in het tweede bestand gespecificeerd.
Jail voor SSH is standaard ingeschakeld met de standaardinstellingen (5 pogingen, 10 minuten interval, 10 minuten ban).
[STANDAARD] ignorecommand = bantime = 10m findtime = 10m maxretry = 5
Naast SSH kan Fail2Ban ook andere services op de nginx- of Apache-webserver beschermen.
Automatische beveiligingsupdates
Zoals u weet, worden er in alle programma's voortdurend nieuwe kwetsbaarheden gevonden. Nadat de informatie is gepubliceerd, worden exploits toegevoegd aan populaire exploitpakketten. Deze worden veel gebruikt door hackers en tieners die alle servers achter elkaar scannen. Daarom is het erg belangrijk om beveiligingsupdates te installeren zodra ze beschikbaar zijn.
Ubuntu Server heeft standaard automatische beveiligingsupdates ingeschakeld, dus er zijn geen aanvullende maatregelen vereist.
Op CentOS/Red Hat moet u de applicatie installeren en zet de timer aan:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerDe timer controleren:
sudo systemctl status dnf-automatic.timer
Standaardpoorten wijzigen
SSH werd in 1995 ontwikkeld om telnet (poort 23) en ftp (poort 21) te vervangen, aldus de auteur van het programma Tatu Iltonen en het werd goedgekeurd door IANA.
Uiteraard weten alle aanvallers op welke poort SSH draait. Ze scannen deze poort samen met andere standaardpoorten om de softwareversie te achterhalen, de standaard root-wachtwoorden te controleren, enzovoort.
Door het wijzigen van standaardpoorten (obfuscation) worden de hoeveelheid ongewenste data, de grootte van de logs en de belasting van de server aanzienlijk verminderd. Bovendien wordt het aanvalsoppervlak verkleind. Hoewel sommige (veiligheid door onduidelijkheid). De reden hiervoor is dat deze techniek in strijd is met de fundamentele . Daarom heeft bijvoorbeeld het Amerikaanse National Institute of Standards and Technology in geeft aan dat er behoefte is aan een open serverarchitectuur: “De beveiliging van een systeem mag niet afhankelijk zijn van de geheimhouding van de implementatie van zijn componenten”, aldus het document.
In theorie is het wijzigen van standaardpoorten in strijd met de praktijk van open architectuur. In de praktijk blijkt echter dat het volume van het schadelijke verkeer juist afneemt. Het is dus een eenvoudige en effectieve maatregel.
Het poortnummer kan worden geconfigureerd door de richtlijn te wijzigen Port 22 in het configuratiebestand . Het wordt ook gespecificeerd door de parameter -p <port> в . SSH-client en programma's ondersteunen ook de parameter -p <port>.
Parameter -p <port> kan worden gebruikt om het poortnummer op te geven bij het verbinden met behulp van de opdracht ssh op Linux. IN и scp parameter wordt gebruikt -P <port> (hoofdletter P). Als u dit opgeeft via de opdrachtregel, worden alle waarden in de configuratiebestanden overschreven.
Als u over veel servers beschikt, kunnen vrijwel alle acties ter bescherming van uw Linux-server in een script worden geautomatiseerd. Als er echter maar één server is, is het beter om het proces handmatig te beheren.
Als advertentie
Bestel en ga direct aan de slag! elke configuratie en met elk besturingssysteem binnen een minuut. Met de maximale configuratie kunt u optimaal genieten: 128 CPU-cores, 512 GB RAM, 4000 GB NVMe. Episch 🙂
Bron: www.habr.com
