pme*_*ard 15 monitoring connection tcp
tcpdump在与 apache 服务器的本地连接上运行时,我发现 TCP 连接每 2 秒立即建立并关闭一次。我如何找到哪个进程负责这些?netstat -ctp没有帮助,连接速度太快,并且没有为 TIME_WAIT 显示进程标识符。
结果证明它们是 haproxy 探针,我可以用 验证strace,但我仍然不知道有什么方法可以首先确定 haproxy。
Mat*_*erg 21
您可以将 auditd 框架用于此类事情。它们不是非常“用户友好”或直观,因此需要您进行一些挖掘。
首先确保您已安装并运行 auditd 并且您的内核支持它。
例如,对于 Ubuntu,您可以安装它apt-get install auditd。
然后添加一个审计策略来监控所有connect系统调用,如下所示:
auditctl -a exit,always -F arch=b64 -S connect -k MYCONNECT
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 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
Run Code Online (Sandbox Code Playgroud)
在这里你可以看到 /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
Run Code Online (Sandbox Code Playgroud)
关于 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:
另一种快速的(瑞典语:fulhack)方法是创建一个快速循环,将连接数据转储给您,如下所示:
while true;do
ss -ntap -o state established '( dport = :80 )'
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
此命令使用ss命令(套接字统计)将当前已建立的连接转储到端口 80,包括启动它的进程。如果它有很多数据,您可以| tee /tmp/output在完成后添加以在屏幕上显示输出以及将其写入 /tmp/output 以供以后处理/挖掘。如果它没有捕获快速 haproxy 连接,请尝试删除sleep 1但如果它是一台使用率很高的机器,请注意大量日志记录。根据需要修改!