Emergency-bagdør anno 2021

Antag at der forskellige steder ude i landskabet står en masse vigtigt udstyr og brummer.

Hvordan laver man nemmest og billigst en trådløs emergency-SSH forbindelse som med mindst 99% sandsynlighed virker når det gælder ?

Er der nogen der har tal for VPN admin-trafik vs. udgift til faste IP# på SIM kort ?

Jeg overvejer en model hvor det fjerne udstyr hvert X'te minut laver en indgående ssh sleep 60 til en upriviligeret konto med port-forwarding tilbage til sshd.

Det giver lidt ventetid, det kan vi leve med i denne situation, til gengæld er der automatisk retry, (fra den ende der har brug for det) og statistik&overvågning fra centralt hold, om "bagdørene" kan forventes at virke.

Input og gode ideer ?

phk

Kommentarer (55)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#1 Troels Henriksen

Jeg har brugt autossh til at lave den slags automatiske omvendte SSH-tunneler fra den anden side af NAT'ede netværk. Det fungerer ofte OK, men jeg synes der er fejlkilder jeg ikke forstår. Autossh burde i princippet opdage når forbindelsen fejler og genstarte den, men af for mig uforklarlige årsager sker det nu og da ikke. Det kan være det er mig der holder den forkert, for der tages mange flag.

  • 12
  • 0
#2 Henning Wangerin

Autossh burde i princippet opdage når forbindelsen fejler og genstarte den, men af for mig uforklarlige årsager sker det nu og da ikke. Det kan være det er mig der holder den forkert, for der tages mange flag.

Det problem havde jeg med almindelige ssh-forbindelser, når jeg sad på ikke-alt-for-stabile mobil bredbånds forbindelser.

Indtil jeg fik sat ServerAliveCountMax og ServerAliveInterval op til at smide forbindelsen i en fart, når der er huller i forbindelsen.

Der er nogle tilsvarende parametre for serveren, så den (også) smider forbindelsen hurtigt, hvilket kan være en forbindelse når du laver port-forwarding.

Da jeg kører alle mine forbindelser til screen-sessions, reetableres alt efter en reconnect.

Eneste problem jeg har mødt er hvis jeg gerne vil bruge -A så jeg kan connecte videre. Det virker ikke efter reconnect til en screen-session

/Henning

  • 7
  • 0
#3 Lasse Mølgaard

Med udgangspunkt i min egen forbindelse, så bør du finde ud af hvordan netværksforbindelsen er skruet sammen.

Fordi hvis jeg bruger standardværdier i SSH, så dør min forbindelse efter max 150 sekunders inaktivitet i udgående retning.

Så du skal finde et sweetspot på din keepalive værdi, som den spammer ikke din SSH server, men samtidig heller ikke er så høj, at en krakilsk CGN dropper forbindelsen p.g.a. inaktivitet.

  • 1
  • 1
#4 Stefan Andersen

Jeg har tidligere haft lignende udfordring med 250-300 enheder deployed ude hos kunder på alverdens forbindelse som var udenfor min kontrol.

Den løsning jeg gik med var et lille script der polllede en URL for at få besked på at nu skulle den lave en ssh tunnel ud til en kendt jump host jeg havde.

Det virker glimrende her på tiende år; og med et poll hvert minut virker også fint for mig.

Nu er det lavet lidt specifikt til mig; men vil nogen dele kode og gøre den mere generisk; så skriv; deler gerne kode og viden.

//Stefan

  • 9
  • 0
#6 Stefan Andersen

Og hvis det skal være endnu mere lightweight af hensyn til cost, så brug ICMP beskeder ...

Ikke en dårlig idé. Der er jo slet ikke spild i at gøre det over HTTPS som jeg gør det ;) Nu var casen her primært faste DSL kredsløb og lidt LTE modems. Så - jeg flottede mig med båndbredden.

  • 2
  • 0
#7 Jesper Lund

Jeg har sat en systemd service op, som starter en ssh klient mod en kendt jumphost og laver et par tuneller. Autossh har jeg adrig brudt mig om, det var alt for ustabilt.

