linux系统不默认记录端口历史连接,需依赖外部日志机制:1. iptables/nftables或auditd配置记录;2. 查阅ssh、nginx等服务日志;3. conntrack+ulogd高级跟踪;4. 未预配置则无法回溯,仅能启用新规则并检查当前连接。

Linux 系统本身不默认记录端口的历史连接记录。netstat、ss、lsof 等工具只能查看当前实时的连接或监听状态,它们输出的是内核当前维护的 socket 表快照,不是日志,也不会保存“过去谁连过哪个端口”这类历史信息。
要查历史连接,必须依赖外部日志机制,常见且可行的途径有以下几类:
1. 查看系统级网络连接日志(需提前配置)
Linux 内核不自动记录连接事件,但可通过以下方式实现记录:
-
启用 iptables/nftables 日志规则
例如,记录所有新建 TCP 连接:sudo iptables -A INPUT -p tcp --syn -j LOG --log-prefix "NEW_TCP_CONN: " sudo iptables -A OUTPUT -p tcp --syn -j LOG --log-prefix "NEW_TCP_CONN_OUT: "
对应日志会写入
/var/log/kern.log或journalctl -k中,可用:journalctl -k | grep "NEW_TCP_CONN" | tail -50
使用 auditd 审计网络系统调用(较重,适合安全敏感场景)
可监控connect()、accept()等系统调用,但需提前配置规则,且日志量大。
2. 检查应用层服务日志(最实用)
大多数服务(如 SSH、Nginx、Apache、MySQL)自己记录客户端连接行为:
-
SSH 登录历史(含来源 IP 和时间):
sudo journalctl _COMM=sshd | grep "Accepted\|Failed" # 或传统日志(CentOS 7/RHEL 7 以前): sudo grep "Accepted\|Failed" /var/log/secure
-
Web 服务器访问日志(如 Nginx 默认记录每条 HTTP 请求的源 IP 和端口):
tail -20 /var/log/nginx/access.log # 日志中字段通常含:$remote_addr:$remote_port
数据库连接日志(如 MySQL 需开启
general_log或slow_query_log并包含连接信息)。
⚠️ 注意:这些日志不直接显示“端口连接”动作本身,而是记录服务收到请求后的上下文(如 IP、时间、协议、用户),间接反映端口被访问的事实。
3. 使用连接跟踪日志(conntrack + ulogd)
若系统启用了 nf_conntrack 并配合 ulogd(用户态日志守护进程),可记录连接建立/关闭事件,包括源/目的 IP+端口、协议、时间戳等。但这属于高级网络审计配置,非默认启用。
4. 临时补救:没有历史日志怎么办?
如果未提前配置任何日志,无法回溯已结束的历史连接。此时只能:
- 立即启用 iptables LOG 或 auditd 规则,为后续连接留痕;
- 结合
last、lastlog、journalctl --since "1 hour ago"等检查用户登录行为; - 用
ss -tun state established或netstat -tn | grep ESTABLISHED抓取当前活跃连接作为线索。
不复杂但容易忽略











