System-administration igennem firewall

Jeg kom i sidste uge ind i en sjov diskussion, jeg gerne vil dele med jer - og især vil jeg gerne høre jeres indspark. Hvad gør man med en Linux-maskine, der ligger med en firewall - hvor man skal kunne lave "en vis" mængde systemadminstration på. Vi kan for nemheds-skyld antage at det er en Ubuntu-Linux 10.04 - men i princippet kunne det ligeså godt være en FreeBSD eller Debian Linux. Maskinen skal stå bag en firewall, som afviser alle indadgående connections, men maskinen kan tilgå alle porte på ydre maskiner (så man behøver ikke lege med f.eks. Corkskrew).

F.eks. kunne jeg godt have brug for at kunne opdatere pakker på maskinen bag firewallen eller spørge hvor varm disken er (midt i denne hedebølge kan det være relevant) - tilsvarende andre simple CUI opgaver ville være smarte.

Da jeg fik det spørgmål om hvad man kan gøre, så kunne jeg tænke på et par måder man kunne lave fjern-administration og snyde sig igennem firewallen.

  1. På fjernmaskinen kan man køre et cronjob, som hver time (eller lignende) henter et shell-script fra en maskine udenfor firewallen. Efterfølgende køres shell-scriptet af cron såfremt det hentede indhold er forskellig fra det der blev hentet forrige gang. Dette kan nemt checkes f.eks. med at sammenligne og gennem md5sum på scriptet.
  2. På fjernmaskinen installeres [Dropbox](https://www.dropbox.com/) eller [Ubuntu One](https://one.ubuntu.com/), som giver et katalog som er til rådighed på fjernmaskinen såvel som på en maskine udenfor firewallen. Igen her kan man checke for ændringer i md5sum på et script der udføres hvis der er ændringer.

Mht. den første løsning, så lider den af mulighed for DNS-hijacking og den anden løsning med Dropbox, der skal man installere en binær "blop", man ikke kender indholdet af. Helt perfekt er det ikke.
Jeg har lige testet begge muligheder, og det fungerer fint indtil man rammer interaktive opgaver - her knækker tråden for min løsning.
Er der nogen, der har lavet endnu mere snedige løsninger?

/pto

Kommentarer (21)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
Morten Wegelbye Nissen

ssh -i ${idfile} -R ${PORT}:localhost:22 ${user}@${supporthost} "~/neverendingshellscript.sh ${PORT}"

Det var da jeg lavede den at jeg blev overbevist om at man skal være mindst ligeså kritisk over for hvad man kan sende, som man kan modtage.

  • 0
  • 0
Ulrik Gammelby

Nabto har lavet et lille (gratis) TCP tunnellerings-værktøj lige til formålet:

1) registrer dig på www.nabto.com

2) hent Nabto Tunnel Tool fra download.nabto.com

3) opret en ny Nabto host med toolet på din server (nabto -S -e )

4) start server tunnel-endepunktet (nabto -s -p 22) på maskine bag firewall

5) forbind til den nyoprettede host fra klientmaskinen (nabto -l 2222 -h )

6) start ssh mod localhost port 2222 på klientmaskinen

Forbindelsen er i forvejen krypteret, så du kan nøjes med rsh, hvis du har det kørende på serveren.

  • 0
  • 0
Thomas Peter Berntsen

Jeg tænker umiddelbart, at port knocking kunne være relevant i sådant et tilfælde (forudsat, at det er en softwarefirewall på selve hosten).

På den måde kan du have en meget restriktiv firewall, men stadigvæk have mulighed for at etablere en SSH-forbindelse efter behov.

http://en.wikipedia.org/wiki/Port_knocking og http://www.portknocking.org

Der er dog visse svagheder ved port knocking, som man skal være bevidst om (behandles også på de to sites), men omvendt skal du jo sikre både din fjernhost samt maskinen udenfor firewall'en, hvis du kører i de setup, som du ellers nævner.

Man kan også anvende varianten af port knocking kaldet "single packet authorization", hvor man afsender en krypteret pakke mod firewall'en i stedet for at afvikle en sekvens af pakker. Se http://www.cipherdyne.org/fwknop/ herfor.

  • 0
  • 0
Anders Kvist

Enig, det må være tricket. Lav et cronjob der checker om der findes en aktiv connection og hvis ikke, så etablerer den ud til den maskine der skal hava adgang ind. Den har jeg brugt før på skolenetværk hvor jeg ikke kunne få lov at få adgang ind...så lavede jeg en ssh tunnel til ssh i stedet for :)

  • 0
  • 0
Adam H

Brug openVpn, nemt og enkelt

Mht sikkerheden så må man jo sørge for at vpn ringen er sikret med certifikater + nøgle + evt ip beskyttelse - vel ikke meget forskelligt om man åbnede en ssh adgang med nøgle+certifikat+ip beskyttesle - men vpn løsningen kræver så både at man bryder vpn ringen og ssh adgangen.

Mvh

  • 0
  • 0
Robert Larsen

Ja, VPN vil være det mest fleksible...så kan man derigennem også "åbne" for andre services, f.eks. VNC til serveren (hvis man har den slags lyster).

Mht. temperatur på serveren er det jo ikke noget du skal gå og bekymre dig om. Heller ikke om sommeren. Det har man Nagios til.

  • 0
  • 0
Carsten Hess

Man kunne overveje at gøre som så mange botnets gør: bruge en irc-kanal til at fjernbetjene maskinen. Det må kunne lade sig gøre at få maskinen til at connecte til en specific irc-server (som man selv sætter op og sikrer passende, selvfølgelig) og acceptere kommandoer fra en bestemt bruger i et forum - og sende stdout/stderr tilbage i kanalen?

  • 0
  • 0