Med rette parametre for ServerAliveInterval og ServerAliveCountMax smider ssh klienten forbindelsen hvis den bliver afbrudt, for derefter at lade systemd starte en ny ssh klient for at forsøge at reetablere forbindelsen.

Man kan også være lidt sød ved sin jumphost, og huske at sætte RestartSec til noget fornuftigt (Jeg bruger 20 sec.) i sin systemd service.

  • 1
  • 1
#11 Henrik Juul Størner

SMS'erne bruges kun til at udveksle password og IP-adresse. Hvis du vil sikre kommunikationen over SMS er det nok bedst at pakke det ind i noget kryptering.

Du kan også nøjes med at returnere IP'en og så kun have login med SSH nøgle.

Og SSH servicen skal selvfølgelig kun køre når du beder om at kunne logge ind.

  • 2
  • 1
#12 Maciej Szeliga

Nu stiller jeg lige et dumt spørgsmål: Hvor firewall'ede er mobilnet nu om dage ?

Ikke specielt meget - for et par år siden satte jeg min laptop over min mobiltelefon og der er masser af "irellevant" trafik.

De fleste 3G/4G/5G routere har da også en indbygget firewall så det kan tyde på at det er ikke operatøren som har en firewall.

Der er dog CGNat hos de operatører som ikke fik nok IPv4 adresser.

  • 0
  • 2
#13 Yoel Caspersen Blogger

Nu stiller jeg lige et dumt spørgsmål: Hvor firewall'ede er mobilnet nu om dage ?

Forvent carrier grade NAT med firewalls, DPI, korte session timeouts etc. Enkelte udbydere (fx 3) kører med IPv6, men jeg ville ikke satse på, det også betyder, at du kan få adgang udefra og ind.

Jeg skulle engang for længe siden installere en server på et skib, som var opkoblet med en satellit-forbindelse. Det blev med en reverse SSH-tunnel til en ekstern server for at omgå CGN'en - og det fungerede faktisk fint.

En bekendt i branchen har anbefalet mig at tage et kig på https://opengear.com/ - jeg har ikke nået at se nærmere på det endnu, men afhængigt af budgettet kunne det måske også være relevant.

  • 5
  • 0
#16 Kalle Aagaard

Jeg har arbejdet på en kombi af jeres to forslag, hvor jeg vil sende en sms, og den trigger så at ssh forbinder som PHK skrev, derved slipper jeg for at den konstant står og forbinder (den kunne selvfølgelig stadig være sat til at forbinde i ny og næ, for at sikre at den faktisk virker)

Derved "sikrer" jeg at udefrakommende max kan komme til få enheden til at åbne en tunnel, til et sted de ikke ved hvor er.

Edit: I bund og grund lidt samme teknologi som "banke på", som nogle firewalls gjorde / måske stadig gør brug af. Men uden at det kræver data, før man får bug for det.

  • 1
  • 0
#20 Lasse Mølgaard

Jeg mangler lige lidt forståelse her - hvordan vil man modtage en SMS på den server der står i Timbuktu, og som derefter skal reagere?

Det er relativt enkelt.

Jeg har selv gjort det ved at koble et USB modem på og lytte på seriel porten.

... men det kræver man kan sine Hayes kommandoer og GERNE også kan finde ud af at kode ens SMSer med GSM tegnsættet i 7bit mode.

Du får i hvert fald brug for det udvidede tegnsæt, hvis du ønsker at sende beskeder indeholdene skandinaviske bogstaver eller der er mere 70 tegn i beskeden.

Anyway:

Jeg ville nok foretrække at hvis man skal aktivere SSH fra SMS, at man som minimum får besked tilbage på SMS med enten:

  • Forstået. Forbindelse oprettet.

Eller:

  • Kan ikke oprette forbindelse (fejlkode: xxx).
  • 3
  • 0
#21 Christian Nobel

Ja men ikke i praksis ifbm. NAT som Yoel skriver.

Man kan lave så mange løsninger selv, herunder at lade NAT (vha. en tabel) finde ud af hvortil et svar fra et UDP request skal returneres - men det ændrer altså ikke på selve det faktum at UDP er connectionless.

