Hvordan bruke portbanking på Linux (og hvorfor du ikke bør)

Portbanking er en måte å sikre en server ved å stenge brannmurporter – selv de du vet vil bli brukt. Disse portene åpnes på forespørsel hvis – og bare hvis – tilkoblingsforespørselen gir den hemmelige bankingen.

Portbanking er en «hemmelig banking»

På 1920-tallet, da forbud var i full gang, hvis du ville komme inn i en speakeasy, du måtte kjenne den hemmelige bankingen og banke den ut riktig for å komme inn.

Babord banking er en moderne ekvivalent. Hvis du vil at folk skal ha tilgang til tjenester på datamaskinen din, men ikke vil åpne brannmuren til Internett, kan du bruke portbanking. Den lar deg lukke portene på brannmuren som tillater innkommende tilkoblinger og åpne dem automatisk når et forhåndsbestemt mønster av tilkoblingsforsøk gjøres. Sekvensen av tilkoblingsforsøk fungerer som den hemmelige bankingen. Nok en hemmelig bank stenger havnen.

Babord banking er noe av en nyhet, men det er viktig å vite at det er et eksempel på sikkerhet gjennom uklarhet, og det konseptet er grunnleggende feil. Hemmeligheten bak hvordan du får tilgang til et system er trygg fordi bare de i en bestemt gruppe vet det. Men når hemmeligheten først er ute – enten fordi den er avslørt, observert, gjettet eller løst – er sikkerheten din ugyldig. Det er bedre å sikre serveren din på andre, sterkere måter, som å kreve nøkkelbasert pålogging for en SSH-server.

De mest robuste tilnærmingene til cybersikkerhet er flerlags, så kanskje portbanking bør være et av disse lagene. Jo flere lag, jo bedre, ikke sant? Du kan imidlertid argumentere for at portbanking ikke tilfører mye (om noe) til et skikkelig herdet, sikkert system.

Cybersikkerhet er et stort og komplisert tema, men du bør ikke bruke portbanking som din eneste form for forsvar.

Installerer knockd

For å demonstrere portbanking, skal vi bruke den til å kontrollere port 22, som er SSH-porten. Vi bruker et verktøy kalt knockd. Bruk apt-get for å installere denne pakken på systemet ditt hvis du bruker Ubuntu eller en annen Debian-basert distribusjon. På andre Linux-distribusjoner, bruk Linux-distribusjonens pakkehåndteringsverktøy i stedet.

Skriv inn følgende:

sudo apt-get install knockd

Du har sannsynligvis allerede iptables brannmur installert på systemet ditt, men du må kanskje installere iptables-persistent-pakken. Den håndterer automatisk lasting av lagrede iptable-regler.

Skriv inn følgende for å installere det:

sudo apt-get install iptables-persistent

Når IPV4-konfigurasjonsskjermen vises, trykk på mellomromstasten for å godta «Ja»-alternativet.

Trykk på mellomromstasten for å godta

Trykk på mellomromstasten igjen i IPv6-konfigurasjonsskjermen for å godta «Ja»-alternativet og gå videre.

Trykk på mellomromstasten for å godta

Følgende kommando forteller iptables å tillate etablerte og pågående tilkoblinger å fortsette. Vi vil nå utstede en annen kommando for å lukke SSH-porten.

  Hvordan lytte til YouTube Music på Linux med Ytmdesktop

Hvis noen er koblet til av SSH når vi utsteder denne kommandoen, vil vi ikke at de skal kuttes av:

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

Denne kommandoen legger til en regel til brannmuren, som sier:

-A: Legg til regelen i brannmurregeltabellen. Det vil si, legg den til bunnen.
INNGANG: Dette er en regel om innkommende forbindelser.
-m conntrack: Brannmurregler virker på nettverkstrafikk (pakker) som samsvarer med kriteriene i regelen. Parameteren -m får iptables til å bruke ekstra pakketilpasningsmoduler – i dette tilfellet fungerer den som kalles conntrack med nettverkstilkoblingssporingsmulighetene til kjernen.
–cstate ETABLISHED,RELATED: Dette spesifiserer typen tilkobling som regelen skal gjelde for, nemlig ETABLISTERTE og RELATEDE tilkoblinger. En etablert tilkobling er en som allerede er i gang. En relatert tilkobling er en som er opprettet på grunn av en handling fra en etablert tilkobling. Kanskje noen som er tilkoblet ønsker å laste ned en fil; som kan skje over en ny tilkobling initiert av verten.
-j ACCEPT: Hvis trafikken samsvarer med regelen, hopp til ACCEPT-målet i brannmuren. Med andre ord, trafikken aksepteres og får passere gjennom brannmuren.

Nå kan vi gi kommandoen for å lukke porten:

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