Martin Bøgelund

... du prøver jo i bund og grund at opnå det modsatte af hvad din firewall prøver.

Man kan også more sig med at løbe op ad den nedadgående rulletrappe (gør det selv når ingen kigger). I bør derfor pointere at for praktiske formål vil en nytænkning af det totale setup være mere relevant, end at skabe gnidningsvarme ved at lade komponenterne i jeres løsning køre i modfase.

  • 0
  • 0
Henning Wangerin

Jeg har noget ligninede kørende på ca 80 maskiner, som kobler "hjem" til min egen server via OpenVPN.

Jeg kan så i min server konfigurere hver enkelt link til hvad den kan gøres til/fra maskinen - udover selvfølgelig lokalt på klienten.

Fordelen er jo at jeg bare kan ssh'e ind til maskinerne uden at tænke over hvordan de er koblet op på nettet. Hvis klienten er en arbejds-station kan brugeren sætte vnc op så jeg også kan tilgå maskinen af den vej for at demonstrere noget i gui'en.

Eneste problem jeg har mødt er nogle steder hvor nettet er blokeret i hoved og r'v, men det har jeg løst ved at sætte iptables op vpn-serveren op til at forwarde port 53 (+ et par flere) til openvpns standard-port.

Som andre har skrevet skal både openvpn's nøgler, og min ssh-nøgle knækkes for at komme i kontakt med maskinen, og det burde give rimelig god sikkerhed.

/Henning

  • 0
  • 0
Peter Toft

Lyder godt med OpenVPN (og ssh+nabto kender vi jo fra OSD2010), men hvad hvis nettet lige kvæles mellem maskinen inde bag firewallen og den ydre server og det så kommer op efter nogle sekunder/minutter? Skal der laves nogen øvelser for at lave "reconnect"?

  • 0
  • 0
Jens Dueholm Christensen

Der kan konfigureres timeout-settings i OpenVPN, som automatisk forsøger at reconnecte hvis tunnelen går ned - se på keepalive optionen, og evt. ping*).

Jeg har gennem mange år (siden 2006) brugt OpenVPN i produktions-sammenhænge til at trække backup-data hjem, og selvom jeg flår enten clienter eller server ned, så reconnecter de alle igen uden problemer i løbet af ganske få øjeblikke.

Vær dog opmærksom på, at hvis din applikation, der sender data over VPN-forbindelsen ikke kan tåle at miste connectivity (det kan en MS SQL backup til et virtuelt backupdevice fx. ikke - den fejler hurtigere end man kan nå at sige "hov"), så er OpenVPN måske ikke løsningen - forbindelser igennem ryger lige så snart OpenVPN's egen forbindelse ryger.

  • 0
  • 0
Peter Hansen

Minder mig om min mærkelige langskæggede matematik lærer i 1.g i 1984, som flippede ud da jeg afbrød et program på en Picoline PC med CRTL-Break eller hvad det nu var. Han sagde at det var synd for elektronerne og svarede til at bremse et tog ved at køre det sidelæns. De to piger i min gruppe var chokerede, men jeg kunne dog berolige dem om at computeren ikke havde lidt unødig overlast...

Tilbage til emnet. Jeg har installeret rigtig mange servere i Dubai og Abu Dhabi og der kan man altså overhovedet ikke komme ind på sine servere udefra på normal vis. OpenVPN eller reverse SSH tunler er nogle af de løsninger jeg har brugt. Kun få steder var alle udgående porte også blokeret.

  • 0
  • 0
Jan Nielsen

Hvorfor beder du ikke bare om en adgang via en fornuftigt opsat VPN forbindelse, så skal du ikke rode med en masse udenom løsninger på et problem der bør løses af firewall/vpn administratoren ?

  • 0
  • 0
Jørn Hedegaard Povlsen

Jeg er netop ved at etablere et distribueret ven/familie netværk baseret på reverse-ssh-tunneling. Netværket består af 6 laptops/netbooks,der rejser rundt i verden, og to stationære DMZ. den ene med fast IP, og den anden med dyndns-IP.

Serveren med den faste IP, er reverse-tunneling-server, for de rejsende PC'ere. På denne er linien GatewayPorts yes tilføjet i /etc/ssh/sshd_config.

Hver rejse-PC får tildelt hvert sit portnummer. og tilknytter sig serveren via et opstarts program og et crontab-overvågningsprogram, med:

ssh -N -f -R *:$MIT_PORT_NUMMER:localhost:22 $GATEWAY,

hvor ssh, er sat op til at kunne connecte til $GATEWAY uden password.

Alle rejse-pc'er, kan hermed logge på hinanden, hvor end de er henne i verden!

For ikke at skulle gå rundt og huske på alle portnumrene, har alle pc'erne identisk /etc/ssh/ssh_config-fil med passende aliaser:

Host pcnavn1 HOSTNAME gatewaycomputeren PORT port_for_navn1

Host pcnavn2 HOSTNAME gatewaycomputeren PORT port_for_navn2

. . .

sålede at inlogning sker med, den sædvanlige kommando:

ssh user@pcnavn

pc'erne kan ligeless ssh-mounte mapper fra hinanden (med nautilus)

Derudover er firefox sat op med socks5-proxy, hvor proxyen etableres med: ssh -f -N -C -D 8118 gatewaycomputeren som via et crontab-overvågningsprogram falder tilbage til ssh -f -N -C -D 8118 localhost, hvis forbindelsen til gatewaycomputeren er nede.

Proxy-løsningen, gør at din browsing ikke kan sniffes, og tillige kan man se DR-kanalarne i udlandet, og måske man også slipper for reklamer i s-togene?

mvh Jørn Hedegaard Povlsen

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