Og skal man først til at brygge noget ovenpå, så kan man da ligeså godt bare lave den simple og stabile løsning med HTTP.

UDP kan man så bruge hvis man f.eks. vil have en IOT dims til at smide målinger op, hvor man godt kan leve med at der smutter nogen i ny og næ.

  • 0
  • 1
#24 Michael Cederberg

Og skal man først til at brygge noget ovenpå, så kan man da ligeså godt bare lave den simple og stabile løsning med HTTP.

Ja men ideen var at holde kommunikationen på et minimum for at holde omkostningerne nede - fx. hvis man har valgt et dataabonnement hvor man betaler per MB.

HTTP fylder en hel del mere end en UDP eller ICMP pakke. Hele handshake delen af TCP fylder også lidt og man skal alligevel have noget retry logik på TCP/HTTP. Alas, hvis man ikke behøver at bekymre sig så meget om dataforbrug så er jeg enig i at HTTPS er bedre.

SMS giver lidt mindre fleksibilitet fordi man så er nødt til at have en mobilforbindelse selv hvis man har nogle lokationer hvor der er internetadgang. Man kan selvfølgeligt vælge en anden løsning der.

  • 0
  • 0
#25 Christian Nobel

Tja du kommer nok ikke udenom at skulle betale en eller anden form for abonnement.

Nej, og så skal der også moden mv. til (1) - jeg ville bare mene at det er at gøre opgaven umage mere kompliceret end bare at fyre et HTLM request af med et givent interval.

Og står den i Timbuktu, så koster det (hvis der overhovedet er dækning) noget med 4kr at sende en sms til en maskine som sådan set allerede har fat i nettet.

Der er da ikke mange teleselskaber, som giver telefonnumre væk gratis?

Nej, men hvis man iøvrigt har interesse i at pusle med IOT, så kan man hos 1NCE købe et simkort som dækker det meste af verden, og som kan leve op til 10 år / 500MB:

https://1nce.com/en/

(1) Edit - hvis man kan sms'e til den trådløse router, så er det selvfølgelig en anden sag.

  • 1
  • 0
#26 Henning Wangerin

Forvent carrier grade NAT med firewalls, DPI, korte session timeouts etc. Enkelte udbydere (fx 3) kører med IPv6, men jeg ville ikke satse på, det også betyder, at du kan få adgang udefra og ind.

Tja. Det er meget godt at 3 tilbyder IPv6, men jeg fik det ikke til at vike hos kæresten, med 3s egen router.

Nu er det ligemeget da hun er skiftet væk fra 3 efter at de pillede deres lokale mast ned.

På en god dag kunne der trækkes 2Mbit på forbindelsen. PÅ det nye TDC-baserede abo er der 30Mbps på en dårlig dag.

/Henning

  • 1
  • 1
#27 Christian Nobel

HTTP fylder en hel del mere end en UDP eller ICMP pakke.

Men det er stadig ikke ret meget.

Jeg bruger det til mine signage løsninger, hvor jeg laver en statusopdatering en gang i minuttet (og der er en sjat data mere end kun et simpel keep alive) - det koster ca. 6MB i døgnet, dvs. under 200MB om måneden.

Så hvis vi nu sætter ambitionsniveauet ned til hvert femte minut, så taler vi om under 50MB om måneden, og skræller vi nogen af headerne af serveren, så kan det barberes yderligere ned.

Og så kunne man jo iøvrigt også overveje at udstyre sin boks med en ET-phone-home knap, så man kunne bede et menneske trykke på knappen.

  • 0
  • 0
#28 Kjeld Flarup Christensen

Jeg har sådan et setup kørende på min svigermors computer, med et script som laver et call home. Dør den venter den 5 sekunder og forsøger igen.

Men stabilt er det ikke.

Indtil jeg fik sat ServerAliveCountMax og ServerAliveInterval op til at smide forbindelsen i en fart, når der er huller i forbindelsen.

Det skal jeg lige have tjekket op ved lejlighed.

Jeg har faktisk tanker om at lave en Raspberry Pi som vores supportere kan tage med ud i marken og koble til udstyr. Den skal så lave et kald til en cloud server, hvorfra vi så kan tilgå udstyret her fra Skive.

  • 0
  • 0
