Den här guiden innehåller några tips och råd om hur du kan göra din Linux-server säkrare. Eftersom (virtuella) servrar måste vara åtkomliga utifrån rekommenderar vi alltid ett grundläggande skydd mot oönskad åtkomst. Det är något du inte bör försumma.
Tänk på att de här anvisningarna inte är heltäckande. Mer detaljerad information finns i andra delar av ZAP-dokumentationen, till exempel 2FA (SSH).
Det enklaste sättet att skydda din server är alltid detsamma, oavsett vilken server du använder: använd säkra lösenord, uppdatera dina tjänster regelbundet och tänk generellt på vilka tjänster du installerar och vilka guider du följer.
| Tjänst | Port |
|---|---|
| SSH | 22 |
| FTP | 21 |
| E-post | 25 |
| DNS | 53 |
| HTTP | 80 |
| HTTPS | 443 |
Tjänster som SSH och FTP använder alltid samma portar som standard (några av dem visas i tabellen ovan). Om en angripare utifrån försöker angripa din SSH-tjänst med brute force måste angriparen först veta vilken port SSH använder. Om du inte konfigurerar om portarna är port 22 och 21 oftast de första som testas för att köra kommandon direkt på servern eller komma åt filer via FTP.
För att förhindra detta rekommenderar vi att du konfigurerar egna portar för standardtjänsterna. I nästa avsnitt får du veta hur du gör:
Porten du väljer måste vara mellan 1024 och 65535 och får inte redan användas!
Med cat /etc/services kan du visa några standardportar och undvika att välja en port som redan används.
För att ändra SSH-porten måste du redigera konfigurationsfilen. Den finns vanligtvis i /etc/ssh/sshd_config. Om den inte finns där kan du söka efter den med följande kommando:
find / -name "sshd_config" 2>/dev/null
Öppna nu filen med nano (som root eller med sudo).
sudo nano /etc/ssh/sshd_config
Lägg till porten du vill använda efter Port. Om Port är utkommenterad (alltså #Port 22) tar du bort "#" och ersätter 22 med porten du vill använda. Spara filen (i Nano med Ctrl + o) och stäng den (i Nano: Ctrl + x).
Nu måste SSH-tjänsten startas om för att ändringarna ska börja gälla.
# Unter Ubuntu/Debian/CentOS z.B.
sudo systemctl restart sshd
Om du har installerat en FTP-tjänst, till exempel proFTPd, kan du enkelt ändra porten genom att redigera konfigurationsfilen. Tillvägagångssättet liknar det för SSH-tjänsten.
Hitta konfigurationsfilen proftpd.conf
find / -name "proftpd.conf" 2>/dev/null
Filen finns vanligtvis i /etc/proftpd.conf (CentOS) eller /etc/proftpd/proftpd.conf (Ubuntu, Debian).
Öppna filen med nano, ta bort "#" före port och ange porten du vill använda efter det. Följ anvisningarna ovan så att du inte anger en ogiltig port.
Använd Ctrl + W för att söka i nano.
nano /etc/proftpd/proftpd.conf
Fail2Ban är en tjänst som blockerar IP-adresser som försöker logga in på servern med sannolikt skadliga avsikter. Fail2Ban övervakar loggfiler efter misstänkt aktivitet och skyddar på så sätt systemet på ett relativt enkelt och effektivt sätt.
Efter installationen innehåller Fail2Ban redan förkonfigurerade inställningar för några vanligt förekommande tjänster, bland annat:
- apache
- lighttpd
- sshd
- qmail
- postfix
- Courier Mail Server Du kan enkelt lägga till fler tjänster genom att ange ett reguljärt uttryck (RegEx) och den loggfil som ska användas.
/var/log/auth.log. Den här filen innehåller alla SSH-inloggningsförsök, oavsett om de lyckades eller misslyckades.
Här ser du posten:
Dec 2 12:59:19 vps-zap515723-2 sshd[364126]: Failed password for root from 92.117.xxx.xxx port 52504 ssh2
Fail2Ban använder den här loggfilen och övervakar den efter misslyckade autentiseringar. Eftersom loggfilen innehåller angriparens IP-adress kan Fail2Ban blockera den efter några misslyckade försök.
Logga först in på din Linux-server. Om du behöver hjälp kan du följa vår guide Första åtkomst (SSH). Kör kommandona som root eller med sudo.
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban
Efter installationen kan du kontrollera statusen direkt med systemctl: (Tryck på Ctrl+C för att avsluta systemctl.)
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
Active: active (running) since Sat 2023-12-02 13:10:33 UTC; 24s ago
Docs: man:fail2ban(1)
Process: 23988 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, statu>
Main PID: 23989 (fail2ban-server)
CPU: 409ms
CGroup: /system.slice/fail2ban.service
`-23989 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Starting Fail2Ban Service...
Dec 02 13:10:33 vps-zap515723-1 systemd[1]: Started Fail2Ban Service.
Dec 02 13:10:34 vps-zap515723-1 fail2ban-server[23989]: Server ready
Fail2Ban är nu installerat, men ännu inte aktiverat eller konfigurerat. Titta i /etc/fail2ban. Där bör det finnas följande filer:
action.d fail2ban.d jail.conf paths-arch.conf paths-debian.conf
fail2ban.conf filter.d jail.d paths-common.conf paths-opensuse.conf
För att skapa ett aktivt ”jail” måste du skapa en fil med namnet jail.local. Kopiera innehållet i jail.conf till den nya filen och öppna den:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
Nu kan du göra alla inställningar i filen jail.local, inklusive vilka tjänster som ska övervakas.
Fokusera på avsnittet efter [Default]. Standardavsnittet innehåller allmänna grundinställningar.
Bläddra nedåt tills du hittar det här avsnittet och anpassa det till exempel så här:
| Attribut | Förklaring | Värde |
|---|---|---|
| ignoreip | IP-adresser som inte ska blockeras | 127.0.0.1/8 |
| ignorecommand | Inte relevant. | |
| bantime | Hur länge en IP-adress blockeras | 1h |
| findtime | Tidsperiod då misslyckade inloggningar räknas | 10m |
| maxretry | Antal misslyckade försök som leder till en blockering | 5 |
# kann mit Leerzeichen (und/oder Komma) getrennt definiert werden.
#ignoreip = 127.0.0.1/8 ::1
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "bantime" ist die Anzahl der Sekunden, die ein Host gesperrt ist.
bantime = 1h
# Ein Host wird gesperrt, wenn er "maxretry" Fehler innerhalb von "findtime"
# Sekunden erzeugt hat.
findtime = 10m
# "maxretry" ist die Anzahl der Fehler, bevor ein Host gesperrt wird.
maxretry = 5
Nu har du slutfört grundkonfigurationen. Om du till exempel vill övervaka SSH-tjänsten bläddrar du nedåt till avsnittet [sshd]. Om du har ändrat porten ska du ange den under port.
Avsnittet [sshd] ser då ut så här:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Som du ser kan du också göra särskilda inställningar för enskilda tjänster (här till exempel maxretry, som är lägre än standardinställningen). Även om du redan har gjort allmänna inställningar kan du konfigurera om de flesta inställningarna för varje tjänst separat. Om du inte gör det används de allmänna inställningarna.
Nu behöver du bara starta om Fail2Ban för att övervakningen ska börja.
sudo systemctl restart fail2ban.service
Om du har tillgång till ett VPN eller en annan server kan du försöka få Fail2Ban att blockera dig själv för att testa att tjänsten fungerar. Med ett VPN eller en mobil hotspot bör du få en annan IP-adress som du kan använda för att testa Fail2Ban.
Testa inte detta i ditt vanliga nätverk, eftersom din egen IP-adress kan blockeras och du kan låsa ute dig själv.
Försök att ansluta till servern via SSH (med en annan IP-adress!) och ange fel lösenord varje gång. Resultatet bör se ut ungefär så här:
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
root@185.223.29.xxx: Permission denied (publickey,password).
root@vps-zap515723-2:/var/log# ssh root@185.223.29.179
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
Permission denied, please try again.
root@185.223.29.xxx's password:
^C
root@vps-zap515723-2:/var/log# ssh root@185.223.29.xxx
ssh: connect to host 185.223.29.xxx port 22: Connection refused
Som du ser avvisas nu anslutningen av servern som skyddas av Fail2Ban (Connection refused i stället för Permission denied).
Visa nu statusen för Fail2Ban. Här ser du att en IP-adress har blockerats.
fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 4
| |- Total failed: 8
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 1
`- Banned IP list: xxx
Om du vill avblockera IP-adressen kan du använda följande kommando: fail2ban-client set sshd unbanip {deine IP}.
Om ovanligt många IP-adresser blockeras rekommenderar vi att du förlänger blockeringstiden för varje misslyckat försök. På så sätt minskar antalet möjliga inloggningsförsök.
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 1h
# Bantime sollte mit jeder Sperre dieser IP steigen
bantime.increment = true
# Skalierungsfaktor von 24 Stunden (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Maximale Sperrzeit = 5 Wochen
bantime.maxtime = 5w
