Kontrollera trafik in/ut på portar

Tråden skapades och har fått 18 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Malmö
  • 2013-01-29 01:10

Jag är på jakt efter någon mjukvara som kan visa mig när det är nätverkstrafik in och ut samt över vilka portar som trafiken färdas. Jag har flera gånger varit i behov av det i många olika sammanhang men inte hittat något. T ex skulle jag nu vilja kontrollera att en uppsatt SSH-tunnel verkligen tar den aktuella trafiken genom korrekt port.

Har ni några bra tips?

  • Medlem
  • Malmö
  • 2013-01-29 09:13

Little Snitch testade jag på min förra dator, inte en snöbolls chans i helvetet att den mjukvaran kommer in på min dator igen

Wireshark nämndes när jag diskuterade ämnet med kollegorna men samtidigt sa de att det var ganska så krångligt och oöverskådligt. Kan man verkligen se vilken port ett aktivt program skickar sin trafik över där? Inte bara att det går trafik över en viss port...?

Rubbernet ser trevligt ut.

Wireshark är krångligt och kanske lite väl hardcore.

  • Medlem
  • Malmö
  • 2013-01-29 10:25
Ursprungligen av keptang:

Rubbernet ser trevligt ut.

Wireshark är krångligt och kanske lite väl hardcore.

Ja, Rubbernet ser trevligt ut och jag testade det. Det är helt blank i programmet hos mig, ingenting visas. Märkligt...?

Ursprungligen av zinned:

Ja, Rubbernet ser trevligt ut och jag testade det. Det är helt blank i programmet hos mig, ingenting visas. Märkligt...?

Det funkar bra här på Lion 10.7.5.
Satte inget lösenord utan klickade bara ok.

  • Medlem
  • Malmö
  • 2013-01-29 10:46
Ursprungligen av keptang:

Det funkar bra här på Lion 10.7.5.
Satte inget lösenord utan klickade bara ok.

Vad gjorde du efter att du startade appen, ingenting? Det aktiva apparna bara listades rakt upp och ned?

Ursprungligen av zinned:

Vad gjorde du efter att du startade appen, ingenting? Det aktiva apparna bara listades rakt upp och ned?

Gjorde ingenting, installerade daemon som den bad om och sen dök allting upp.

  • Medlem
  • Stockholm
  • 2013-01-29 10:02

Du kan kolla vilka nätverksförbindelser (och filer) en process har öppnat genom:

$ lsof -p pid-för-processen -n

Men här får du bara en ögonblicksbild. Vill du vara 100% säker på vad som går över nätverket är wireshark väldigt bra, även om interfacet inte är så OS X-anpassat. Nackdelen med Wireshark är att du (så vitt jag vet) inte kan koppla trafiken till en enskild process. Om man vill lära sig något om vad som flyger och far över nätverket är Wireshark ovärderligt och jag kan rekommendera att spendera några timmar med verktyget för den vetgirige.

Vill du övervaka en enskild process kan du göra mycket med dtrace via terminalen. Det finns en mängd färdiga script (man -k dtrace) men man kan också göra egna.

  • Medlem
  • Stockholm
  • 2013-01-29 10:29

Jag testade också Rubbernet. Klart trevligt. Man måste installera nätverksdemonen (eller vad det kallas) genom att klicka på knappen och sedan ser man trafiken.

  • Medlem
  • Stockholm
  • 2013-01-29 11:06

Rubbernet har en serverdel som kör som root samt en klient som visar data grafiskt. Klienten ser ingenting om du inte har en server (nätverksdemon). Det finns en knapp att klicka på för att installera och starta denna demon.

  • Medlem
  • Malmö
  • 2013-01-29 12:25

Det jag ville kolla i skrivande stund var hur portarna hanterades lokalt när en SSH-anslutning är upprättad uteifrån. Jag ansluter från lokalport XXXX till remote port YYYY och SSH:n går givetvis över port 22 via internet. När jag då tittar i Rubbernet så ser jag att ssh-daemon ligger och använder port 37tusen-någonting vid ena tillfället och 37tusen-någontingannat andra gången.

Märkligt, kan jag tycka....borde den inte använda port YYYY eftersom det är det jag specar i anslutningen?

  • Medlem
  • Stockholm
  • 2013-01-29 12:55

Kan du visa SSH-kommandot på macen?

Om en klient gör en connect till port 22 så upprättas en TCP/IP-förbindelse där port 22 används på server-sidan och (vanligast) en slumpmässig port på klientsidan. T.ex. 37tusen-nånting.

Rubbernet visar bara den ena av dessa två portar. lsof-kommandot jag gav ovan visar båda portarna.

  • Medlem
  • Malmö
  • 2013-01-29 14:13
Ursprungligen av pesc:

Kan du visa SSH-kommandot på macen?

Javisst, se nedan (random portval) :

$ ssh -L 2000:localhost:4000 konto@mydomain.org

wireshark är inte såå krångligt, installera det (du måste ha xQuartz installerat om du kör mountain lion), starta en capture och filtrera på typ "tcp.srcport == 22". Man kan alltid avsluta datainsamlingen om det är tungrott för datorn och sen göra filtrering + analys.

sen måste du gräva lite i datat på andra srcports också och se så du inte missar något data, men det filtret är en början iaf.

// DL

  • Medlem
  • Stockholm
  • 2013-01-29 16:13

SSH-tunnlar kan vara lite förvirrande eftersom de involverar två ssh-processer, tre nätverksförbindelser och potentiellt sett fyra hosts.

CLIENT <-1-> "ssh -L..." <-2-> "sshd" <-3-> SERVER

Vitsen är att förbindelse 2 är krypterad ("säker"). Ofta är en eller båda av förbindelserna 1 och 3 på samma maskin (localhost).