#30 Mikkel Bundgaard

Jeg bruger openvpn - jeg synes det har fungeret ganske stabilt med staticKey. For at holde forbindelsen kan den sættes til at pinge, netop for at undgå NAT firewalls som cutter forbindelsen.

Om det er overkill, tja, afhænger jo af udstyr...

  • 1
  • 0
#31 Lasse Mølgaard

Og står den i Timbuktu, så koster det (hvis der overhovedet er dækning) noget med 4kr at sende en sms til en maskine som sådan set allerede har fat i nettet.

Det skal du faktisk ikke forvente.

Jeg har prøvet surfe på Internettet i Uganda og det var håbløst.

Som jeg husker det var det via et radiolink, til centrum af byen, hvor der så var sattelitforbindelse til resten af verden.

Til gengæld var der god dækning med igennem gammeldags GSM.

I det tilfælde giver det faktisk mening at bruge SMS til at aktivere et remote link.

  • 1
  • 0
#35 Troels Folke

Jeg synes at Wireguard ville fungere godt til sådan et formål. Hvis der ikke er lukket ned for UDP og en evt NAT kan finde ud af at tracke forbindelserne, så skulle det virke. Enheder bag NAT sættes til at forbinde til en offentlig maskine, og konfigureres med KeepAlive for at holde forbindelsen frisk i diverse NAT-enheder. Alle enhederne kan herefter tilgås i via den offentlige maskine (privat subnet). Med lidt snilde kan man også få to enheder bag NAT til at kommunikere direkte, men dog er en tredje offentlig maskine nødvendig til at etablere forbindelsen (hole punching).

  • 1
  • 0
#36 Baldur Norddahl

Jeg skal snart lave noget lignende til nogle gadeskabe, som ønskes overvåget også hvis internet og strøm afbrydes. Primært så man kan sende den rigtige type teknikker afsted. Er fiberen overgravet, er der strømafbrydelse eller er switchen crashet.

Min plan er bare en simpel openvpn med en permanent etableret forbindelse til kommandocentralen og ind i overvågningssystemet. Openvpn kan selv genetablere forbindelsen hvis den afbrydes, og hvis det fejler, vil det blive til en fejl i vores overvågning.

IP adresser er ikke noget problem når det hele kører på faste interne ip adresser i en VPN.

  • 1
  • 1
#38 Ivan Skytte Jørgensen

Trafikken inde i tunnelen styrer du selv. Tunnel-vedligeholdelse afhænger af traffikmængde og 'keepalive' opsætning. I visse miljøer med specielt hjernedøde NAT/CGN laver vi keepalive hver 10. sekund. Total traffik med 10-sekunders keepalive ser ud til at være mindre end 17 pakker/minut / 8Kb/minut. Når forbindelsen flækker og skal genetableres så vil der være mere traffik får at forhandle TLS mm. Man styrer prøv-igen-intervallet fra systemd/daemontools/whatever.

Jeg vil anbefale dig at sætte en server+client op sådan så det passer til dit påtænkte miljø og så måle efter hvor meget trafik OpenVPN vil generere i dit miljø.

Det eneste tilfælde, hvor OpenVPN-tunnelen fra vores 60+ clienter i løbet af de seneste 5 år ikke er blevet genetableret efter internet-udfald, har været 2 gange når DHCP-clienten på klienterne flækkede af ukendte årsager. Slut+tænd+prøv igen har løst det problem.

  • 0
  • 0
#40 Kjeld Flarup Christensen

Dem jeg hjælper har ingen penge, så prisen for mobilforbindelsen er meget i fokus.

Jeg fandt egentligt aldrig ud af hvordan TDC afregnede data. De TAP data som de sender til de telefonselskaber som bruger deres net, er afregnede i 1kB blokke. Så er det spørgsmålet over hvor lang tid de er samplede.

Men bruger du en mobilforbindelse, så er en SMS en oplagt mulighed, til at vække forbindelsen op. SMS koster selvfølgelig også, et andet trick kunne være et ubesvaret telefonopkald, de er som regel gratis ;-)

  • 0
  • 0
