我通过 ssh 连接到我的服务器。我是唯一有权连接到服务器的人。通过 ssh 连接后,我运行以下命令:
sudo netstat -tupn
输出包含以下两行:
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address
tcp 0 0 MY.SERVER.IP.ADDRESS:22 MY.HOME.IP.ADDRESS:54886 ESTABLISHED 18677/0
tcp 0 324 MY.SERVER.IP.ADDRESS:22 MY.HOME.IP.ADDRESS:55096 ESTABLISHED 18843/1
就我有限的知识而言,输出中的这两行似乎与我的 ssh 连接有关。我相信这是真的,因为端口是 22,而外部地址是我的家庭 IP 地址。
我试图理解这两行代表什么。为什么我的单个 ssh 连接会显示两个连接?
另外,netstat 是否是一个可以用来查看是否有人未经授权访问我的服务器的好工具?如果有人这样做了,我可以在 netstat 输出中看到他们的连接吗?
答案1
这些行似乎表明ESTABLISHED
来自您的家用机器的 2 个活动(状态) ssh 连接(一个可能来自scp
正在进行的操作或ssh
来自不同终端或某些后台 shell 的会话?)。
这些行在最后一列包含它们对应的进程的 PID,18677
在18843
您的例子中是这样的。您可以检查它们是什么进程 ( ps -ef | grep <PID>
)。对于正常的 ssh 连接,它们应该是sshd
进程。
您还可以通过在家用机器上运行来找出它们与您家用机器上的哪些 PID 相对应sudo netstat -tupn
,您会看到类似以下内容(请注意匹配的 IP_ADDRESS:PORT_NUM 值,但本地和外部/远程地址列反转):
Proto Recv-Q Send-Q Local Address Foreign Address State PID/...
tcp 0 0 MY.HOME.IP.ADDRESS:54886 MY.SERVER.IP.ADDRESS:22 ESTABLISHED PID1/...
tcp 0 0 MY.HOME.IP.ADDRESS:55096 MY.SERVER.IP.ADDRESS:22 ESTABLISHED PID2/...
然后,您可以从相应的 pid 找到相应的进程、它们的父进程等等。
是的,netstat
这是一个很好的工具。只要未经授权的访问无法以某种方式绕过netstat
工作方式(在我看来这是可能的,但对于常见攻击来说可能性不大),您应该能够看到此类活动连接,甚至可以看到正在终止或最近终止的连接痕迹(状态喜欢TIME_WAIT
或CLOSE_WAIT
)。