當 TCP 已經建立連線後,使用者可在此連線下,持續傳送封包資料,這時候加上 firewall rule 擋掉該來源 IP 無法作用到已經建立的 TCP 連線上。在不停掉提供服務的 server 的狀況下,可以透過 tcpkill 強制關閉該 TCP 連線。
tcpkill 在 dsniff 套件中,在 CentOS 可透過 epel repo 安裝
yum -y install dsniff -enablerepo=epel
tcpkill 切斷 TCP 連線的原理是,模擬發送 RST 封包,但因為發送該封包必須要先知道 SEQ/ACK,所以執行 tcpkill 會發現程式並沒有馬上結束,而是持續在 listening 的狀態。
這時候 tcpkill 會持續監控網路封包,直到有收到符合條件的封包時,才能結束該 TCP 連線。
在使用前,可先用 netstat -anlp
查詢目前的所有網路連線 IP 及 Port 狀況。可用 ip host 或是 port 參數指定條件。
# tcpkill ip host 1.2.3.4
tcpkill: listening on eth0 [ip host 1.164.232.236]
1.2.3.4:38784 > 192.168.1.10:5556: R 305630104:305630104(0) win 0
1.2.3.4:38784 > 192.168.1.10:5556: R 305638604:305638604(0) win 0
1.2.3.4:38784 > 192.168.1.10:5556: R 305655604:305655604(0) win 0
192.168.1.10:5556 > 1.2.3.4:38784: R 2839752684:2839752684(0) win 0
192.168.1.10:5556 > 1.2.3.4:38784: R 2839754086:2839754086(0) win 0
192.168.1.10:5556 > 1.2.3.4:38784: R 2839756890:2839756890(0) win 0
^C
再利用 netstat 檢查 tcp 連線後,就可確認沒有來自該來源 IP 的 TCP 連線,後續因為設定了 firewall rule,確實擋掉了該 IP,也無法建立新的連線。
沒有留言:
張貼留言