#41 Nicolai Petri

Da jeg læste titlen var Exchange min første tanke. Det er vist en ret udbredt bagdør i 2021 🙈 Men jeg har nu selv lavet en tilsvarende løsning med OpenVPN og været glad for det. Men jeg har ikke tal omkring hvad tomgangstrafikken er. Løsningen er ikke i drift længere.

  • 1
  • 0
#43 Ole Kaas

Hvis tanken om hvad en "autonom" OpenVPN client kan generere af trafik til husholdning osv giver panderynker, kunne løsningen være en "ringe hjem"-funktion. Sådan som (jeg forestiller mig) botnets fungerer:

Et https kald til server hvor clienten bare siger "hej - AOK" (eller: not ok) og henter et JSON, der kan indholde en kommando og helt sikkert en checksum/hash til at validere objectet.

Indlysende kommandoer:

  • check_interval (start med at sænke denne)

  • reboot (plejer at virke - men kan være en dum ide ved f.eks disk full)

  • start, stop, restart (f.eks OpenVPN)

  • submit_logs

  • submit_sysreport (få vigtige parametre inden vi gør ondt værre)

  • ssh_connect("server")

  • exec("shell cmd")

Sidstnævnte skal måske have en ekstra nøgle med for at blive valideret.

Så tænker jeg at man vil have 100% styr på mængden af trafik der genereres. Udfordringen er nok ikke at lave løsningen alt for avanceret og ressourcekrævende - den skal så vidt muligt fungere uanset hvilken tilstand systemet er endt i.

  • 0
  • 0
#44 Baldur Norddahl

Ved du tilfældigvis hvor meget "tomgangstraffik" OpenVPN bruger ?

Dem jeg hjælper har ingen penge, så prisen for mobilforbindelsen er meget i fokus.

Jeg er har desværre ikke nogen erfaring med det endnu. Men min tanke var at det holder sig indenfor den datapakke, der følger med selv billige mobilabonnementer. Det kan naturligvis overvåges, så der ikke kommer ubehagelige overraskelser.

Skal det være ekstra low cost er det måske muligt at bruge radio som er gratis. Eksempelvis Lorewan: https://en.wikipedia.org/wiki/LoRa med egen gateway for gratis eller med en kommerciel gateway for "billig" (Cibicom tager 500 kr/måned for 100 "sensorer" landsdækkende). Det giver naturligvis ikke SSH adgang men mindre kan måske gøre det. I mit tilfælde, hvor opgaven er "rapporter tilbage om nettet er nede, switchen crashet, strømafbrydelse, temperatur etc" der vil en sådan løsning være fin.

Eller hvad med en passiv packet modem. Så slipper man da i hvert fald for gummistøvler og terminaladgang er mulig, om end langsomt (max 9600 bps).

  • 0
  • 1
#47 Henning Wangerin

Baldur. Er der ikke noget med maks 6-8 pakker/time a ca 50B på lorawan. Det kommer ikke langt med i en ssh

Det rækker ikke til ssh, men som ping til at åbne en dataforbindelse kan det fint bruges.

Kommer an på om der køres SF7 eller SF12, men skal der data retur nogenlunde synkront vil det være nødvendigt md SF/ med deraf lille rækkevide.

Kan der nøjes med en gang i timen er SF12 fint nok, og det kan række meget langt, afhængig af antenne forhold. SF12 med en antenne i det fri kan find række 30-50 km.

/Henning

  • 0
  • 0
#48 Jens Frederik Dalsgaard Nielsen

een ting er hvor hårdt du "spreder" dit link sf7,sf12 osv, men jo længere jo mindre båndbredde. Men gætter lidt på PHK er nok ude efter noget "afstandsuafhængig" på denne måde. 60 km fra hans hjemmebase er langt langt og kort som man nu ser på det.

Dvs, net,sms ollign er løsningen og ikke radioteknologi som lora. eller måske en brevdue :-)

  • 0
  • 0
#49 Baldur Norddahl

Baldur. Er der ikke noget med maks 6-8 pakker/time a ca 50B på lorawan. Det kommer ikke langt med i en ssh

