Hur man använder portknackning på Linux (och varför du inte borde)

By rik

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.