一些背景知識: (1) HTTP/1.0 協議中,定義了web server 和client使用代理(proxy)時,在HTTP request 和response頭中,使用Via: 標識使用的proxy server,用來防止server loop; (2) snort 是開放源代碼的IDS(入侵檢測系統),可以用於主機或網絡IDS。具有很多IDS規則,可以對捕捉的(ip,tcp,udp,icmp)包進行模式識別和匹配,並可產生相應記錄。 (3) libnet是開放源代碼的軟件,可以作為網絡協議/包生成器。 (4) TCP/IP網絡是包交換網絡 (5) snort 同時具有使用libnet庫生成IP包的功能,可以通過發出TCP_RESET包,中斷TCP連接。 前提: (1) snort 運行於路由上(Linux)或者通過交換機的port mirror功能,運行在路由的同一網絡段 實施: (1) compile snort with flexresp(flex response) feature (2) 定義snort 規則: alert tcp $HOME_NET any <> $EXTER_NET 80 (msg:"block proxy"; uricontent:"Via:"; resp: rst_all;) 效果: 內部網絡用戶可以正常浏覽外部網站,如果內部用戶的浏覽器設置了外部的一個代理後,HTTP REQUEST 頭和RESPONSE頭會包括Via: ...字符,snort規則會捕捉到這個連接,然後向client 和server的socket發送RST包。這樣TCP連接就被終止了。