分析入站 TCP 连接

好风 发表于 2016-12-08T02:29:08.594487Z
引用地址:https://plus.ooclab.com/note/article/1315

概述

对于公网服务,分析客户端连接情况非常有价值。如果我们的对外服务使用 HTTP(S) 协议,那么分析方法比较成熟。 但如果我们的对外服务使用自定义的 TCP 协议。其隐藏于 haproxy 后端。那么分析起来就没有那么多成熟方法了。 本文即探讨此种情况(因为HTTP(S)也是基于TCP,因此本文讨论适用于各类基于TCP的协议)。

记录

iptables

比如我们想记录某个服务的访问客户端IP相关信息(本地 TCP 监听端口为 3000)。可以先让 iptables 记录这个日志。

iptables -I INPUT -p tcp -m tcp --dport 3000 -m state --state NEW \
    -j LOG --log-level 1 --log-prefix "New Connection "

通常日志记录在 /var/log/syslog

ss / netstat

如果我们想记录 TCP 连接信息,可以使用 ss 命令

重要 ss 基于 linux/netlink 接口访问内核获取信息。 netstat 从 /proc/net/tcp 获取信息。 ss 命令执行要比 netstat 快很多。因此,建议用 ss 代替 netstat 的功能。另外,如果需要特殊操作,或者 需要集成到已有程序中,可以参考 linux/netlink 编程(inet_diag.h接口)。

提取

我们可以用 logstash 提取日志/记录到 elasticsearch

分析

kibana 分析。