Första 10 minuter på en server
Vi kommer i denna artikel titta på hur vi skapar en ny användare och säkrar upp en server.
Med utgångspunkt i artiklar som My First 5 Minutes On A Server; Or, Essential Security for Linux Servers och My First 10 Minutes On a Server - Primer for Securing Ubuntu ska vi i följande stycke titta på hur vi säkrar upp en Linux-baserad server av Ubuntu eller Debian variant.
#Förutsättning
Du har en server med ett operativsystem installerat.
#Logga in på servern
Vi loggar in på servern genom att använda SSH via terminalen med kommandot. ssh -i ~/.ssh/azure azureuser@[IP] ersätt din [IP] med den IP som din server har eller ditt domännamn.
När du är inne på servern byt till root användaren med sudo su.
#Lösenord
I vanliga fall vill vi välja ett säkert lösenord. Men för att vi har skapat vår VM med ssh-nyckel behöver vi inte något lösenord. PS. Detta gäller inte på vanliga VMs. Det är en Azure grej.
#Uppdatera servern
Nästa steg är att uppdatera serverns programvara till senaste version genom att använda verktyget apt-get. Men först vill vi berätta för Debian vilken teckenkodning (locale) som ska användas, annars får vi en varning av apt-get.
sudo localectl set-locale LANG=en_US.UTF-8
sudo apt-get update
sudo apt-get upgrade
#Skapa din egen användare
Vi vill aldrig logga in som azureuser eller root. azureuser är standard namnet för alla servrar som skapas i Azure, så hackare försöker använda det namnet för att komma åt vår server. root användaren har för mycket rättigheter. Så vi skapar en egen användare deploy med följande kommandon. Du kan byta ut deploy mot vad som helst, men då ska du göra det i alla följande kommandon. Senare ska vi ta bort azureuser användaren.
sudo useradd -s /bin/bash -m deploy sudo mkdir /home/deploy/.ssh sudo chmod 700 /home/deploy/.ssh
I useradd används -s /bin/bash för att välja terminal åt användaren. -m gör att en home mapp skapas åt användaren.
#Stänga av inloggning med lösenord
Lösenord kan knäckas.
Därför använder vi istället SSH nycklar för att autentisera oss mot servern. Skapa och öppna filen med kommandot sudo nano /home/deploy/.ssh/authorized_keys och lägg innehållet av din lokala .ssh/azure.pub nyckel i den filen på en rad.
När du har lagt till nyckeln kör du följande två kommandon för att sätta korrekta rättigheter på katalogen och filen.
sudo chmod 400 /home/deploy/.ssh/authorized_keys sudo chown deploy:deploy /home/deploy -R
Testa nu att logga in i ett nytt terminalfönster med kommandot ssh -i <sökväg till din sshkey> deploy@[IP]. Vi har kvar terminal fönstret där vi loggade in som azureuser om något skulle gå fel.
Vi skapar sedan ett lösenord för deploy användaren från azureuser terminalfönstret, sudo passwd deploy, använd igen ett långt och slumpmässigt lösenord. Och vi lägger till deploy som sudo användare med kommandot sudo usermod -aG sudo deploy.
Som vi sagt tidigare vill vi bara kunna logga in med SSH nycklar. Vi gör detta genom att ändra tre rader i filen /etc/ssh/sshd_config. Öppna filen med din texteditor på din server till exempel nano med kommandot sudo nano /etc/ssh/sshd_config.
Lägg till raderna nedanför sist i filen.
PermitRootLogin no PasswordAuthentication no AllowUsers deploy
Spara filen och starta om SSH med hjälp av kommandot sudo service ssh restart. Testa nu att logga ut och in i ditt andra terminal fönster där du tidigare var inloggat som deploy.
#Ta bort azureuser
Först stänger vi ner uppkopplingen för användaren azureuser genom att skriva exit i terminalfönstret. Alla kommandon vi kommer köra från och med nu körs som användaren deploy.
Logga in på servern igen som deploy användaren och kör kommandot:
sudo userdel -r azureuser
#Brandvägg
Vi använder oss av brandväggen ufw för att stänga och öppna portar till vår server. Installera med kommandot sudo apt-get install ufw.
Vi vill nu öppna upp för trafik på 3 portar 22 för SSH, 80 för HTTP och 443 för HTTPS. Vi gör det med hjälp av följande kommandon.
sudo ufw allow 22
sudo ufw allow 80
sudo ufw allow 443
sudo ufw disable
sudo ufw enable
#Automagiska uppdateringar
Vi vill inte hålla på att manuellt uppdatera vår server, men vi vill inte heller sakna en patch när de kommer så vi kommer använda oss av verktyget unattended-upgrades. Vi installerar med sudo apt-get install unattended-upgrades.
Uppdatera filen /etc/apt/apt.conf.d/10periodic, lägg till följande i slutet av filen.
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
Uppdatera även filen /etc/apt/apt.conf.d/50unattended-upgrades, lägg till följande i slutet av filen.
Unattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESM:${distro_codename}";
//"${distro_id}:${distro_codename}-updates";
};
Kör sudo apt-get update.
#fail2ban
Vårt sista steg är att installera verktyget fail2ban som används för att automatiskt kolla loggfiler och stoppa aktivitet som vi inte vill ha på vår server. Vi installerar och låter ursprungsinställningarna göra sitt jobb. Vi installerar med sudo apt-get install fail2ban.
#Installera tmux
tmux är ett oerhört trevligt verktyg att använda om man vill komma tillbaka till samma vy när man loggar in på en server från ett antal olika servrar. Installera med kommandot sudo apt-get install tmux.
Du öppnar en tmux session genom att skriva tmux i terminalen. I sitt grundutförande är Ctrl-b kommandotangenten, du trycker alltså in Ctrl-b släpper och en knapp till för att utföra kommandot. Du kan skapa nya fönster med Ctrl-b följd av c, du kopplar ner från sessionen med Ctrl-b d och vill du tillbaka till sessionen kan du skriva tmux a -t 0. Bra och smidigt när man vill logga in från flera olika datorer, men ändå se samma bild.
#Installera git
För att lättare kunna driftsätta våra git-repon installerar vi även git med kommandot sudo apt-get install git.
#Avslutningsvis
Nu har ni en server som är redo att användas till det mesta.
#Revision history
- 2022-10-20: (A, aar) Första utgåvan.
