Säkra ditt Linux-systems SSH-anslutning för att skydda ditt system och dina data. Systemadministratörer och hemanvändare måste härda och säkra Internet-vända datorer, men SSH kan vara komplicerat. Här är tio enkla snabba vinster för att skydda din SSH-server.
Grunderna för SSH-säkerhet
SSH står för Säkert skal . Namnet ”SSH” används omväxlande för att betyda antingen själva SSH-protokollet eller programvaruverktygen som tillåter systemadministratörer och användare att skapa säkra anslutningar till fjärrdatorer med det protokollet.
SSH-protokollet är ett krypterat protokoll som är utformat för att ge en säker anslutning över ett osäkert nätverk, till exempel internet. SSH i Linux bygger på en bärbar version av OpenSSH projekt. Det implementeras i en klassisk klientservermodell , med en SSH-server som accepterar anslutningar från SSH-klienter. Klienten används för att ansluta till servern och till visa sessionen till fjärranvändaren. Servern accepterar anslutningen och körs sessionen.
I sin standardkonfiguration kommer en SSH-server att lyssna efter inkommande anslutningar på Transmission Control Protocol ( TCP ) port 22. Eftersom detta är en standardiserad välkänd hamn , det är ett mål för hotaktörer och skadliga robotar .
Hotaktörer startar bots som skannar en rad IP-adresser som letar efter öppna portar. Portarna undersöks sedan för att se om det finns sårbarheter som kan utnyttjas. Att tänka, "Jag är säker, det finns större och bättre mål än jag för de skurkarna att sikta på", är falskt resonemang. Bots väljer inte mål baserat på meriter; de letar metodiskt efter system de kan bryta mot.
Du nominerar dig själv som ett offer om du inte har säkrat ditt system.
Säkerhetsfriktion
Säkerhetsfriktion är irritationen - i vilken grad som helst - som användare och andra kommer att uppleva när du genomför säkerhetsåtgärder. Vi har långa minnen och kan komma ihåg att vi introducerade nya användare till ett datorsystem och hörde dem fråga med en förskräckt röst om de verkligen var tvungen att ange ett lösenord varje gång de loggade in på stordatorn. Det - för dem - var säkerhetsfriktion.
(För övrigt krediteras uppfinningen av lösenordet Fernando J. Corbató , en annan figur i panteonen för datavetare vars kombinerade arbete bidrog till omständigheterna som ledde till födelsen av Unix .)
Att införa säkerhetsåtgärder innebär vanligtvis någon form av friktion för någon. Företagare måste betala för det. Datoranvändarna kan behöva ändra sina välbekanta metoder eller komma ihåg en annan uppsättning autentiseringsdetaljer eller lägga till extra steg för att ansluta framgångsrikt. Systemadministratörerna kommer att ha ytterligare arbete att göra för att implementera och underhålla de nya säkerhetsåtgärderna.
Att härda och låsa ner ett Linux- eller Unix-liknande operativsystem kan bli väldigt snabbt involverat. Det vi presenterar här är en uppsättning enkla att implementera steg som förbättrar datorns säkerhet utan behov av tredjepartsapplikationer och utan att gräva igenom din brandvägg.
Dessa steg är inte det sista ordet i SSH-säkerhet, men de kommer att flytta dig långt framåt från standardinställningarna och utan för mycket friktion.
Använd SSH Protocol version 2
2006 uppdaterades SSH-protokollet från version 1 till version 2 . Det var en betydande uppgradering. Det skedde så många förändringar och förbättringar, särskilt kring kryptering och säkerhet, att version 2 inte är bakåtkompatibel med version 1. För att förhindra anslutningar från version 1-klienter kan du bestämma att din dator endast accepterar anslutningar från version 2-klienter.
För att göra det, redigera
/ etc / ssh / sshd_config
fil. Vi kommer att göra detta mycket genom hela den här artikeln. När du behöver redigera den här filen är detta kommandot att använda:
sudo gedit / etc / ssh / sshd_config
Lägg till raden:
Protokoll 2
Och spara filen. Vi ska starta om SSH-demonprocessen. Återigen kommer vi att göra detta mycket genom hela den här artikeln. Detta är kommandot att använda i varje fall:
sudo systemctl starta om sshd
Låt oss kontrollera att vår nya inställning är i kraft. Vi hoppar över till en annan maskin och försöker SSH på vår testmaskin. Och vi använder
-1
(protokoll 1) alternativ för att tvinga
ssh
kommando för att använda protokollversion 1.
ssh -1 [email protected]
Bra, vår anslutningsförfrågan avvisas. Låt oss se till att vi fortfarande kan ansluta till protokoll 2. Vi använder
-2
(protokoll 2) alternativ för att bevisa faktum.
ssh -2 [email protected]
Det faktum att SSH-servern begär vårt lösenord är en positiv indikation på att anslutningen har gjorts och att du interagerar med servern. Eftersom moderna SSH-klienter som standard använder protokoll 2 behöver vi faktiskt inte ange protokoll 2 så länge vår klient är uppdaterad.
ssh [email protected]
Och vår anslutning accepteras. Så det är bara de svagare och mindre säkra protokoll 1-anslutningarna som avvisas.
Undvik hamn 22
Port 22 är standardporten för SSH-anslutningar. Om du använder en annan port lägger det till lite säkerhet genom dunkelhet i ditt system. Säkerhet genom dunkel anses aldrig vara en verklig säkerhetsåtgärd, och jag har stött mot det i andra artiklar. Faktum är att några av de smartare attackbotarna undersöker alla öppna portar och bestämmer vilken tjänst de bär, snarare än att förlita sig på en enkel uppslagningslista över portar och förutsätter att de tillhandahåller de vanliga tjänsterna. Men att använda en icke-standardport kan hjälpa till att minska buller och dålig trafik på port 22.
Redigera din SSH-konfigurationsfil för att konfigurera en icke-standardport:
sudo gedit / etc / ssh / sshd_config
Ta bort hash # från början av "Port" -raden och ersätt "22" med det portnummer du väljer. Spara din konfigurationsfil och starta om SSH-demon:
sudo systemctl starta om sshd
Låt oss se vilken effekt det har haft. Över på vår andra dator använder vi
ssh
kommando för att ansluta till vår server. De
ssh
kommandot är som standard att använda port 22:
ssh [email protected]
Vår anslutning vägras. Låt oss försöka igen och ange port 470 med alternativet -p (port):
ssh -p 479 [email protected]
Vår anslutning accepteras.
Filtrera anslutningar med TCP-omslag
TCP Wrappers är lätt att förstå åtkomstkontrollista . Det låter dig utesluta och tillåta anslutningar baserat på egenskaperna hos anslutningsbegäran, såsom IP-adress eller värdnamn. TCP-omslag bör användas tillsammans med, och inte istället för, en korrekt konfigurerad brandvägg. I vårt specifika scenario kan vi strama åt saker och ting genom att använda TCP-omslag.
TCP-omslag var redan installerat på Ubuntu 18.04 LTS-maskinen som används för att undersöka denna artikel. Den var tvungen att installeras på Manjaro 18.10 och Fedora 30.
För att installera på Fedora, använd detta kommando:
sudo yum installera tcp_wrappers
För att installera på Manjaro, använd detta kommando:
sudo pacman -Syu tcp-omslag
Det finns två filer inblandade. En har den tillåtna listan och den andra har den nekade listan. Redigera avslagslistan med:
sudo gedit /etc/hosts.deny
Detta öppnar
gedit
redigerare med deny-filen laddad i den.
Du måste lägga till raden:
ALLA: ALLA
Och spara filen. Det blockerar all åtkomst som inte har godkänts. Vi måste nu godkänna de anslutningar du vill acceptera. För att göra det måste du redigera tillåtna filen:
sudo gedit /etc/hosts.allow
Detta öppnar
gedit
redigeraren med den tillåtna filen laddad i den.
Vi har lagt till i SSH-daemon namnet,
SSHD
Och IP-adressen till den dator som vi ska tillåta att ansluta. Spara filen och låt oss se om begränsningarna och behörigheterna gäller.
Först ska vi försöka ansluta från en dator som inte finns i
hosts.allow
fil:
Anslutningen nekas. Vi försöker nu ansluta från maskinen till IP-adressen 192.168.4.23:
Vår anslutning accepteras.
Vårt exempel här är lite brutalt - bara en enda dator kan ansluta. TCP-omslag är ganska mångsidigt och mer flexibelt än detta. Det stöder värdnamn, jokertecken och undernätmasker för att acceptera anslutningar från IP-adressintervall. Du uppmuntras att kolla in mansidan .
Avvisa anslutningsförfrågningar utan lösenord
Även om det är en dålig praxis kan en Linux-systemadministratör skapa ett användarkonto utan lösenord. Det betyder att begäran om fjärranslutning från det kontot inte har något lösenord att kontrollera. Dessa anslutningar kommer att accepteras men obehöriga.
Standardinställningarna för SSH accepterar anslutningsförfrågningar utan lösenord. Vi kan ändra det mycket enkelt och se till att alla anslutningar är autentiserade.
Vi måste redigera din SSH-konfigurationsfil:
sudo gedit / etc / ssh / sshd_config
Bläddra igenom filen tills du ser raden med texten #PermitEmptyPasswords no. Ta bort haschen
#
från början av raden och spara filen. Starta om SSH-demon:
sudo systemctl starta om sshd
Använd SSH-tangenter istället för lösenord
SSH-nycklar ger ett säkert sätt att logga in på en SSH-server. Lösenord kan gissas, sprickas eller brute-tvingad . SSH-nycklar är inte öppna för sådana typer av attacker.
När du genererar SSH-nycklar skapar du ett par nycklar. En är den offentliga nyckeln och den andra är den privata nyckeln. Den offentliga nyckeln är installerad på de servrar du vill ansluta till. Den privata nyckeln, som namnet antyder, hålls säker på din egen dator.
Med SSH-nycklar kan du skapa anslutningar utan ett lösenord som är - kontraintuitivt - säkrare än anslutningar som använder lösenordsautentisering.
När du gör en anslutningsförfrågan använder fjärrdatorn sin kopia av din offentliga nyckel för att skapa ett krypterat meddelande som skickas tillbaka till din dator. Eftersom den krypterades med din offentliga nyckel kan din dator avkryptera den med din privata nyckel.
Din dator extraherar sedan lite information från meddelandet, särskilt sessions-ID, krypterar det och skickar tillbaka det till servern. Om servern kan dekryptera den med sin kopia av din offentliga nyckel, och om informationen i meddelandet matchar det som servern skickade till dig, bekräftas att din anslutning kommer från dig.
Här upprättas en anslutning till servern 192.168.4.11 av en användare med SSH-nycklar. Observera att de inte uppmanas att ange ett lösenord.
ssh [email protected]
SSH-nycklar förtjänar en artikel helt för sig själva. Vi har en för dig. Här är hur man skapar och installerar SSH-nycklar .
RELATERAD: Hur man skapar och installerar SSH-nycklar från Linux-skalet
Inaktivera lösenordsautentisering helt och hållet
Naturligtvis är den logiska förlängningen av att använda SSH-nycklar att om alla fjärranvändare tvingas anta dem kan du stänga av lösenordsautentisering helt.
Vi måste redigera din SSH-konfigurationsfil:
sudo gedit / etc / ssh / sshd_config
Bläddra igenom filen tills du ser raden som börjar med "#PasswordAuthentication yes." Ta bort haschen
#
ändra “ja” till “nej” från radens början och spara filen. Starta om SSH-demon:
sudo systemctl starta om sshd
Inaktivera vidarebefordran av X11
X11 vidarebefordran gör det möjligt för fjärranvändare att köra grafiska applikationer från din server under en SSH-session. I händerna på en hotaktör eller skadlig användare kan ett GUI-gränssnitt underlätta deras elakartade syften.
Ett standardmantra inom cybersäkerhet är om du inte har en god anledning att slå på den, stäng av den. Vi gör det genom att redigera din SSH-konfigurationsfil:
sudo gedit / etc / ssh / sshd_config
Bläddra igenom filen tills du ser raden som börjar med "# X11Forwarding no." Ta bort haschen
#
från början av raden och spara filen. Starta om SSH-demon:
sudo systemctl starta om sshd
Ange ett tomgångstidsvärde
Om det finns en etablerad SSH-anslutning till din dator och det inte har varit någon aktivitet på den under en tidsperiod kan det utgöra en säkerhetsrisk. Det finns en chans att användaren har lämnat sitt skrivbord och är upptagen någon annanstans. Alla andra som passerar vid sitt skrivbord kan sitta ner och börja använda sin dator och via SSH din dator.
Det är mycket säkrare att fastställa en tidsgräns. SSH-anslutningen kommer att avbrytas om den inaktiva perioden överensstämmer med tidsgränsen. Återigen redigerar vi din SSH-konfigurationsfil:
sudo gedit / etc / ssh / sshd_config
Bläddra igenom filen tills du ser raden som börjar med "#ClientAliveInterval 0" Ta bort hash
#
ändrar siffran 0 till önskat värde från början av raden. Vi har använt 300 sekunder, vilket är 5 minuter. Spara filen och starta om SSH-demonen:
sudo systemctl starta om sshd
Ange en gräns för lösenordsförsök
Att definiera en gräns för antalet autentiseringsförsök kan hjälpa till att hindra lösenord gissning och brute-force attacker. Efter det angivna antalet autentiseringsförfrågningar kommer användaren att kopplas bort från SSH-servern. Som standard finns det ingen gräns. Men det åtgärdas snabbt.
Återigen behöver vi redigera din SSH-konfigurationsfil:
sudo gedit / etc / ssh / sshd_config
Bläddra igenom filen tills du ser raden som börjar med "#MaxAuthTries 0". Ta bort haschen
#
ändrar siffran 0 till önskat värde från början av raden. Vi har använt 3 här. Spara filen när du gjorde dina ändringar och starta om SSH-demon:
sudo systemctl starta om sshd
Vi kan testa detta genom att försöka ansluta och medvetet ange ett felaktigt lösenord.
Observera att MaxAuthTries-numret tycktes vara ett fler än antalet försök som användaren tillät. Efter två dåliga försök kopplas vår testanvändare bort. Detta var med MaxAuthTries inställd på tre.
Inaktivera root-inloggningar
Det är dålig praxis att logga in som root på din Linux-dator. Du bör logga in som en vanlig användare och använda
sudo
för att utföra åtgärder som kräver root-privilegier. Ännu mer så bör du inte låta root logga in på din SSH-server. Endast vanliga användare bör få ansluta. Om de behöver utföra en administrativ uppgift bör de använda
sudo
för. Om du tvingas låta en rotanvändare logga in kan du åtminstone tvinga dem att använda SSH-nycklar.
För sista gången måste vi redigera din SSH-konfigurationsfil:
sudo gedit / etc / ssh / sshd_config
Bläddra igenom filen tills du ser raden som börjar med "#PermitRootLogin prohibit-password" Ta bort hash
#
från radens början.
- Om du alls vill förhindra att root loggar in, byt ut "prohibit-password" med "no".
- Om du ska tillåta root att logga in men tvinga dem att använda SSH-nycklar, lämna "prohibit-password" på plats.
Spara dina ändringar och starta om SSH-demon:
sudo systemctl starta om sshd
Det ultimata steget
Om du inte alls behöver SSH på din dator, se till att den är inaktiverad.
sudo systemctl stoppa sshd
sudo systemctl inaktivera sshd
Om du inte öppnar fönstret kan ingen klättra in.