Denne kommandoen legger til en regel til brannmuren, som sier:

-A: Legg regelen til brannmurregeltabellen, dvs. legg den til nederst.
INNGANG: Denne regelen handler om innkommende forbindelser.
-p tcp: Denne regelen gjelder for trafikk som bruker Transmission Control Protocol.
–dport 22: Denne regelen gjelder spesifikt for TCP-trafikk som retter seg mot port 22 (SSH-porten).
-j REJECT: Hvis trafikken samsvarer med regelen, hopp til REJECT-målet i brannmuren. Så hvis trafikken avvises, er den ikke tillatt gjennom brannmuren.

Vi må starte den netfilter-vedvarende demonen. Vi kan gjøre det med denne kommandoen:

sudo systemctl start netfilter-persistent

Vi vil at netfilter-persistent skal gå gjennom en lagrings- og omlastingssyklus, så den laster inn og kontrollerer iptable-reglene.

Skriv inn følgende kommandoer:

sudo netfilter-persistent save

sudo netfilter-persistent reload

Du har nå installert verktøyene, og SSH-porten er stengt (forhåpentligvis uten å avslutte noens tilkobling). Nå er det på tide å konfigurere den hemmelige bankingen.

Konfigurerer knockd

Det er to filer du redigerer for å konfigurere knockd. Den første er følgende knockd-konfigurasjonsfil:

sudo gedit /etc/knockd.conf

Gedit-editoren åpnes med knockd-konfigurasjonsfilen lastet.

Vi vil redigere denne filen for å passe våre behov. Seksjonene vi er interessert i er «openSSH» og «closeSSH.» Følgende fire oppføringer er i hver seksjon:

sekvens: Sekvensen av porter noen må få tilgang til for å åpne eller lukke port 22. Standardportene er 7000, 8000 og 9000 for å åpne den, og 9000, 8000 og 7000 for å lukke den. Du kan endre disse eller legge til flere porter i listen. For våre formål holder vi oss til standardinnstillingene.
seq_timeout: Tidsperioden som noen må få tilgang til portene for å utløse den til å åpne eller lukke.
kommando: Kommandoen som sendes til iptables-brannmuren når åpne- eller lukkehandlingen utløses. Disse kommandoene legger enten til en regel til brannmuren (for å åpne porten) eller ta den ut (for å lukke porten).
tcpflags: Typen pakke hver port må motta i den hemmelige sekvensen. En SYN (synkronisere) pakke er den første i en TCP tilkoblingsforespørsel, kalt en treveis håndtrykk.

  Hvordan legge til en GUI til Linux Shell Scripts

«openSSH»-delen kan leses som «en TCP-tilkoblingsforespørsel må sendes til portene 7000, 8000 og 9000 – i den rekkefølgen og innen 5 sekunder – for at kommandoen for å åpne port 22 skal sendes til brannmuren.»

«closeSSH»-delen kan leses som «en TCP-tilkoblingsforespørsel må sendes til portene 9000, 8000 og 7000 – i den rekkefølgen og innen 5 sekunder – for at kommandoen for å lukke port 22 skal sendes til brannmuren.»

Brannmurreglene

«Kommando»-oppføringene i openSSH- og closeSSH-delene forblir de samme, bortsett fra én parameter. Slik er de sammensatt:

-A: Legg til regelen nederst på listen over brannmurregler (for openSSH-kommandoen).
-D: Slett kommandoen fra listen over brannmurregler (for closeSSH-kommandoen).
INNGANG: Denne regelen er opptatt av innkommende nettverkstrafikk.
-s %IP%: IP-adressen til enheten som ber om en tilkobling.
-p: Nettverksprotokoll; i dette tilfellet er det TCP.
–dport: Destinasjonsporten; i vårt eksempel er det port 22.
-j ACCEPT: Hopp til akseptermålet i brannmuren. Med andre ord, la pakken slippe gjennom resten av reglene uten å handle på den.

The knockd Konfigurasjonsfilredigeringer

Endringene vi gjør i filen er uthevet i rødt nedenfor:

Vi utvider «seq_timeout» til 15 sekunder. Dette er sjenerøst, men hvis noen skyter manuelt i forbindelsesforespørsler, kan han trenge så mye tid.

I «openSSH»-delen endrer vi alternativet -A (legg til) i kommandoen til -I (sett inn). Denne kommandoen setter inn en ny brannmurregel øverst på listen over brannmurregeler. Hvis du forlater -A-alternativet, legger det til brannmurregellisten og plasserer den nederst.

Innkommende trafikk testes mot hver brannmurregel i listen ovenfra og ned. Vi har allerede en regel som stenger port 22. Så hvis innkommende trafikk testes mot den regelen før den ser regelen som tillater trafikken, nektes forbindelsen; hvis den ser denne nye regelen først, er tilkoblingen tillatt.

