centos 服务器中是否有记录每个连接的日志?
类似于集中连接日志
答案1
获得所有 TCP 连接的单一集中日志的唯一可靠方法是LOG
向软件防火墙配置添加规则iptables
,该规则将记录任何设置了 SYN 和 ACK 位的数据包,即任何 TCP 连接的第二个数据包。默认情况下,这些数据包将作为内核日志消息出现/var/log/messages
。
本质上你可能想要添加这样的 iptables 规则:
iptables -A OUTPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -j LOG --log-prefix "Inbound connection established: "
iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -j LOG --log-prefix "Outbound connection established: "
(您可能希望将这些规则放在现有的规则集中,以便它们不适用于环回接口,因为这可能会为主机内应用程序进程之间的每个本地连接生成两个条目。)
是的,OUTPUT 链中的规则会记录入站连接,反之亦然,因为这只会记录实际得到响应的连接:仅记录 SYN 数据包也会记录将被拒绝的连接尝试。由于互联网上恶意软件缠身的系统会执行端口扫描,这通常会给您带来大量无用的日志条目:您必须与其他日志进行交叉检查,结果却发现您根本没有运行这样的服务,或者该连接被另一条iptables
规则或相关服务拒绝。
对于 UDP 协议来说,情况就比较棘手了,因为 UDP 是无连接的,基本上只是一个可以构建应用程序特定协议的平台。因此,没有简单的方法来检测“连接的第一个数据包”或类似的东西,因为所有这些都完全是应用程序特定的。
答案2
我认为应该这样做:
journalctl -fu sshd
或者
journalctl -u sshd -n 100
也就是说,如果你正在运行 systemd,我认为这是默认设置。前者将保持监视。后者相当于通过 tail 进行管道传输。
(阅读后似乎表明日志实际上应该位于 /var/log/secure 中)