open_ports.sh 2.6
Nytt! I version 2.3 är den geografiska uppslagningen tillbaka – jippie! :-)
Version 2.4 visar alla aktiva nätverksinterface och i rätt ordning dessutom!
Nytt i version 2.6 är att open_ports har flyttat till GitHub: https://github.com/Peter-Moller/open-ports
Innehåll:
Om scriptet
Scriptet open_ports.sh
visar vilka öppna förbindelser man har på sin dator, både utgående och inkommande.
Scriptet fungerar även på Linux – för testade distros, se punkten nederst!
På Mac kan man med hjälp av GeekTool (ingår inte) visa resultatet direkt på skärmens bakgrund såsom i denna bild:
Så här kan det se ut när man befinner sig bakom en NAT-router:
På en Linux-maskin kan det se ut så här (man kan använda conky eller root tail eller liknande för att smeta ut utskriften på skärmen):
(Klicka för en större bild)
För utgående trafik visas följande information:
• Program
• Port
• Användare
• Antal uppkopplingar
• Server som man är kopplat till
• Var i världen (land och stad) som den maskinen finns
Den rapporterar även för vad som är igång och väntar på trafik utifrån. För det rapporteras följande:
• Protokoll (IPv4 eller IPv6)
• Program
• Användare
• Port
• ”Servicerange”, d.v.s. vilka som betjänas (en del betjänar endast den lokala datorn eller det lokala nätet)
Scriptet körs av systemanvändaren ”root” varannan minut (med launchd
på Mac och cron
på Linux) och använder kommandot lsof
för att samla in data i ett antal filer.
När man kör scriptet som vanlig användare (t.ex. m.h.a. GeekTool) analyseras dessa datafiler och resultatet presenteras.
Kontroller
• varannan timme kontrolleras checksumman för programmet lsof
för att upptäcka ett eventuellt intrång (se bild)
• accessrättigheterna på de ingående filerna
• så att det finns datafiler alls (varnar annars, se bild)
• så att launchd-komponenten kör (endast Mac, se bild)
• så att datafilerna är yngre än 1 timme (se bild)
• så att vi har en IP-adress alls (se bild)
En gång i timmen kontrolleras datorns externa IP-adress (sitter man bakom en NAT så är det den externa adressen som används av scriptet) och om den förändras adderas detta till en ”dagbok” (så att man i efterhand kan se var man har varit :-).
Färgnyckel:
röd bakgrund | processen ägs av root |
röd text | IP-numret har inget motsvarande DNS-namn (det är inte bra men det behöver inte vara "farligt") |
blå text | IP-numret slås upp till flera DNS-namn |
grön text | protokollet är "säkert" (ssh, https, imaps, smtps, scp, sftp) eller programmet är sshd |
Installation
- Hämta scriptet från
http://fileadmin.cs.lth.se/cs/Personal/Peter_Moller/scripts/open_ports_install.sh (Mac)
http://fileadmin.cs.lth.se/cs/Personal/Peter_Moller/scripts/open_ports_install_linux.sh (Linux) - Starta ett terminalprogram
- Bli
root
:
Mac: om du är en vanlig användare skriver dusudo adminanvändarnamn
och sedansudo -i
; om du är admin-användare skriver du barasudo -i
.
Linux: skriv:su -
- Sätt accessrättigheter på scriptet:
chmod 755 open_ports_install.sh
resp.open_ports_install_linux.sh
(du måste leta upp var det finns) - Kör scriptet:
./open_ports_install.sh
resp.open_ports_install_linux.sh
- Installationen går normalt snabbt. För Linux är det klart nu. På Mac avslutas det med att GeekTool öppnas. För att installera det, dubbelklicka på dess .PrefPane
- I GeekTool: klicka på ikonen som det står ”Shell” under och drag ut på en del tomt skrivbord (måste vara tomt annars vill den inte). Drag den så stor som du vill ha den och där du vill ha den.
- Det dyker upp ett ”Properties”-fönster. Det du behöver fylla i här är:
- Command: open_ports.sh
- Refresh every: 120 s
- Byt typsnitt till ett monospace-typsnitt (jag använder Menlo och vit typsnittsfärg)
- Nu kan du stänga GeekTool
Notera att GeekTool inte flyttar runt sitt innehåll om du ändrar antalet skärmar etc. (t.ex. med en bärbar dator som har en extern skärm). Däremot blir dess fönster åter synligt när skärmgeometrien återställs!
Notera även att scriptet automatiskt kommer att starta efter en omstart!
sha1-checksumma för open_ports.sh:
Geografisk uppslagning
Tidigare använde jag en site som fritt gav up geografisk uppslagning. De har nu slutat med det och numera (nytt i mars 2014) använder jag en annan site som fungerar väl:
(Klicka på knappen ”Free” och ange din emailadress så mailar de en nyckel till dig. De har en begränsning på 2.000 frågor per dygn, men eftersom redan gjorda frågor sparas är det ingen risk att trilla över den gränsen vid vanlig användning)
Denna nyckel (en lång räcka med bokstäver och siffror) måste du själv spara som denna fil:/Library/cs.lth.se/OpenPorts/apidb.key
Om ingen sådan fil finns, kommer open_ports.sh
inte att leta upp datorernas geografiska lokation.
Uppdatering
Man uppdaterar scriptet (manuellt) genom att som root
i ett terminalfönster skriva:open_ports.sh -u
Den kommer då att hämta ner den senaste versionen av scriptet och installera det (om den är annorlunda än den du har). Har du redan den senaste versionen kommer den berätta det!
Alternativt kan du själv göra detta som root:curl fileadmin.cs.lth.se/cs/Personal/Peter_Moller/scripts/open_ports.sh > /usr/bin/open_ports.sh
chmod 755 /usr/bin/open_ports.sh
Funktionskontroll
Du kan när som helst köra scriptet (i ett terminalfönster). Vad som händer beror på vilken användare du kör som:
• är du root
genereras nya data (men visas inte)
• är du en annan användare visas de senast genererade data i terminalfönstret
Om den säger att du inte har några förbindelser öppna kan du kontrollera detta genom att (som root
) skriva:lsof +c 0 -i 4 -n | grep EST
Blir det tomt så är rapporteringen korrekt.
Stoppa / avinstallera
Vill du inte se data längre (men fortsätta samla in) räcker det med att stoppa GeekTool (på dess menyikon eller via dess panel i systeminställningar).
Du stoppar exekvering genom att (som root
) i ett terminalfönster skriva:launchctl stop se.lth.cs.open_ports
launchctl unload /Library/LaunchDaemons/se.lth.cs.open_ports.plist
Du avinstallerar det genom att sedan ytterligare skriva:rm -rf /bin/open_ports.sh
(scriptet)rm -rf /Library/LaunchDaemons/se.lth.cs.open_ports.plist
(bakgrunds-datainsamlingen)rm -rf /Library/cs.lth.se/OpenPorts
(datafilerna)
Beskrivning av komponenterna
De ingående komponenterna är dessa:
/usr/bin : | |
open_ports.sh | Scriptet som körs av både bakgrunds-datasamlaren och av GeekTool (och användaren) |
/Library/LaunchDaemons :(endast Mac) | |
se.lth.cs.open_ports.plist | Styrscript till launchd ; gör så att open_ports.sh -scriptet körs var 120:e sekund och samlar data |
/Library/cs.lth.se (Mac) /usr/share/cs.lth.se (Linux) | |
GeoLookup | Katalog som innehåller uppslagna datorers geografiska placering. De sparas som en fil per IP-adress med namnet ”IP-address.txt ”.Samanvänds av många script!! |
/Library/cs.lth.se/OpenPorts (Mac) /usr/share/cs.lth.se/OpenPorts (Linux) | |
apidb.key | Om denna filen finns och innehåller en giltig nyckel (från http://db-ip.com/api/), kommer datorerrnas geografiska lokation att letas upp när ≠ root kör scriptet |
Checksum.txt | Checksumma för binären /usr/sbin/lsof . Kontrolleras varannan timme för att upptäcka intrång |
Countries.txt | En lista över korta och långa namn på länder (från http://www.worldatlas.com/aatlas/ctycodes.htm) |
ExternIP.txt | Datorns externa IP-adress. Används om man sitter bakom en bredbandsdelare |
ExternIP_history.txt | ”Dagbok” över var datorn har varit; IP-nummer, tidpunkt samt geolokation (kollas en gång i timmen) |
ip4.txt | Data gällande ESTABLISHED-IPv4. Uppdateras varannan minut |
ip6.txt | Data gällande ESTABLISHED-IPv6. Uppdateras varannan minut |
listen.txt | Lista över LISTEN-portar. Uppdateras varannan minut |
Testade distributioner
Förutom Mac OS X (där scriptet utvecklades först) har följande distributioner testats med open_ports.sh:
• Mandriva 2010
• Kubuntu
Maila mig gärna med erfarenheter från andra distros!