Lukk-kommandoen fjerner regelen lagt til av openSSH fra brannmurreglene. SSH-trafikk håndteres igjen av den eksisterende «port 22 er stengt»-regelen.

Når du har gjort disse endringene, lagrer du konfigurasjonsfilen.

The knockd Control File Edits

Knockd-kontrollfilen er helt enklere. Før vi dykker inn og redigerer det, må vi imidlertid vite det interne navnet på nettverkstilkoblingen vår; for å finne den, skriv inn denne kommandoen:

ip addr

De

Tilkoblingen denne maskinen bruker for å undersøke denne artikkelen kalles enp0s3. Noter navnet på forbindelsen din.

Følgende kommando redigerer knockd-kontrollfilen:

sudo gedit /etc/default/knockd

Her er knockd-filen i gedit.

De få redigeringene vi må gjøre er uthevet i rødt:

Vi endret «START_KNOCKD=»-oppføringen til fra 0 til 1.

Vi fjernet også hash # fra starten av «KNOCKD_OPTS=»-oppføringen, og erstattet «eth1» med navnet på nettverkstilkoblingen vår, enp0s3. Hvis nettverkstilkoblingen din er eth1, vil du selvfølgelig ikke endre den.

  Hvordan spille Gunfire Reborn på Linux

Beviset er i puddingen

Det er på tide å se om dette fungerer. Vi starter knockd-demonen med denne kommandoen:

sudo systemctrl start knockd

Nå hopper vi på en annen maskin og prøver å koble til. Vi installerte knockd-verktøyet på den datamaskinen også, ikke fordi vi ønsker å sette opp portbanking, men fordi knockd-pakken gir et annet verktøy kalt knock. Vi bruker denne maskinen til å skyte i vår hemmelige sekvens og banke for oss.

Bruk følgende kommando for å sende den hemmelige sekvensen av tilkoblingsforespørsler til portene på vertsdatamaskinen med portbank med IP-adressen 192.168.4.24:

knock 192.168.4.24 7000 8000 9000 -d 500

Dette ber knock å målrette datamaskinen mot IP-adressen 192.168.4.24 og sende en tilkoblingsforespørsel til portene 7000, 8000 og 9000, i sin tur, med en -d (forsinkelse) på 500 millisekunder mellom dem.

En bruker kalt «dave» sender deretter en SSH-forespørsel til 192.168.4.24:

ssh [email protected]

Tilkoblingen hans er akseptert, han skriver inn passordet og fjernøkten begynner. Kommandoprompten hans endres fra [email protected] til [email protected] For å logge ut av den eksterne datamaskinen, skriver han:

exit

Kommandoprompten hans går tilbake til den lokale datamaskinen hans. Han bruker knock en gang til, og denne gangen retter den seg mot portene i omvendt rekkefølge for å lukke SSH-porten på den eksterne datamaskinen.

knock 192.168.4.24 9000 8000 7000 -d 500

Dette var riktignok ikke en spesielt fruktbar fjernøkt, men den demonstrerer åpningen og lukkingen av porten via portbanking og passer inn i et enkelt skjermbilde.

Så, hvordan så dette ut fra den andre siden? Systemadministratoren på portbank-verten bruker følgende kommando for å se nye oppføringer som kommer inn i systemloggen:

tail -f /var/log/syslog

Du ser tre openSSH-oppføringer. Disse heves ettersom hver port er målrettet av det eksterne bankeverktøyet.
Når alle tre stadier av utløsersekvensen er oppfylt, vises en oppføring som sier «ÅPNE SESAM,” er logget
Kommandoen for å sette inn regelen i iptables-regellisten sendes. Den tillater tilgang via SSH på port 22 fra den spesifikke IP-adressen til PC-en som ga riktig hemmelig banking (192.168.4.23).
Brukeren «dave» kobler til i bare noen få sekunder, og kobler deretter fra.
Du ser tre closeSSH-oppføringer. Disse heves når hver port er målrettet av fjernbankeverktøyet – det ber portbankeverten om å lukke port 22.
Etter at alle tre trinnene er utløst, får vi meldingen «OPEN SESAME» igjen. Kommandoen sendes til brannmuren for å fjerne regelen. (Hvorfor ikke «LUKK SESAME» når den stenger havnen? Hvem vet?)

Nå er den eneste regelen i iptables-regellisten angående port 22 den vi skrev inn i begynnelsen for å lukke den porten. Så port 22 er nå stengt igjen.

Bank det på hodet

Det er portbankings triks. Behandle det som en avledning og ikke gjør det i den virkelige verden. Eller, hvis du må, ikke stol på det som din eneste form for sikkerhet.