Nej det er jeg klar over. Det var ment som en "tænk out of the box" løsning, da opgaven ikke er specielt veldefineret. Det kunne være at "har ingen penge" vægter højere end "ssh er et absolut krav". Måske man kan nøjes med en remote kontrol der kan udføre på forhånd definerede kommandoer, såsom genstart computeren, tænd for pumpen, sluk for pumpen, send målinger, etc.

Den dyreste del i enhver SSH baseret løsning bliver mobilabonnementet. Vi snakker 1000-2000 kr per år per site. Det kan blive 0 kr per år per site hvis man laver en løsning baseret på gratis radio.

  • 1
  • 1
#50 Christian Nobel

Den dyreste del i enhver SSH baseret løsning bliver mobilabonnementet. Vi snakker 1000-2000 kr per år per site.

Som jeg skrev tidligere, så bruger jeg ca. 200 MB om måneden ved at lave et HTTP request en gang i minuttet - hvis jeg går ned til hvert femte minut, så svarer det til omkring ½GB om året, hvilket kan gøres for 10Euro hos 1NCE.

Skal man bruge mere end det, så er der flere udbydere som kan tilbyde omkring 5GB til ca. en halvtresser om måneden.

  • 1
  • 0
#51 Baldur Norddahl

Som jeg skrev tidligere, så bruger jeg ca. 200 MB om måneden ved at lave et HTTP request en gang i minuttet - hvis jeg går ned til hvert femte minut, så svarer det til omkring ½GB om året, hvilket kan gøres for 10Euro hos 1NCE.

Jeg finder ikke lige det tilbud hos 1NCE men de har et andet, som måske er lige præcis det PHK søger: 10 euro engangs og forudbetaling for 10 års abonnement med 500 MB lifetime. Så er det ganske simpelt: send en SMS til telefonnumeret, SMS'en skal indeholde IP adresse og port som den skal etablere en reverse SSH tunnel eller VPN til. Indtil da skal den være passiv og ikke på nettet, for at ikke at bruge noget data.

De har tilmed lavet OpenVPN løsningen, så man ikke skal konstruere noget selv.

  • 1
  • 2
#53 Jens Jönsson

Min plan er bare en simpel openvpn med en permanent etableret forbindelse til kommandocentralen og ind i overvågningssystemet. Openvpn kan selv genetablere forbindelsen hvis den afbrydes, og hvis det fejler, vil det blive til en fejl i vores overvågning.

Jeg har lavet tilsvarende løsning på mobilbredbåndsforbindelse. Men der sker et eller andet i udbyderens net, som dropper forbindelsen, hver 24 timer. Af en eller anden mærkelig grund, får jeg det ikke til at reconnecte.

Vi bøvlede gevaldigt med det, og opgav tilsidst at bruge mere tid på det, da det var så sjældent vi havde brug for det.

Vi prøvede SIM kort fra alle de store udbydere (dem med eget net).

  • 0
  • 0
#54 Anders Palm

Så hvis vi nu sætter ambitionsniveauet ned til hvert femte minut, så taler vi om under 50MB om måneden, og skræller vi nogen af headerne af serveren, så kan det barberes yderligere ned.

Det er noget dansker-halløj kan jeg høre. Når du drager ud i verdenen er der altså mange steder hvor det første de spørger om er om det er nødvendigt med mere end 10MB/måned på deres SIM kort.

  • 0
  • 0
#55 Chris Bagge

med mindst 99% sandsynlighed virker når det gælder

Det er spændende med alle disse overvejelser omkring de øvre lag i protokolstakken, men hvor god er egentlig mobildækningen? Jeg taler af egen erfaring når jeg siger at der rigtigt mange steder er et ret stort problem. Kan man leve med det og hvis ikke, hvad gør man så ved det? En bekendt ovre i Sverige vil ofte, når han har brug for en sikker forbindelse fra "Langbortistan", splitte signalet, sende informationen via to forskellige operatører og lade det centrale udstyr smide dubbletterne væk.

  • 0
  • 0
Log ind eller Opret konto for at kommentere