Dagens kommando er netstat. Vi vil se på hvordan netstat kan bruges til at se hvilke porte der er åbne for internetforbindelser på ens Linux system. Hvorfor er det nyttigt at kunne se, hvilke porte der bliver lyttet på? Hvis din maskine er på Internettet, eller på et lokalnetværk, er det vigtigt at du har styr på, hvilke netværksservices din maskine tilbyder, da du risikerer at din maskine bliver angrebet fra nettet via disse. Med netstat kan du let se de samme oplysninger som man kan se med et udefrakommende "portscan" - og mere til, idét du jo har adgang til maskinen "indefra". Netstat kan også bruges til at vise noget routing information og noget interface information, men det kommer vi ikke ind på her. Se i stedet "man route" og "man ifconfig". Relevante optionsNetstat uden options viser kun de sockets der er igang med en forbindelse, dvs. ikke dem der bare lyttes på. |
$ netstat Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 1 0 heartofgold.freebs:1880 archimedes.shmoo.co:www CLOSE_WAIT Active UNIX domain sockets (w/o servers) Proto RefCnt Flags Type State I-Node Path unix 1 [ N ] STREAM CONNECTED 353 @0000001d unix 1 [ ] STREAM CONNECTED 1113 @00000081 ... |
-a medfører at alle sockets vises incl. server sockets der lyttes på. -e betyder at user ID og inode nummer kommer med i output. -l giver kun de sockets, der lyttes på. -n giver "numerisk information", dvs. ip adresse og port nummer i stedet for host navn og service nummer. -p giver process ID og program navn. -t giver tcp sockets. Eksempel 1En typisk anvendelse af netstat er |
# netstat -ape |
Bemærk at kommandoen udføres som root. Hvis den ikke udføres som root, vil man kun få PID/program name med på de sockets den pågældende bruger selv ejer. Et udsnit af output fra denne kommando: |
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State User Inode PID/Program name tcp 1 0 heartofgold.freebs:1880 archimedes.shmoo.co:www CLOSE_WAIT luke 24212 817/communicator-sm tcp 0 0 *:printer *:* LISTEN root 8156 6704/lpd tcp 0 0 *:ssh *:* LISTEN root 267 334/sshd tcp 0 0 *:smtp *:* LISTEN root 199 328/master tcp 0 0 *:time *:* LISTEN root 120 230/ udp 0 0 heartofgold.freebsd:ntp *:* root 288 342/ntpd udp 0 0 localhost:ntp *:* root 287 342/ntpd udp 0 0 *:ntp *:* root 286 342/ntpd raw 0 0 *:icmp *:* 7 root 0 - raw 0 0 *:tcp *:* 7 root 0 - Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node PID/Program name Path unix 1 [ N ] STREAM CONNECTED 353 414/xosview @0000001d unix 0 [ ACC ] STREAM LISTENING 240 328/master private/cyrus unix 1 [ ] STREAM CONNECTED 1113 784/kdeinit: klaunc @00000081 unix 1 [ ] STREAM CONNECTED 262 332/qmgr @0000000d unix 0 [ ACC ] STREAM LISTENING 244 328/master private/uucp unix 1 [ ] STREAM CONNECTED 357 416/xload @0000001f unix 0 [ ACC ] STREAM LISTENING 248 328/master private/ifmail unix 1 [ ] STREAM CONNECTED 355 415/xclock @0000001e ... mange flere... |
Øverst har vi de aktive internet forbindelser, dem kigger vi nærmere på om lidt. Det andet "afsnit" af outputtet er UNIX domain sockets. Dem vil vi ikke komme nærmere ind på.
En kort gennemgang af hvad de forskellige kolonner betyder: Lad os se nærmere på en enkelt linie af outputtet ovenfor: |
tcp 0 0 *:ssh *:* LISTEN root 267 334/sshd |
Protokollen er tcp, det er ssh porten der lyttes på, socket'en ejes af root og det er ssh daemon'en med process ID 344 der har denne socket. Eksempel 2Hvis vi kun vil se på TCP og vi ikke vil have alle sockets men kun dem der lyttes på, hedder kommandoen |
# netstat -tl Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:printer *:* LISTEN tcp 0 0 *:ssh *:* LISTEN tcp 0 0 *:smtp *:* LISTEN tcp 0 0 *:time *:* LISTEN |
Her ser vi at der lyttes på printerporten, ssh porten, smtp (mail) samt time servicens port, på alle maskinens ip adresser. For yderligere information om netstat, se "man netstat", men den er ikke særlig genneført.
Manualsiden til FreeBSD er bedre, men desværre passer den ikke helt med Linux. Dog kan
man godt få noget ud af at læse den også. (Den findes mange steder på nettet,
f.eks. http://noc.cv.ua/cgi-bin/man.cgi?CMD=netstat&SECT=1). |