Monitoring

尋找短暫的 TCP 連接所有者程序

  • August 12, 2020

在與 apache 伺服器的本地連接上執行tcpdump,我發現 TCP 連接每 2 秒立即建立並關閉。我如何找到對這些負責的程序?netstat -ctp沒有幫助,連接太快了,TIME_WAIT 沒有顯示程序標識符。

結果證明它們是 haproxy 探測器,我可以用 來驗證strace,但我仍然不知道有什麼方法可以首先確定 haproxy。

您可以將 auditd 框架用於此類事情。它們不是非常“使用者友好”或直覺,因此需要您進行一些探勘。

首先確保您已安裝、執行 auditd 並且您的核心支持它。

例如,對於 Ubuntu,您可以安裝它apt-get install auditd

然後添加一個審計策略來監控所有connect系統呼叫,如下所示:

auditctl -a exit,always -F arch=b64 -S connect -k MYCONNECT

如果您使用的是 32 位安裝的 Linux,則必須將 b64 更改為 b32。

此命令將向審計框架插入一個策略,並且任何 connect() 系統呼叫現在都將記錄到您的審計日誌文件中(通常/var/log/audit/audit.log)供您查看。

例如,使用 netcat 到 news.ycombinator.com 埠 80 的連接將產生如下結果:

type=SYSCALL msg=audit(1326872512.453:12752): arch=c000003e syscall=42 success=no exit=-115 a0=3 a1=24e8fa0 a2=10 a3=7fff07a44cd0 items=0 ppid=5675 pid=7270 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts4 ses=4294967295 comm="nc" exe="/bin/nc.openbsd" key="MYCONNECT"
type=SOCKADDR msg=audit(1326872512.453:12752): saddr=02000050AE84E16A0000000000000000

在這裡你可以看到 /bin/nc.openbsd 應用程序發起了一個 connect() 呼叫,如果你有很多連接呼叫並且只想 grep 出某個 ip 或埠,你必須進行一些轉換。SOCKADDR 行包含一個saddr 參數,它以0200 開頭,後跟十六進制的埠號(0050),表示80,然後是十六進制的IP(AE84E16A),即news.ycombinator.com 的IP 174.132.225.106。

審計框架會生成大量日誌,因此請記住在完成任務後禁用它。要禁用上述策略,只需將 -a 替換為 -d 即可:

auditctl -d exit,always -F arch=b64 -S connect -k MYCONNECT

關於 auditd 框架的良好文件:http:

//doc.opensuse.org/products/draft/SLES/SLES-security_sd_draft/part.audit.html

將 IP 地址與十六進制、十進制、二進制等相互轉換:

http ://www.kloth.net/services/iplocate.php

通用十六進制/十進制轉換器:http:

//www.statman.info/conversions/hexadecimal.html

來自 IT Security Stack Exchange 的 auditd 簡介。 http://security.blogoverflow.com/2013/01/a-brief-introduction-to-auditd/

編輯1

另一種快速’n’dirty(瑞典語:fulhack)的方法是創建一個快速循環,將連接數據轉儲給您,如下所示:

while true;do
 ss -ntap -o state established '( dport = :80 )'
 sleep 1
done

此命令使用ss命令(套接字統計資訊)將目前建立的連接轉儲到埠 80,包括啟動它的程序。如果它有很多數據,您可以| tee /tmp/output在完成後添加以在螢幕上顯示輸出以及將其寫入 /tmp/output 以供以後處理/探勘。如果它沒有捕捉到快速 haproxy 連接,請嘗試刪除sleep 1,但如果它是一台使用率很高的機器,請注意大量日誌記錄。根據需要修改!

引用自:https://serverfault.com/questions/352259