Tack vare det växande överflöd av användbara självhäftande appar som WordPress och den överkomliga tillväxten hos molnhotellleverantörer, blir din egen server alltmer övertygande för en bredare publik. Men att säkra dessa servrar kräver rättvisa kunskaper om Linux-systemadministration. Denna uppgift är inte alltid lämplig för nybörjare.
När du registrerar dig för det typiska cloud hosting-kontot får du ett e-postmeddelande med ett rootkonto, lösenord och IP-adress och instruktioner för att logga in via SSH på port 22. Men det är viktigt att ta flera ytterligare steg bortom det grundläggande åtkomstkonfigurationer. Det första root-lösenordet nedan är egentligen bara utgångspunkten för säkerhet. Det finns mycket mer att göra.
Denna handledning ger en översikt över gemensamma stegvisa tillvägagångssätt för att säkra din typiska Linux-server.
I denna handledning använder jag en ny Ubuntu 14.04-droppe från Digital Ocean med LAMP-konfigurationen; Om du vill följa med samma konfiguration, förklaras exempel konfigurationssteg här.
När du väl har valt ditt domännamn är du redo att börja. Jag använder http://secure.lookahead.io för mitt exempel.
Du kan logga in på din server med SSH: ssh [email protected]
. Servern ska kräva att du ändrar ditt lösenord under det första inloggningsförsöket:
Nu är resten upp till dig. Här är en handfull gemensamma metoder för att förbättra din serverns inloggningssäkerhet:
För det första är det viktigt att uppdatera dina Linux-systemkomponenter regelbundet. Vanligtvis när du loggar in, kommer Ubuntu att berätta hur många paket du har som behöver uppdateras. Kommandona för att uppdatera dina paket är:
sudo apt-get uppdatering sudo apt-get dist-uppgradering
Den senaste Shell Shock-säkerhetsproblemet som avslöjades i Bash är ett perfekt exempel på behovet av att regelbundet uppdatera dina systemfiler.
Varje gång du loggar in kommer Ubuntu att berätta om det finns paket och säkerhetsuppdateringar som kan uppdateras.
Om du vill kan du aktivera obevakade uppgraderingar:
sudo apt-get installera obevakade uppgraderingar sudo dpkg-omkonfigurera obevakade uppgraderingar
Att lämna SSH-åtkomst i port 22 gör det snabbare och enklare för hackare att rikta sig mot dina servrar. Låt oss ändra standard SSH-porten till något mer dunkelt.
Redigera SSH-konfigurationsfilen:
sudo nano / etc / ssh / sshd_config
Byt till ett annat portnummer, t.ex.
# Vilka portar, IP-adresser och protokoll vi lyssnar på Port 33322
Starta om SSH:
sudo service ssh omstart
Logga ut och försök sedan logga in igen. Du bör se detta felmeddelande:
ssh [email protected] ssh: anslut till värd secure.lookahead.io port 22: Connection nekad
Den här gången använder du följande SSH-kommando, ändrar porten till 33322: ssh -p 33322 [email protected]
. Du borde kunna logga in med framgång.
Att använda en brandvägg kan hjälpa till med att blockera åtkomst till portar som är oönskat öppna och stänga attackvektorer. Det kan också hjälpa till med att logga in på försök.
Om du råkar använda Amazon AWS-molntjänster finns det ett bra webbgränssnitt för sin brandvägg som heter säkerhetsgrupper. Konsolen för AWS-säkerhetsgrupper gör det enkelt att stänga av åtkomst till alla portar förutom din nya valda SSH-port och port 80 för webbläsning. Du kan se ett visuellt exempel på detta här:
Om du vill implementera Linux-baserade brandväggar kan du studera ufw och iptables. Medan det ligger utanför handledningen, kommer jag att ge ett kort exempel på att använda ufw
, den "okomplicerade brandväggen".
Först aktiverar vi ufw
och sedan tillåta åtkomst till vår SSH-port 33322 samt all http-trafik på port 80. Då kommer vi att neka åtkomst på standard SSH-port 22.
sudo ufw aktivera sudo ufw tillåta 33322 sudo ufw tillåta http sudo ufw neka 22 sudo ufw status
Var försiktig med konfigurering ufw
, eftersom du kan låsa dig själv ur en befintlig konsolsession och hela din server.
Om du vill gå djupare ger portknappen ett sätt att dölja din SSH-åtkomstport mer fullständigt. Det finns en detaljerad handledning för avancerade användare av Justin Ellingwood: Hur man använder portknocking för att dölja din SSH-demon från attacker.
Låt oss nu eliminera root login-användaren (eller ubuntu på vissa system) och anpassa administratörens inloggning.
Vi lägger till en användare med namnet "hal". Byt ut "hal" med ditt önskade användarnamn i följande exempel:
sudo adduser hal
Lägg till din nya användare i sudo-gruppen för administratörer:
sudo adduser hall sudo
Lägg till din nya användare i sudoersgruppen. Redigera sudoers-filen:
sudo nano / etc / sudoers
Lägg till den här raden i sudoers-filen, i avsnittet användarbehörigheter:
Hall ALL = (ALL) NOPASSWD: ALL
Redigera SSH-konfigurationsfilen igen:
sudo nano / etc / ssh / sshd_config
Ta bort root- eller ubuntu-kontot från AllowUsers
fält. Du kan också behöva lägga till den här raden om den inte finns i din konfigurationsfil:
Tillåt användaren hal
Se till Permit
är av:
PermitRootLogin nr
Starta om tjänsten igen:
sudo service ssh omstart
Logga ut och försök logga in igen som root. Du borde inte kunna. Försök sedan logga in som Hal: ssh-p 33322 [email protected]
. Det borde fungera bra.
Observera att vissa användare kanske vill starta om SSH, logga ut och verifiera att du kan logga in som Hal innan du stänger av root-inloggningen.
Nu ska vi lägga till tvåfaktorautentisering till din serverinloggning. med andra ord, när vi försöker logga in på servern måste vi tillhandahålla en känslig kod från en app på vår telefon.
I det här exemplet använder vi Google Authenticator. Var noga med att ladda ner Google Authenticator från iTunes App Store eller Play Store.
Sedan installerar du Google Authenticator-paketet från serverns konsol:
sudo apt-get installera libpam-google-autentiserare
Då ska vi redigera Pluggable Authentication Module (PAM) för SSH för att kräva tvåfaktorautentisering från Google:
nano /etc/pam.d/sshd
Lägg till följande rad överst:
auth krävs pam_google_authenticator.so
Återgå sedan till att redigera SSH-konfigurationsfilen igen:
sudo nano / etc / ssh / sshd_config
Ändra ChallengeResponseAuthentication
till ja:
# Ändra till ja för att aktivera utmaning-svar lösenord (akta problem med # några PAM-moduler och trådar) UtmaningResponsAuthentication yes
Spara ändringen och aktivera autentiseraren:
google-bestyr
Förutom att du ser en stor QR-kod (som visas längst upp i den här handledningen) ser du också en uppsättning hemliga inloggningsnycklar och ställs några frågor för att anpassa din konfiguration:
Använda Google Authenticator-appen på din telefon genom att välja redigeringspenna till höger och lägga till en ny post med knappen längst ner. Du kan antingen skanna QR-koden med din kamera eller ange den hemliga nyckeln. När du är klar kommer Google Authenticator att vara redo att ge koder till dig för din nästa inloggning.
Skriv ut en kopia av dessa nödskraparkoder och spara dem på ett säkert ställe, om du någonsin behöver återställa din inloggning utan tvåfaktorsautentisering.
Starta om SSH-tjänsten igen och logga ut:
sudo service ssh omstart logout
Logga in igen, och den här gången kommer du att bli ombedd för en verifieringskod före ditt lösenord. Skriv in den sexsiffriga verifieringskoden från Google Authenticator på din telefon:
Tillägget av tvåfaktorsautentisering lägger till ett starkt lager av sekundär säkerhet till din server. Fortfarande finns det mer vi kan göra.
Det är klokt att stänga av din serverns lösenordsbaserade inloggning till förmån för säkerhetsnycklar. nycklarna är mycket mer motståndskraftiga mot attacker. Lösenord är korta och föremål för ordboksattacker; nycklarna är längre och kan för det mesta endast äventyras av statliga superdatorer.
För att skapa din SSH-nyckel, följ dessa instruktioner. Byt till hemkatalogen för din nya användare:
cd / hem / hal
Skapa en SSH-katalog och ange behörigheter:
mkdir .ssh chmod 700 .ssh
Skapa ett nytt nyckelpar. När du uppmanas är det upp till dig om du vill lägga till ett lösenord till nyckeln:
cd .ssh ssh-keygen -b 1024 -f id_hal -t dsa
Lägg till den offentliga nyckeln till authorized_keys
fil:
katt ~ / .ssh / id_hal.pub> ~ / .ssh / authorized_keys
Ange behörigheterna för nyckelfilen:
chmod 600 ~ / .ssh / *
Flytta den privata nyckeln till en tempmapp för nedladdning till din lokala dator:
cp ~ / .ssh / * / tmp chmod 644 / tmp / *
Hämta den nya privata nyckeln till din dator med ditt Ubuntu-konto. På din dator, använd Terminal:
scp -P 33322 -i ~ / .ssh / id_hal [email protected]: / tmp / * ~ / .ssh
Ange behörigheter och test:
cd ~ / .ssh chmod 400 id_hal ssh -p 33322 -i ~ / .ssh / id_hal [email protected]
Om du stöter på några fel kan du försöka titta på loggen på AWS-servern när du försöker logga in:
svans -f /var/log/auth.log
Ta bort de tillfälliga nyckelfilerna från serverns tmp-katalog:
rm-rf / tmp / *
Redigera SSH-konfigurationsfilen igen:
sudo nano / etc / ssh / sshd_config
Stäng av lösenordsautentisering:
PasswordAuthentication nr
Starta om SSH-tjänsten igen:
sudo service ssh omstart
Nu kommer ingen att kunna logga in på din server utan din privata nyckel. För att logga in på din server, använd följande kommando:
ssh -p 33322 -i ~ / .ssh / id_hal [email protected]
Se till att du säkrar datorn du använder med den privata nyckeln på den; Det är också klokt att lagra en kopia av din privata nyckel på en flash-enhet någonstans fysiskt säker.
Observera att Google Authenticator-tvåfaktorsautentisering är förbikopplad när du använder SSH-nyckelskydd.
Om du någonsin låser dig ur din server under dessa konfigurationer, tillhandahåller DigitalOcean en webbkonsol som fungerar som om ett tangentbord anslutits till din server. För andra värdar kan du behöva få hjälp från deras supportteam.
Medan serverns inloggningsportal är en allvarlig sårbarhet, är det troligt att de program du väljer att installera sannolikt kommer att utgöra ännu större risker. Till exempel har jag nyligen läst att användandet av felaktigt säkrade reguljära uttryck i din PHP-app kan öppna din server till ReDoS-attacker.
Men ett vanligare exempel är den senaste WordPress-pluginsäkerheten med Slider Revolution. Ett tema som jag hade installerat fanns faktiskt det här pluginet, så jag var tvungen att uppdatera temat för att åtgärda felet.
Sårbarheter i program kan vara svåra att följa med. Det kan göra återvändande till hanterad hosting verkar attraktiv igen; ge inte upp! Var försiktig med appar som du installerar, stanna på postlistor för dina kodleverantörer och håll allt uppdaterat regelbundet.
Var proaktiv och gör vad du kan för att skydda dina appar. Titta till exempel på hur jag beskriver hur du lägger till Apache-användarsäkerhet till installationen av populära webbapp, PHPMyAdmin, som används för att förenkla MySQL-databasåtkomst och administration. Eftersom bara administratörer behöver tillgång till PHPMyAdmin och följderna av att det är hackade är höga, är det helt lämpligt att lägga till ett extra lager lösenordsäkerhet för den här appen.
Säkerhet är en stor oro och ett stort område för att greppa. Jag hoppas att du har hittat denna handledning användbar. Vänligen skicka dina egna idéer, korrigeringar, frågor och kommentarer nedan. Jag skulle vara särskilt intresserad av alternativa och utökade tillvägagångssätt. Du kan också nå mig på Twitter @ reifman eller maila mig direkt.