Denna guide innehåller några tips och råd om hur du kan göra din Linux-server säkrare. Eftersom servrar måste vara tillgängliga utifrån är ett grundläggande skydd mot oönskad åtkomst alltid rekommenderat och bör inte förbises.
Observera att dessa instruktioner inte är uttömmande och mer detaljerad information finns i andra delar av ZAP-dokumentationen. (t.ex. 2FA (SSH))
Det enklaste sättet att skydda din server är alltid detsamma, oavsett server: Använd säkra lösenord, uppdatera dina tjänster regelbundet och var noga med vilka tjänster du installerar och vilka instruktioner du följer.
| Tjänst | Port |
|---|---|
| SSH | 22 |
| FTP | 21 |
| 25 | |
| DNS | 53 |
| HTTP | 80 |
| HTTPS | 443 |
Tjänster som SSH eller FTP använder som standard alltid samma portar (några av dem finns i tabellen ovan). Om en extern angripare försöker knäcka din SSH-tjänst via brute force måste denne först veta vilken port SSH använder. Om du inte ändrar dessa portar är det oftast port 22 och 21 som används för att direkt köra kommandon på servern eller komma åt filer via FTP.
För att förhindra detta rekommenderar vi att du anpassar portarna för standardtjänsterna. I nästa avsnitt får du veta hur du gör:
Den port du väljer måste ligga mellan 1024 och 65535 och får inte vara en redan använd port!
Med cat /etc/services kan du visa några standardportar för att undvika att välja en redan upptagen port.
För att ändra SSH-porten måste du justera konfigurationsfilen. Den finns vanligtvis under /etc/ssh/sshd_config. Om inte kan du söka efter den med följande kommando:
find / -name "sshd_config" 2>/dev/null
Öppna filen med nano (som root eller med sudo).
sudo nano /etc/ssh/sshd_config
Lägg till din önskade port efter Port. Om Port är kommenterad (t.ex. #Port 22), ta bort "#" och ersätt 22 med din valda port. Spara filen (i Nano med Ctrl + o) och stäng den (Nano: Ctrl + x).
SSH-tjänsten måste nu startas om för att ändringarna ska träda i kraft.
# På Ubuntu/Debian/CentOS t.ex.
sudo systemctl restart sshd
Om du har installerat en FTP-tjänst som proFTPd kan du också enkelt ändra porten via konfigurationsfilen. Proceduren är liknande som för SSH.
Hitta konfigurationsfilen proftpd.conf
find / -name "proftpd.conf" 2>/dev/null
Filen finns vanligtvis under /etc/proftpd.conf (CentOS) eller /etc/proftpd/proftpd.conf (Ubuntu, Debian).
Öppna filen med nano, ta bort "#" framför port och ange din önskade port. Följ anvisningarna ovan för att inte välja 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 illvilliga avsikter. Fail2Ban övervakar loggfiler för misstänkt aktivitet och skyddar ditt system enkelt och effektivt.
Efter installationen har Fail2Ban redan förkonfigurerade inställningar för några vanliga tjänster, bland annat:
- apache
- lighttpd
- sshd
- qmail
- postfix
- Courier Mail Server Fler tjänster kan enkelt läggas till med reguljära uttryck (RegEx) och angivande av önskad loggfil.
/var/log/auth.log. Denna fil 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 denna loggfil och övervakar misslyckade autentiseringar. Eftersom loggfilen direkt innehåller angriparens IP-adress kan Fail2Ban blockera denna IP efter några misslyckade försök.
Logga in på din Linux-server först. Behöver du hjälp, följ vår Första åtkomst (SSH) guide. Kör kommandon som root eller med sudo.
sudo apt update && sudo apt upgrade -y
sudo apt install fail2ban
Efter installationen kan du direkt kontrollera status med systemctl: (Avsluta med Ctrl+C)
systemctl status fail2ban.service
* fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor pres>
Active: active (running) sedan 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 aktivt eller konfigurerat. Titta i /etc/fail2ban där följande filer bör finnas:
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 en aktiv "jail" måste en fil som heter jail.local skapas. Kopiera innehållet från 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
Alla inställningar kan nu göras i jail.local, inklusive vilka tjänster som ska övervakas.
Titta bara på delen efter [Default]. Denna sektion innehåller grundinställningar.
Skrolla ner till denna sektion och anpassa t.ex. 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 är blockerad | 1h |
| findtime | Tidsperiod då misslyckade inloggningar räknas | 10m |
| maxretry | Antal misslyckanden innan blockering sker | 5 |
# kan definieras med mellanslag (och/eller komma).
#ignoreip = 127.0.0.1/8 ::1
# ignorecommand = /path/to/command <ip>
ignorecommand =
# "bantime" är antal sekunder en host är blockerad.
bantime = 1h
# En host blockeras om den har "maxretry" fel inom "findtime"
# sekunder.
findtime = 10m
# "maxretry" är antalet fel innan blockering.
maxretry = 5
Nu har du gjort grundinställningarna. För att t.ex. övervaka SSH-tjänsten, skrolla ner till [sshd]-taggen. Om du ändrat port ska du ange den under port.
[sshd]-taggen ser ut så här:
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
Som du ser kan du göra individuella inställningar för varje tjänst (t.ex. maxretry som är lägre än standardvärdet). Om du inte gör det används standardinställningarna.
Starta om Fail2Ban för att aktivera övervakningen.
sudo systemctl restart fail2ban.service
Om du har tillgång till ett VPN eller en annan server kan du testa om Fail2Ban fungerar genom att blockera dig själv. Med VPN eller mobil hotspot får du en annan IP som du kan testa med.
Testa inte i ditt vanliga nätverk, då kan din egen IP blockeras och du blir utlåst.
Försök ansluta via SSH till din server (med annan IP!) och ange fel lösenord varje gång. Resultatet bör se ut 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 nekas anslutningen från din Fail2Ban-skyddade server nu (Connection refused istället för Permission denied).
Visa status för Fail2Ban. Här ser du att en IP-adress är blockerad.
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
Vill du låsa upp en IP igen kan du göra det med kommandot: fail2ban-client set sshd unbanip {din IP}.
Om du har ovanligt många IP-blockeringar kan det vara bra att öka blockeringstiden för varje misslyckat försök för att minska antalet möjliga inloggningsförsök.
[sshd]
enabled = true
port = 22
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
bantime = 1h
# Bantime bör öka med varje blockering av denna IP
bantime.increment = true
# Skalningsfaktor på 24 timmar (1h,24h,48h,3d,4d....)
bantime.factor = 24
# Maximal blockeringstid = 5 veckor
bantime.maxtime = 5w
