我正在使用 IPTABLES 在我的服务器上进行出口日志记录,并使用以下行来提供记录的所有流量的 UID 信息:
-A OUTPUT -j LOG --log-prefix "IPTABLES(O): " --log-level info --log-uid
然而,偶尔我会收到没有 UID 的日志,如下所示:
IPTABLES(O): IN=OUT=eth0 SRC=1.2.3.4 DST=5.6.7.8 LEN=83 TOS=0x00 PREC=0x00 TTL=64 ID=54321 DF PROTO=TCP SPT=50505 DPT=443 WINDOW=342 RES=0x00 ACK PSH FIN URGP=0
传出流量不包含任何 UID 信息的原因有哪些?
答案1
常见原因之一是终止 FIN ACK 序列。一旦客户端应用程序在 TCP 套接字上调用 close(),就会向服务器发送 ACK + FIN 数据包,然后客户端程序退出。此时,没有与 TCP 连接关联的进程,但尚未完成。
当应用所有者过滤器时,通常还会添加一条规则来接受状态为 ESTABLISHED 的数据包,以覆盖这些“残留数据包”。
iptables -A OUTPUT -p tcp --dport 443 -m owner --uid-owner foo -j ACCEPT
iptables -A OUTPUT -p tcp --dport 443 -m state --state ESTABLISHED -j ACCEPT