En TCP-förbindelse består av IP-adressen för source och destination, samt en source-port och en destination-port. Fyra värden.

Det kan inte finnas två TCP-förbindelser med samma fyra värden; varje TCP-förbindelse måste vara unik (uppnås genom att man väljer olika source-portar). Om flera klienter vill koppla sig till samma server (samma portnummer) får man flera uppkopplingar med samma dst-host och dst-port; src-host och src-port måste då variera.

Då ditt kommando har gjort en tunnel har vi följande nätverkskoppel:

<-1->: clienthost:XXX <-> sshhost:2000
<-2->: sshhost:YYY <-> sshdhost:22
<-3->: sshdhost:ZZZ <-> sshdhost:4000

På sshhost ser du förbindelse <-1-> och <-2->
På sshdhost ser du <-2-> och <-3->

Portarna XXX, YYY och ZZZ slumpas av operativsystemet på klienten för att varje förbindelse skall vara unik. Rubbernet visar bara remote port för varje förbindelse så på inkommande förbindelser ser du de slumpade portnumren.

Terminalkommando för att se ssh-förbindelser (inklusive src-port och dst-port):
$ lsof -n | grep TCP | grep ssh

  • Medlem
  • Malmö
  • 2013-01-29 16:48

Först och främst, stort tack för ett i mitt tycke djuplodat inlägg

Ursprungligen av pesc:

Portarna XXX, YYY och ZZZ slumpas av operativsystemet på klienten för att varje förbindelse skall vara unik. Rubbernet visar bara remote port för varje förbindelse så på inkommande förbindelser ser du de slumpade portnumren.

Nja, de slumpas ju inte i mitt fall...som jag förstår det iaf. Jag specar ju, i mitt kod-exempel ovan, att klienten (den dator jag sitter med) ska skapa en tunnel mot servern och trafiken (från vald applikation) som ska gå över denna tunnel ska gå ut från lokal port 2000 och sedan tas emot på port 4000 på servern. Av denna anledningen tycker jag då att det är konstigt att Rubbernet på servern visar en helt annan port för sshd.

Är jag helt tokigt på det?

  • Medlem
  • Stockholm
  • 2013-01-29 17:29

De portar som OSet väljer är kanske inte helt slumpvisa. Den tar en ledig port helt enkelt. Kanske 37tusen-nånting.

Ursprungligen av zinned:

...Jag specar ju, i mitt kod-exempel ovan, att klienten (den dator jag sitter med) ska skapa en tunnel mot servern och trafiken (från vald applikation) som ska gå över denna tunnel ska gå ut från lokal port 2000 och sedan tas emot på port 4000 på servern. Av denna anledningen tycker jag då att det är konstigt att Rubbernet på servern visar en helt annan port för sshd.

Nja, ditt kommando kommer att skapa tre internet-förbindelser, enligt vad jag skrev ovan.

Om klientapplikationen och "ssh -L" -kommandot går på samma maskin (och eftersom du angav localhost i ssh -L -kommandot) så kommer förbindelse <-1-> och <-3-> vara lokala, dvs inom maskinen. Dessa går då över loopbackdevicet (lo0) och inte över det riktiga nätverkskortet (t.ex. en0 eller en1).

Rubbernet visar bara nätverksförbindelser över riktiga nätverkskort. Jag vet inte hur man kan få den att inkludera trafik över lo0. Därför kommer Rubbernet endast att visa <-2->.

Dessutom visar Rubbernet endast det portnummer som den andra sidan använder i en förbindelse. Inte den lokala porten.

Så på maskinen där du gjort "ssh -L" kommer Rubbernet att visa förbindelse <-2-> med port 22 (ssh).
På maskinen där sshd kör kommer Rubbernet att visa samma förbindelse <-2-> med ett "random" portnummer som klientsidan valt.

Om du vill se de andra två förbindelserna (där <-1-> använder port 2000 och <-3-> använder port 4000) får du använda lsof-kommandot jag skrev om ovan. Rubbernet visar dem inte eftersom de går på lo0.

Senast redigerat 2013-01-29 17:39
  • Medlem
  • Malmö
  • 2013-01-29 20:45
Ursprungligen av pesc:

Om klientapplikationen och "ssh -L" -kommandot går på samma maskin (och eftersom du angav localhost i ssh -L -kommandot) så kommer förbindelse <-1-> och <-3-> vara lokala, dvs inom maskinen. Dessa går då över loopbackdevicet (lo0) och inte över det riktiga nätverkskortet (t.ex. en0 eller en1).

Rubbernet visar bara nätverksförbindelser över riktiga nätverkskort. Jag vet inte hur man kan få den att inkludera trafik över lo0. Därför kommer Rubbernet endast att visa <-2->.

Hur skulle kommandot sett ut ifall man inte skulle skicka över loopbackdevicen utan över själva NIC'et? Hade man då skrivit in den lokala IP-adressen för klienten där man kör själva SSH-kommandot? Nej förresten, det borde väl bli "domain.org" man har där istället...eller hur?

Ursprungligen av pesc:

Dessutom visar Rubbernet endast det portnummer som den andra sidan använder i en förbindelse. Inte den lokala porten.

Så på maskinen där du gjort "ssh -L" kommer Rubbernet att visa förbindelse <-2-> med port 22 (ssh).
På maskinen där sshd kör kommer Rubbernet att visa samma förbindelse <-2-> med ett "random" portnummer som klientsidan valt.

Om du vill se de andra två förbindelserna (där <-1-> använder port 2000 och <-3-> använder port 4000) får du använda lsof-kommandot jag skrev om ovan. Rubbernet visar dem inte eftersom de går på lo0.

Ah, ok.

1
Bevaka tråden