如何关闭没有附加进程的端口?

如何关闭没有附加进程的端口?

这个问题类似于网络端口打开,但没有附加进程?netstat 显示没有 pid 的监听端口,但 lsof 没有

我尝试了所有我能做的(以 root 身份:netstat、lsof、ls -al /proc/*/fd 等),但我找不到 pid。

无论如何,我必须关闭或释放没有 pid 的端口,因为我的进程想要监听它。有什么办法吗?

我不想重启服务器。因为我的系统中有一个进程,它会更新我所有服务器中的 bin 文件,然后自动部署所有服务器。当 7123 或其他端口被监听时,部署将失败。

谢谢。

更多细节

这种情况有三台服务器,全部都是 Rackspace 的服务器,并且所有“坏端口”都是 udp 端口​​ 7123。

重启可以解决这个问题,我已经在三台服务器中的一台上尝试过了。但我不想重启服务器。

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
udp   213120      0 134.213.205.214:7123        0.0.0.0:*                           -

nmap的结果显示该端口并未关闭。(@Enzo)

root@auto:~# nmap 134.213.205.214 -p 7123 -sU

Starting Nmap 6.40 ( http://nmap.org ) at 2018-04-16 12:01 UTC
Nmap scan report for auto (134.213.205.214)
Host is up.
PORT     STATE         SERVICE
7123/udp open|filtered unknown

Nmap done: 1 IP address (1 host up) scanned in 2.12 seconds

更新

目前,重启是关闭/释放此端口的唯一方法。但重启不是一个好主意,它会导致服务停止。

答案1

您的系统可能处于不一致的状态。我会先进行一些基本诊断。

检查UDP套接字及其进程。

运行sudo netstat -lunpsudo ss -lunp查看 UDP 套接字(在端口 7123 上)是否繁忙sudo普通的用户提升权限并查看 PID 和进程名称 who's "聆听“在该端口上。如果没有,sudo则会有一个-代替 PID 和进程名称。记下 PID。如果没有列出,那么您可以开始认为您的系统已被入侵,因为该进程能够通过操纵进程的内部内核结构来隐藏自己!
如果您看不到具有高权限的 PID,那么您最好隔离该服务器,因为它可能已被破坏和黑客入侵。

检查监听过程是否也“

我建议使用nmap或者更一般的网猫工具。nmap你可以尝试以下命令:

sudo nmap -sV -v -Pn -sU -p U:7123 134.213.205.214

它尝试理解端口 UDP:7123 上使用的协议。sudo特定扫描类型(UDP 服务扫描)需要此协议。如果您看到的数据与您的预期不符,则可能是进程失控或处于不一致的状态。或者它已被其他(恶意?)代码替换。

netcat需要一些手动干预来为服务器生成流量:

netcat -u 134.213.205.214 7123

无论您输入什么,都将通过端口 UDP:7123 发送到您的应用程序。您还可以使用以下命令传输一些随机数据(但不要期望任何有意义的结果):

cat /dev/urandom | netcat -u 134.213.205.214 7123

检查系统和应用程序日志(如果有)

前者通常存储在/var/log/目录中。应用程序日志可能位于其他任何地方。lsof如果您检查其第二列上的 PID,该工具可能会有所帮助。我会在后续操作中密切关注这些日志。

检查该 PID 的进程表

该命令ps可以提供很多有关进程的详细信息。我个人最喜欢的是:

PS_FORMAT="ruser,pid,ppid,s,%cpu,rss,cmd" ps ax --sort=pid

您可以在第二列中看到要查找的 PID,以及真实用户ID(ruser,第一栏),父 PID(ppid,第 3 列),地位(s,第四),% CPU使用率(%cpu,第 5 位),驻留集大小(rss,第 6)和命令行带参数(cmd,第 7 个)。在我看来,对于这种情况,进程状态(单个字母)和 CPU 使用率百分比以及命令行是关键值。

检查手册页了解所有细节ps并微调输出。

检查二进制文件

如果您有另一台具有相同架构和操作系统的机器,并且相同的进程以预期的方式运行,您可以检查二进制文件是否逐字节匹配。如果不匹配,您最好从已知的安全来源重新安装这些二进制文件。

假设程序是/usr/local/bin/myserver
计算并记下它的校验和。如下所示:

sha512sum /usr/local/bin/myserver

如果程序已编译为使用动态库,那么您还需要检查它们。使用以下方法可获得已使用的动态库列表:

ldd /usr/local/bin/myserver

请注意:输出可能很长,但对于每一行,您都需要计算并记下校验和以供比较。

如果发现与参考受信任系统有任何差异,我建议重新安装整个系统和应用程序。这是一种激进的方法,但我认为目标系统不再值得信任。

终止并重新启动进程

我会尝试终止恶意进程(前提是你知道它的 PID)并重新启动它,以检查恶意行为是否持续。为了根据 PID 终止进程,你可以运行:

sudo kill -s SIGKILL <PID>

我需要提醒您,在很多情况下,进程不会终止或终止时间比预期的要晚。这主要取决于ps之前运行的命令所显示的进程状态。所引用的手册页在“进程状态代码”段落中报告了有关进程状态列的一些信息。
使用该命令ps再次检查进程状态。它通常会在几秒钟内被踢出并从进程列表中消失。

一旦进程被终止,您可以尝试重新启动它并查看恶意行为是否会重复。

一般来说,如果您不对系统进行任何更改,则行为几乎也不会改变。也就是说,仅仅重新启动应用程序或系统几乎无法解决问题:它只会被推后一段时间。

相关内容