Portknackning: En Guide och Varför Du Kanske Inte Bör Använda Det
Portknackning är en teknik som används för att öka säkerheten på en server. Genom att stänga brandväggsportar, även de som vanligtvis används, skapar man ett extra säkerhetslager. Dessa portar öppnas endast om anslutningsförsöket följer en förutbestämd ”hemlig knackning”.
Portknackning: En Digital ”Lönnknackning”
Tänk dig 1920-talets förbudstid. För att komma in på en lönnkrog behövde man känna till den hemliga knackningen. Portknackning fungerar på ett liknande sätt. Genom att använda portknackning kan du hålla brandväggsportar stängda för inkommande anslutningar. De öppnas först efter att en specifik serie anslutningsförsök har gjorts, vilket fungerar som den ”hemliga knackningen”. På samma sätt används en annan sekvens för att stänga porten igen.
Även om portknackning är en intressant teknik, är det viktigt att veta att den faller under konceptet säkerhet genom dunkelhet. Det grundläggande problemet med detta är att när hemligheten om hur man får tillgång till ett system är avslöjad, förlorar man säkerheten. Det är därför mer rekommenderat att säkra din server på andra sätt, till exempel genom nyckelbaserad inloggning för SSH-server.
En effektiv cybersäkerhetsstrategi bygger på flera säkerhetslager. Portknackning kan vara ett av dessa lager, men det är osäkert hur mycket det bidrar till ett redan väl skyddat system. Kom ihåg att cybersäkerhet är komplext och att portknackning aldrig bör vara ditt enda försvar.
Installera knockd
För att illustrera hur portknackning fungerar, ska vi styra port 22 (SSH-porten) med hjälp av verktyget knockd. Om du använder Ubuntu eller en annan Debian-baserad distribution, installera paketet med apt-get:
sudo apt-get install knockd
För andra Linux-distributioner, använd motsvarande pakethanteringsverktyg. Du har antagligen iptables brandvägg installerat, men du kan behöva installera paketet iptables-persistent för att automatiskt ladda sparade iptables-regler. Installera det med kommandot:
sudo apt-get install iptables-persistent
I konfigurationsskärmen för IPv4, tryck på mellanslagstangenten för att acceptera alternativet ”Ja”.
Gör samma sak i IPv6-skärmen.
Nu ska vi tillåta etablerade anslutningar att fortsätta. Vi lägger till en regel för att inte bryta befintliga SSH-sessioner:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Denna regel säger att om en inkommande anslutning redan är etablerad eller relaterad till en etablerad anslutning, ska trafiken accepteras. Därefter stänger vi SSH-porten:
sudo iptables -A INPUT -p tcp --dport 22 -j REJECT
Detta blockerar all ny inkommande trafik på TCP-port 22. Starta sedan netfilter-persistent tjänsten:
sudo systemctl start netfilter-persistent
För att säkerställa att iptables-reglerna sparas och laddas, kör följande:
sudo netfilter-persistent save
sudo netfilter-persistent reload
Nu har vi installerat de nödvändiga verktygen och stängt SSH-porten. Dags att konfigurera den hemliga knackningen.
Konfigurera knockd
För att konfigurera knockd, redigera två filer. Den första är knockds konfigurationsfil:
sudo gedit /etc/knockd.conf
I den här filen finns sektionerna ”openSSH” och ”closeSSH”, som bestämmer hur port 22 öppnas och stängs. Varje sektion innehåller fyra poster:
sekvens | En serie portar som måste besökas i en viss ordning. Standard är 7000, 8000 och 9000 för att öppna, och 9000, 8000 och 7000 för att stänga. |
seq_timeout | Tiden som anslutningsförsöken måste göras inom för att knackningen ska fungera. |
kommando | Kommandot som skickas till iptables-brandväggen för att öppna eller stänga porten. |
tcpflags | Typen av paket som varje port måste ta emot (SYN-paket i en TCP-anslutningsförfrågan). |
Sektionen ”openSSH” säger att ”en TCP-anslutning måste göras till portarna 7000, 8000 och 9000 i den ordningen, inom 5 sekunder, för att kommandot att öppna port 22 ska skickas till brandväggen”. ”closeSSH” fungerar på samma sätt men med omvänd portföljd för att stänga porten.
Brandväggsregler
De viktigaste skillnaderna i ”kommando”-posterna mellan ”openSSH” och ”closeSSH” är -A och -D:
-A | Lägg till regeln längst ner i brandväggsregellistan. |
-D | Ta bort regeln från brandväggsregellistan. |
INPUT | Regeln gäller för inkommande trafik. |
-s %IP% | IP-adressen som initierar anslutningen. |
-p | Nätverksprotokollet (TCP). |
–dport | Målporten (port 22). |
-j ACCEPT | Acceptera paketet och låt det passera genom brandväggen. |
Redigeringar i knockd-konfigurationsfilen
Nedan visas de ändringar som vi gjort i filen:
Vi har ökat ”seq_timeout” till 15 sekunder och i sektionen ”openSSH” ändrat alternativet -A till -I, som infogar en ny brandväggsregel högst upp i listan. Inkommande trafik testas mot reglerna i tur och ordning, och det är viktigt att vår nya regel testas först, annars stängs anslutningen ner.
När du har gjort ändringarna, spara konfigurationsfilen.
Redigeringar i knockd-kontrollfilen
Innan du redigerar knockd-kontrollfilen, ta reda på ditt nätverksgränssnitts namn genom kommandot:
ip addr
I detta exempel är nätverksanslutningen enp0s3. Redigera nu knockd-kontrollfilen:
sudo gedit /etc/default/knockd
Nedan ser du filen med våra ändringar markerade:
Vi har ändrat ”START_KNOCKD=0” till 1 och tagit bort # från början av ”KNOCKD_OPTS=” samt ändrat eth1 till namnet på vårt nätverksgränssnitt (enp0s3).
Testa konfigurationen
Nu startar vi knockd-demonen med kommandot:
sudo systemctrl start knockd
För att skicka en hemlig sekvens av anslutningsförfrågningar till portarna på värddatorn med IP-adress 192.168.4.24, använd följande kommando från en annan maskin (där vi också installerat knockd):
knock 192.168.4.24 7000 8000 9000 -d 500
Detta skickar anslutningsförfrågningar till portarna 7000, 8000 och 9000 med en fördröjning på 500 millisekunder. Nu kan en användare som heter ”dave” försöka logga in på 192.168.4.24 med SSH:
ssh [email protected]
Efter att ha angett sitt lösenord, startas en fjärrsession. Användaren skriver ”exit” för att logga ut. För att stänga SSH-porten på fjärrdatorn används samma kommando fast med omvänd portföljd:
knock 192.168.4.24 9000 8000 7000 -d 500
Låt oss se hur det ser ut på värddatorn. Vi använder kommandot för att se nya poster i systemloggen:
tail -f /var/log/syslog
Du ser ”openSSH”-poster när varje port på målservern knackas på. När alla tre stegen är utförda visas texten ”SESAM ÖPPNA DIG,” och kommandot infogas i iptables-regellistan. ”dave” ansluter med SSH, loggar in och sedan ut. Sedan visas ”closeSSH”-poster när portarna knackas i omvänd ordning. Efter att alla tre stegen har utförts visas meddelandet ”OPEN SESAME” igen, och regeln tas bort från brandväggen. Enda regeln för port 22 är stängningsregeln.
Slutligen
Portknackning kan vara ett intressant verktyg, men det bör inte ses som det enda säkerhetslagret. Behandla det som en avledning och lita inte på det i skarpa situationer. Du bör aldrig använda det som ditt enda skydd.