Încerc să folosesc tcpdump pentru a explora ce vorbește pe computerul meu cu cine pe World Wide Web.
Am ajuns până aici până acum:
lan_hosts="(gazde || la || exclude)"
local_hosts="(127.0.0.1 || ips_of_my_nics || localhost || local_hostname)"
excused_local_ports="(ssh || https || domeniu || $(netstat -ap | egrep -h '/(procese|I_dont|vreau|să_văd|trafic_of)' | tr -s ' ' | cut -d ' ' -f 4 | rev | cut -d ':' -sf 1 | rev | sort | sed ':a; N; $!ba; s/\n/ \|\| /g'))"
tcpdump -vi orice „ip && ! icmp && ! arp && (src ! $local_hosts || dst ! $local_hosts) && (src $local_hosts || dst $local_hosts) && (src ! $local_hosts || src port ! $excused_local_ports) && (dst ! $local_hosts || dst port ! $excused_local_ports) && gazdă ! $lan_hosts"
Acum, motivul pentru care postez asta aici ca întrebare: nu înțeleg de ce / cum apar aceste pachete încă în rezultat:
tcpdump: ascultare pe orice tip de legătură LINUX_SLL (Linux cooked v1), dimensiunea capturii 262144 octeți
14:49:30.660109 IP (to 0x0, ttl 64, id 23067, offset 0, flags [DF], proto UDP (17), lungime 71)
localhost.38976 > localhost.domain: 26002+ [1au] A? lan_host.lan. (43)
14:49:30.686174 IP (to 0x0, ttl 64, id 23110, offset 0, flags [DF], proto UDP (17), lungime 80)
localhost.47181 > localhost.domain: 45895+ [1au] PTR? some_ip.in-addr.arpa. (52)
14:49:30.686219 IP (to 0x0, ttl 64, id 2440, offset 0, flags [DF], proto UDP (17), lungime 103)
localhost.domain > localhost.47181: 45895 1/0/1 some_ip.in-addr.arpa. PTR localhost. (75)
Credeam că segmentul (src ! $local_hosts || dst ! $local_hosts)
din declarația mea de filtru, care este doar concatenată cu && logica altor părți ale filtrului, ar trebui să le excludă? Și chiar dacă nu aveam acea parte în filtru, ar trebui din nou excluse din cauza includerii domeniu
in al meu excused_local_ports
variabil.
Să despachetăm puțin declarația de filtru și să încercăm să explic ce am vrut să obțin cu fiecare parte:
ip
-> uită-te doar la pachetele ipv4, deoarece această mașină nu are o cale ipv6 către internet, nu mă preocupă ipv6 aici.
! icmp
-> nu-ți pasă de cererile/răspunsurile ping și alte metadate de rutare icmp.
! arp
-> filtrează pachetele de protocol de rezoluție de adrese
(src ! $local_hosts || dst ! $local_hosts)
-> ascunde pachetele localhost care vorbesc singur
(src $local_hosts || dst $local_hosts)
-> ascunde emisiunile de la alte gazde
(src ! $local_hosts || src port ! $excused_local_ports)
-> ascunde pachetele pe care gazda mea le-a trimis de la unul dintre porturile programelor pe care nu vreau să le privesc acum.
(dst ! $local_hosts || dst port ! $excused_local_ports)
-> ascunde pachetele pe care gazda mea le-a primit pe unul dintre porturile programelor pe care nu vreau să le privesc acum.
(gazdă! $lan_hosts)
-> ascunde comunicarea cu gazdele definite