Sådan bruger du Port Knocking på Linux (og hvorfor du ikke burde)

Portbankning er en måde at sikre en server ved at lukke firewall-porte – selv dem, du ved, vil blive brugt. Disse porte åbnes efter anmodning, hvis – og kun hvis – forbindelsesanmodningen giver den hemmelige bank.

Portbank er et “hemmeligt banke”

I 1920’erne, da forbud var i fuld gang, hvis du ville ind i en speakeasy, du skulle kende den hemmelige bank og banke den korrekt ud for at komme ind.

Portbank er en moderne ækvivalent. Hvis du ønsker, at folk skal have adgang til tjenester på din computer, men ikke ønsker at åbne din firewall til internettet, kan du bruge portbanke. Det giver dig mulighed for at lukke portene på din firewall, der tillader indgående forbindelser, og få dem åbnet automatisk, når der laves et på forhånd aftalt mønster af forbindelsesforsøg. Sekvensen af ​​forbindelsesforsøg fungerer som den hemmelige bank. Endnu en hemmelig bank lukker havnen.

Portbank er noget af en nyhed, men det er vigtigt at vide, at det er et eksempel på sikkerhed gennem uklarhed, og det koncept er grundlæggende fejlbehæftet. Hemmeligheden bag, hvordan man får adgang til et system, er sikker, fordi kun dem i en bestemt gruppe ved det. Men når først den hemmelighed er ude – enten fordi den er afsløret, observeret, gættet eller udarbejdet – er din sikkerhed ugyldig. Du er bedre stillet ved at sikre din server på andre, stærkere måder, som at kræve nøglebaserede logins til en SSH-server.

De mest robuste tilgange til cybersikkerhed er flerlags, så måske bør portbankning være et af disse lag. Jo flere lag, jo bedre, ikke? Du kan dog argumentere for, at portbankning ikke tilføjer meget (hvis noget) til et ordentligt hærdet, sikkert system.

Cybersikkerhed er et stort og kompliceret emne, men du bør ikke bruge portbanke som din eneste form for forsvar.

Installerer knockd

For at demonstrere portbankning, vil vi bruge den til at styre port 22, som er SSH-porten. Vi bruger et værktøj kaldet knockd. Brug apt-get til at installere denne pakke på dit system, hvis du bruger Ubuntu eller en anden Debian-baseret distribution. På andre Linux-distributioner skal du bruge din Linux-distributions pakkehåndteringsværktøj i stedet.

Indtast følgende:

sudo apt-get install knockd

Du har sikkert allerede iptables firewall installeret på dit system, men du skal muligvis installere iptables-persistent-pakken. Den håndterer den automatiske indlæsning af gemte iptable-regler.

Indtast følgende for at installere det:

sudo apt-get install iptables-persistent

Når IPV4-konfigurationsskærmen vises, skal du trykke på mellemrumstasten for at acceptere “Ja”.

Tryk på mellemrumstasten for at acceptere

Tryk på mellemrumstasten igen på IPv6-konfigurationsskærmen for at acceptere “Ja” og gå videre.

Tryk på mellemrumstasten for at acceptere

Følgende kommando fortæller iptables at tillade etablerede og igangværende forbindelser at fortsætte. Vi vil nu udstede en anden kommando for at lukke SSH-porten.

  Sådan sikkerhedskopieres Steam-spil på Linux

Hvis nogen er forbundet med SSH, når vi udsteder denne kommando, ønsker vi ikke, at de bliver afskåret:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

Denne kommando tilføjer en regel til firewallen, der siger:

-A: Føj reglen til firewall-regeltabellen. Det vil sige, tilføje det til bunden.
INPUT: Dette er en regel om indgående forbindelser.
-m conntrack: Firewall-regler virker på netværkstrafik (pakker), der matcher kriterierne i reglen. Parameteren -m får iptables til at bruge ekstra pakketilpasningsmoduler – i dette tilfælde fungerer den kaldet conntrack med kernens netværksforbindelsessporingsfunktioner.
–cstate ETABLISHED,RELATED: Dette angiver den type forbindelse, som reglen gælder for, nemlig ETABLISHED og RELATED forbindelser. En etableret forbindelse er en, der allerede er i gang. En relateret forbindelse er en, der er lavet på grund af en handling fra en etableret forbindelse. Måske en, der er forbundet, vil downloade en fil; det kan ske over en ny forbindelse, der er startet af værten.
-j ACCEPT: Hvis trafikken matcher reglen, skal du hoppe til ACCEPT målet i firewallen. Med andre ord accepteres trafikken og får lov til at passere gennem firewallen.

Nu kan vi udstede kommandoen for at lukke porten:

sudo iptables -A INPUT -p tcp --dport 22 -j REJECT

Denne kommando tilføjer en regel til firewallen, der siger:

-A: Føj reglen til firewall-regeltabellen, dvs. føj den til bunden.
INPUT: Denne regel handler om indgående forbindelser.
-p tcp: Denne regel gælder for trafik, der bruger Transmission Control Protocol.
–dport 22: Denne regel gælder specifikt for TCP-trafik, der er målrettet mod port 22 (SSH-porten).
-j AFVIS: Hvis trafikken matcher reglen, skal du hoppe til REJECT-målet i firewallen. Så hvis trafikken afvises, er den ikke tilladt gennem firewallen.

Vi skal starte den netfilter-persistente dæmon. Vi kan gøre det med denne kommando:

sudo systemctl start netfilter-persistent

Vi ønsker, at netfilter-persistent skal gå igennem en gem og genindlæs cyklus, så den indlæser og kontrollerer iptable-reglerne.

Indtast følgende kommandoer:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Du har nu installeret hjælpeprogrammerne, og SSH-porten er lukket (forhåbentlig uden at afbryde nogens forbindelse). Nu er det tid til at konfigurere den hemmelige bank.

Konfigurerer knockd

Der er to filer, du redigerer for at konfigurere knockd. Den første er følgende knockd-konfigurationsfil:

sudo gedit /etc/knockd.conf

Gedit-editoren åbner med knockd-konfigurationsfilen indlæst.

Vi redigerer denne fil, så den passer til vores behov. De sektioner, vi er interesserede i, er “openSSH” og “closeSSH.” De følgende fire poster er i hvert afsnit:

sekvens: Sekvensen af ​​porte, som nogen skal have adgang til for at åbne eller lukke port 22. Standardportene er 7000, 8000 og 9000 for at åbne den, og 9000, 8000 og 7000 for at lukke den. Du kan ændre disse eller tilføje flere porte til listen. Til vores formål holder vi os til standardindstillingerne.
seq_timeout: Den tidsperiode, inden for hvilken nogen skal få adgang til portene for at udløse den til at åbne eller lukke.
kommando: Kommandoen, der sendes til iptables firewall, når åben eller luk handlingen udløses. Disse kommandoer tilføjer enten en regel til firewallen (for at åbne porten) eller fjerne den (for at lukke porten).
tcpflags: Den type pakke, hver port skal modtage i den hemmelige sekvens. En SYN (synkronisere) pakke er den første i en TCP forbindelsesanmodning, kaldet en tre-vejs håndtryk.

  Sådan bruger du hvilken kommando på Linux

Sektionen “openSSH” kan læses som “en TCP-forbindelsesanmodning skal foretages til porte 7000, 8000 og 9000 – i den rækkefølge og inden for 5 sekunder – for at kommandoen til at åbne port 22 kan sendes til firewallen.”

Afsnittet “closeSSH” kan læses som “en TCP-forbindelsesanmodning skal foretages til porte 9000, 8000 og 7000 – i den rækkefølge og inden for 5 sekunder – for at kommandoen til at lukke port 22 kan sendes til firewallen.”

Firewall-reglerne

“Kommando”-posterne i openSSH og closeSSH sektionerne forbliver de samme, bortset fra én parameter. Sådan er de sammensat:

-A: Føj reglen til bunden af ​​firewall-reglerlisten (for openSSH-kommandoen).
-D: Slet kommandoen fra firewall-regellisten (for closeSSH-kommandoen).
INPUT: Denne regel vedrører indgående netværkstrafik.
-s %IP%: IP-adressen på den enhed, der anmoder om en forbindelse.
-p: Netværksprotokol; i dette tilfælde er det TCP.
–dport: Destinationsporten; i vores eksempel er det port 22.
-j ACCEPT: Hop til acceptmålet i firewallen. Med andre ord, lad pakken slippe gennem resten af ​​reglerne uden at handle på den.

The knockd konfigurationsfil redigeringer

De redigeringer, vi foretager i filen, er fremhævet med rødt nedenfor:

Vi forlænger “seq_timeout” til 15 sekunder. Dette er generøst, men hvis nogen manuelt skyder i forbindelsesanmodninger, kan han have brug for så meget tid.

I afsnittet “openSSH” ændrer vi -A (tilføj) muligheden i kommandoen til -I (indsæt). Denne kommando indsætter en ny firewall-regel øverst på firewall-regellisten. Hvis du forlader -A-indstillingen, tilføjer den firewall-regellisten og placerer den nederst.

Indgående trafik testes i forhold til hver firewall-regel på listen fra toppen og ned. Vi har allerede en regel, der lukker port 22. Så hvis indgående trafik testes mod denne regel, før den ser reglen, der tillader trafikken, afvises forbindelsen; hvis den ser denne nye regel først, er forbindelsen tilladt.

