ฉันกำลังพยายามใช้ tcpdump เพื่อสำรวจว่าในคอมพิวเตอร์ของฉันคุยกับใครบนเวิลด์ไวด์เว็บ
ฉันมาถึงขั้นนี้แล้ว:
lan_hosts="(โฮสต์ || ถึง || ไม่รวม)"
local_hosts="(127.0.0.1 || ips_of_my_nics || localhost || local_hostname)"
expoced_local_ports="(ssh || https || โดเมน || $(netstat -ap | egrep -h '/(processes|I_dont|want|to_see|traffic_of)' | tr -s ' ' | cut -d ' ' -f 4 | rev | cut -d ':' -sf 1 | rev | sort | sed ':a; N; $!ba; s/\n/ \|\| /g'))"
tcpdump -vi ใดๆ "ip && ! icmp && ! arp && (src ! $local_hosts || dst ! $local_hosts) && (src $local_hosts || dst $local_hosts) && (src ! $local_hosts || พอร์ต src ! $excused_local_ports) && (dst ! $local_hosts || พอร์ต dst ! $excused_local_ports) && host ! $lan_hosts"
ตอนนี้เหตุผลที่ฉันโพสต์ที่นี่เป็นคำถาม: ฉันไม่เข้าใจว่าทำไม / แพ็กเก็ตเหล่านี้ยังคงปรากฏในผลลัพธ์อย่างไร:
tcpdump: ฟังใด ๆ LINUX_SLL ประเภทลิงก์ (Linux สุก v1) ขนาดการดักจับ 262144 ไบต์
14:49:30.660109 IP (tos 0x0, ttl 64, id 23067, offset 0, flag [DF], proto UDP (17), ความยาว 71)
localhost.38976 > localhost.domain: 26002+ [1au] A? lan_host.lan. (43)
14:49:30.686174 IP (tos 0x0, ttl 64, id 23110, offset 0, flag [DF], proto UDP (17), ความยาว 80)
localhost.47181 > localhost.domain: 45895+ [1au] PTR? some_ip.in-addr.arpa (52)
14:49:30.686219 IP (tos 0x0, ttl 64, id 2440, offset 0, flag [DF], proto UDP (17), ความยาว 103)
localhost.domain > localhost.47181: 45895 1/0/1 some_ip.in-addr.arpa PTR โลคัลโฮสต์ (75)
ผมก็นึกว่าเซกเมนต์ (src ! $local_hosts || dst ! $local_hosts)
ของการประกาศตัวกรองของฉัน ซึ่งเชื่อมต่อกับตรรกะ && กับส่วนตัวกรองอื่นๆ เท่านั้น ควรแยกส่วนเหล่านั้นออกหรือไม่ และแม้ว่าฉันจะไม่ได้มีส่วนนั้นในตัวกรอง แต่ก็ควรแยกออกอีกครั้งเนื่องจากการรวม โดเมน
ในของฉัน แก้ตัว_local_ports
ตัวแปร.
เรามาแกะการประกาศตัวกรองกันสักหน่อยแล้วลองอธิบายสิ่งที่ฉันต้องการบรรลุในแต่ละส่วน:
ไอพี
-> ดูเฉพาะแพ็กเก็ต ipv4 เนื่องจากเครื่องนี้ไม่มีเส้นทาง ipv6 ไปยังอินเทอร์เน็ต ฉันไม่กังวลกับ ipv6 ที่นี่
! ไอซีเอ็มพี
-> ไม่สนใจคำขอ ping / การตอบกลับและข้อมูลเมตาการกำหนดเส้นทาง icmp อื่น ๆ
! อาร์พี
-> กรองแพ็กเก็ตโปรโตคอลการแก้ปัญหาที่อยู่
(src ! $local_hosts || dst ! $local_hosts)
-> ซ่อนแพ็คเก็ตของ localhost ที่พูดกับตัวเอง
(src $local_hosts || dst $local_hosts)
-> ซ่อนการออกอากาศจากโฮสต์อื่น
(src ! $local_hosts || พอร์ต src ! $excused_local_ports)
-> ซ่อนแพ็คเก็ตที่โฮสต์ของฉันส่งจากหนึ่งในพอร์ตของโปรแกรมที่ฉันไม่ต้องการดูในตอนนี้
(dst ! $local_hosts || พอร์ต dst ! $excused_local_ports)
-> ซ่อนแพ็คเก็ตที่โฮสต์ของฉันได้รับบนหนึ่งในพอร์ตของโปรแกรมที่ฉันไม่ต้องการดูในตอนนี้
(โฮสต์ ! $lan_hosts)
-> ซ่อนการสื่อสารกับโฮสต์ที่กำหนด