如何在 Linux 中关闭端口?

use*_*080 41 tcp nmap

我对关闭端口有一些疑问,我想我遇到了一些奇怪的事情。

当我使用执行

nmap --top-ports 10 192.168.1.1
Run Code Online (Sandbox Code Playgroud)

它显示 23/TCP 端口已打开。

但是当我执行

nmap --top-ports 10 localhost
Run Code Online (Sandbox Code Playgroud)

它显示 23/tcp 端口已关闭。

其中哪一个是真的?我想在我的整个系统上关闭这个端口,我该怎么做?

bon*_*ing 50

Nmap 是一个很棒的端口扫描器,但有时您需要更权威的东西。您可以使用该netstat实用程序询问内核哪些进程打开了哪些端口:

me@myhost:~$ sudo netstat -tlnp
活动 Internet 连接(仅限服务器)
Proto Recv-Q Send-Q 本地地址外地址状态PID/程序名称
tcp 0 0 127.0.0.1:53 0.0.0.0:* 听 1004/dnsmasq    
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 380/sshd        
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 822/cupsd       
tcp6 0 0 :::22 :::* LISTEN 380/sshd        
tcp6 0 0 ::1:631 :::* LISTEN 822/cupsd       

我给出的选项是:

  • -t 仅 TCP
  • -l 仅侦听端口
  • -n 不查找服务和主机名,只显示数字
  • -p 显示进程信息(需要root权限)

在这种情况下,我们可以看到它sshd正在侦听任何接口 ( 0.0.0.0) 端口 22,并且cupsd正在侦听环回 ( 127.0.0.1) 端口 631。您的输出可能会显示它telnetd的本地地址为192.168.1.1:23,这意味着它不会响应环回适配器上的连接(例如你不能telnet 127.0.0.1)。

还有其他工具可以显示类似的信息(例如lsof/proc),但 netstat 是最广泛可用的。它甚至适用于 Windows ( netstat -anb)。BSD netstat 有点不同:您必须使用sockstat(1)来获取进程信息。

获得进程 ID 和程序名称后,如果您想关闭端口,就可以开始查找进程并杀死它。对于更细粒度的控制,您可以使用防火墙(Linux 上的 iptables)来限制对某些地址的访问。您可能需要禁用服务启动。如果 PID 在 Linux 上为“-”,则它可能是内核进程(例如,这在 NFS 中很常见),所以祝你好运找出它是什么。

注意:我说“权威”是因为您不受网络条件和防火墙的阻碍。如果您信任您的计算机,那就太好了。但是,如果您怀疑自己遭到了黑客攻击,则可能无法信任计算机上的工具。将标准实用程序(有时甚至是系统调用)替换为隐藏某些进程或端口(又名 rootkit)的实用程序是攻击者的标准做法。此时最好的办法是制作磁盘的取证副本并从备份中恢复;然后使用副本来确定他们进入的方式并将其关闭。


Cre*_*eek 15

要“关闭”您可以使用的端口 iptables

sudo iptables -A INPUT -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j DROP
Run Code Online (Sandbox Code Playgroud)

  • @Lekensteyn ICMP 端口不可达用于 UDP。要回复的正确数据包是 TCP RST 数据包,它也可以通过编写 `-j REJECT --reject-with tcp-reset` 使用 `REJECT` 目标生成。 (4认同)
  • 在这个答案中,“关闭端口”意味着“忽略到它的任何流量”。该港口仍然开放,但无法再到达。另请注意,“DROP”正如其所说,它看到数据包然后忽略它。通常(没有启用 iptables),内核会发回一个 ICMP 端口不可达数据包(可以使用“REJECT”目标而不是“DROP”来模拟)。 (2认同)

psi*_*mon 14

Linux 系统有一个所谓的环回接口,用于内部通信。它的主机名是localhost,它的 IP 地址是127.0.0.1

当您运行nmapon 时localhost,您实际上是在虚拟环回接口上运行端口扫描。192.168.1.1是您的物理(最有可能eth0)接口的 IP 地址。

所以你nmap在两个不同的网络接口上运行,这就是开放端口不同的原因。他们都是真的。

如果您打开了 TCP 端口 23,则很可能您的telnet服务器正在运行(由于缺乏加密,这不是一件好事)或者您的机器上有某种特洛伊木马。

  • @ user74080 您可以按照附近的答案建议添加“iptables”规则,但它会使服务保持未使用状态,从而消耗资源。因此,如果您正在运行“telnetd”,只需将其关闭即可。 (4认同)