Lukkommandoen fjerner reglen tilføjet af openSSH fra firewallreglerne. SSH-trafik håndteres igen af ​​den allerede eksisterende “port 22 er lukket”-regel.

Når du har foretaget disse redigeringer, skal du gemme konfigurationsfilen.

Den bankede kontrolfilredigeringer

Knockd-kontrolfilen er helt enklere. Før vi dykker ned og redigerer det, skal vi dog kende det interne navn på vores netværksforbindelse; for at finde det, skriv denne kommando:

ip addr

Det

Forbindelsen, som denne maskine bruger til at undersøge denne artikel, kaldes enp0s3. Noter navnet på din forbindelse.

Følgende kommando redigerer knockd-kontrolfilen:

sudo gedit /etc/default/knockd

Her er knockd-filen i gedit.

De få redigeringer, vi skal foretage, er fremhævet med rødt:

  Sådan opsætter du en Resilio Sync-server på Linux

Vi ændrede “START_KNOCKD=”-indgangen til fra 0 til 1.

Vi fjernede også hashen # fra starten af ​​”KNOCKD_OPTS=”-indgangen og erstattede “eth1” med navnet på vores netværksforbindelse, enp0s3. Hvis din netværksforbindelse er eth1, vil du selvfølgelig ikke ændre den.

Beviset er i buddingen

Det er tid til at se, om dette virker. Vi starter knockd-dæmonen med denne kommando:

sudo systemctrl start knockd

Nu hopper vi på en anden maskine og prøver at oprette forbindelse. Vi installerede også knockd-værktøjet på den computer, ikke fordi vi vil indstille portbankning, men fordi knockd-pakken indeholder et andet værktøj kaldet knock. Vi bruger denne maskine til at skyde i vores hemmelige rækkefølge og banke på for os.

Brug følgende kommando til at sende din hemmelige sekvens af forbindelsesanmodninger til portene på den portbankende værtscomputer med IP-adressen 192.168.4.24:

knock 192.168.4.24 7000 8000 9000 -d 500

Dette fortæller knock at målrette computeren mod IP-adressen 192.168.4.24 og affyre en forbindelsesanmodning til porte 7000, 8000 og 9000 med en -d (forsinkelse) på 500 millisekunder mellem dem.

En bruger kaldet “dave” laver derefter en SSH-anmodning til 192.168.4.24:

ssh [email protected]

Hans forbindelse er accepteret, han indtaster sin adgangskode, og hans fjernsession begynder. Hans kommandoprompt ændres fra [email protected] til [email protected] For at logge ud af fjerncomputeren skriver han:

exit

Hans kommandoprompt vender tilbage til hans lokale computer. Han bruger banke endnu en gang, og denne gang målretter det portene i omvendt rækkefølge for at lukke SSH-porten på fjerncomputeren.

knock 192.168.4.24 9000 8000 7000 -d 500

Dette var ganske vist ikke en særlig frugtbar fjernsession, men den demonstrerer åbning og lukning af porten via portbanke og passer i et enkelt skærmbillede.

Så hvordan så det her ud fra den anden side? Systemadministratoren på portbank-værten bruger følgende kommando til at se nye poster, der ankommer i systemloggen:

tail -f /var/log/syslog

Du ser tre openSSH-indgange. Disse hæves, da hver port er målrettet af fjernbetjeningen.
Når alle tre trin i triggersekvensen er opfyldt, vises en post, der siger “ÅBN SESAM,” er logget
Kommandoen til at indsætte reglen i iptables-regellisten sendes. Den tillader adgang via SSH på port 22 fra den specifikke IP-adresse på den pc, der gav den korrekte hemmelige bank (192.168.4.23).
Brugeren “dave” forbinder kun i nogle få sekunder og afbryder derefter.
Du ser tre closeSSH-indgange. Disse hæves, efterhånden som hver port er målrettet af fjernbankningsværktøjet – det fortæller portbankeværten om at lukke port 22.
Når alle tre trin er udløst, får vi beskeden “ÅBEN SESAME” igen. Kommandoen sendes til firewallen for at fjerne reglen. (Hvorfor ikke “LUK SESAME”, når den lukker havnen? Hvem ved?)

Nu er den eneste regel i iptables-reglerlisten vedrørende port 22 den, vi skrev i begyndelsen for at lukke den port. Så port 22 er nu lukket igen.

Bank det på hovedet

Det er portbankning’s salontrick. Behandl det som en adspredelse og gør det ikke i den virkelige verden. Eller, hvis du skal, lad være med at stole på det som din eneste form for sikkerhed.