
, 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 en , maar de populairste is OpenSSH. De installatie van de OpenSSH-client op Ubuntu:
sudo apt install openssh-clientInstallatie op de server:
sudo apt install openssh-serverHet starten van de SSH-daemon (sshd) op de server onder Ubuntu:
sudo systemctl start sshdAutomatisch 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. .
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_keysvim /home/user_name/.ssh/authorized_keysZorg 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_keysen verander het eigendom naar deze gebruiker:
chown -R username:username /home/username/.sshAan de kant van de cliënt moet de locatie van de privé sleutel voor authenticatie worden opgegeven:
ssh-add DIR_PATH/keylocationNu kunt u inloggen op de server onder de gebruikersnaam met deze sleutel:
ssh [username]@hostnameNa autorisatie kunt u het scp-commando gebruiken om bestanden te kopiëren, of de tool 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.confNadat 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.confVoor instructies over het instellen van twee-factor-authenticatie via SSH, zie .
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 () wordt meegeleverd met de Ubuntu-distributie, terwijl CentOS/Red Hat — .
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 --permanentNa 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 firewalldOp Ubuntu gebruiken we het volgende commando:
sudo ufw enable
Fail2Ban
Dienst 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 fail2banInstallatie op Ubuntu en Debian:
sudo apt install fail2banRun:
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 worden geïnstalleerd en de timer ingeschakeld worden:
sudo dnf upgrade
sudo dnf install dnf-automatic -y
sudo systemctl enable --now dnf-automatic.timerTimercontrole:
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 , 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 (. security through obscurity). De reden is dat deze techniek indruist tegen fundamentele . Daarom stelt het Amerikaanse National Institute of Standards and Technology in het 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. Het wordt ook opgegeven met de parameter -p in . SSH-client en programma's 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 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! 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 🙂
Bron: habr.com
