如何在 Linux 中打开端口

什么是端口,为什么需要打开它?

端口是网络上的端点。把它想象成一扇通向特定房间或外部世界的门,但在您的计算机上。您在 Internet 上所做的一切都使用特定端口或一系列端口。

例如,假设您想运行自己的 Minecraft 服务器。为此,您需要打开一个端口供用户连接到它。这同样适用于运行您自己的 Web、邮件或 FTP 服务器。

所有联网设备的端口都是标准化的。前 1,024 个端口(从 0 到 1023)称为众所周知的端口号。它们是为最常用的服务保留的,例如 HTTP 和 HTTP(分别为 80 和 443 端口)和 SSH(22 端口)。

1024 以上的端口号称为临时端口,通常可供您用于在线游戏、私人 Web 服务器等。端口号 1024 到 49151 称为注册端口或用户端口,而从 49152 到 65535 的端口号称为动态端口或私有端口。

列出 Linux 上的开放端口

在你开始尝试在 Linux 上打开一个端口之前,你应该确保它没有被使用。您可以使用大多数 Linux 发行版中包含的netstat命令来完成此操作。如果您的发行版没有netstat,则可以使用ss代替。

netstat -lntu

netstat-lntu-output

这将打印所有侦听套接字 ( -l ) 以及端口号 ( -n )。它包括 TCP 端口 ( -t ) 以及 UDP ( -u )。如果您的系统没有netstat,只需使用具有相同参数的ss即可。

ss -lntu

ss-lntu-output

如何在 Linux 中打开端口

为了这个例子,我们假设我们想要打开端口 4000 到 TCP 连接。我们首先需要确保该端口尚未在使用中。我们通过netstatss做到这一点。

netstat -na | grep :4000
ss -na | grep :4000

假设输出为空白,我们可以将适当的端口规则添加到系统的防火墙中。此方法将根据您的发行版以及它是否使用较新的ufw firewall 或firewalld而有所不同。Ubuntu 偏爱 ufw,而CentOS 通常使用 firewalld代替。当然,仍有一些 Linux 发行版使用较旧的iptables防火墙。

对于 Ubuntu 用户和其他基于 ufw 防火墙的系统

Ubuntu 和其他一些发行版没有使用旧的iptables防火墙,而是使用ufw。在这些系统下,以下命令将打开端口。

sudo ufw allow 4000

跳过接下来的几个步骤,并测试您新打开的端口以确保其正常工作。

如何使用 CentOS 和其他基于防火墙的系统在 Linux 中打开端口

如果您的系统使用firewalld,最好的办法是使用firewall-cmd命令更新规则。

sudo firewall-cmd --add-port=4000/tcp

这不会是永久性更改,但我们将介绍如何在测试端口后重新启动后使规则保持不变。

对于其他 Linux 发行版

如果您的 Linux 系统没有ufwfirewalld,则需要使用iptables。如果尚未安装,请继续使用您选择的包管理器获取它。安装后,此命令将打开端口 4000:

sudo iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
sudo service iptables restart

如果您的系统使用systemctl,请将第二个命令替换为:

sudo systemctl restart iptables

测试新打开的端口以进行连接

接下来,我们应该测试端口以确保它接受连接。我们通过使用 netcat ( nc ) 来监听端口,然后尝试 telnet 到它。

首先,打开一个终端窗口并发出以下命令:

sudo ls | nc -l -p 4000

让它运行(监听)并打开第二个终端窗口。在该窗口中,您将使用 telnet 测试连接性。如果未安装 telnet,请使用包管理器进行安装。

telnet [hostname/IP address] [port number]

[hostname/IP address]替换为您系统的 IP 地址,将[port number]替换为您打开的端口号。

telnet localhost 4000

您应该会看到如下所示的输出,表明与nc的连接已打开。

telnet-output

我们还可以使用nmap显示端口已打开。同样,如果该命令尚未安装,请使用您的包管理器来检索它。

nmap localhost -p 4000

nmap-output

请注意,nmap只会列出正在侦听连接的开放端口。这就是为什么我们使用 netcat 进行测试,监听那个端口。否则,端口不会注册为打开状态。

我无法连接到刚刚打开的端口,现在怎么办?

如果您执行了上述所有步骤并且无法连接到端口,请仔细检查您的输入。如果您确定您输入的所有内容均正确无误,则您可能需要重新配置网络路由器以允许流量。

由于每个网络路由器都有不同的配置屏幕,您应该查阅特定设备的支持页面或用户手册。您需要检查端口转发或端口映射设置,以及路由器可能使用的任何内置防火墙。

如何在 Linux 中永久打开端口

一旦您测试了您的开放端口并确保它工作正常,您可能希望永久更改。否则,重新启动后更改可能不会保留。如果您是 Ubuntu 用户,或者以其他方式使用ufw防火墙,则不必担心这一点。ufw规则不会在重新启动时重置。

对于防火墙用户

使用firewalld可以轻松地在重启后保留端口规则。只需将–permanent标志添加到您的初始命令中,它就会在启动时包含在您的 Linux 系统的防火墙规则中。

sudo firewall-cmd --add-port=4000/tcp --permanent

如果你还在使用 iptables

iptables防火墙要麻烦得多(也许是升级到firewalldufw的好理由)。要在iptables中“永久”打开一个端口,您可以安装iptables-persistent包来提供帮助。

当您第一次在基于 Debian 的系统上安装iptables-persistent时,它会将您当前的规则保存到/etc/iptables/rules.v4/etc/iptables/rules.v6中。要添加新规则,您将发出以下命令:

sudo iptables-save > /etc/iptables/rules.v4

要么

sudo iptables-save > /etc/iptables/rules.v6

对于那些运行基于 RPM 的 Linux 发行版的人来说,情况有些不同。该包名为iptables-services,保存文件为/etc/sysconfig/iptables/etc/sysconfig/ip6tables

在基于 RPM 的发行版上,还有一个用于 IPv6 端口的不同命令。使用以下两个命令之一来保存规则:

sudo iptables-save > /etc/sysconfig/iptables
sudo ip6tables-save > /etc/sysconfig/iptables

确保监控您的端口使用情况

随着时间的推移,您的服务器需求可能会发生变化。正如您应该了解Linux 机器上的用户帐户一样,您还应该定期审核您的开放端口。关闭不再需要的所有开放端口。除了定期更改密码外,这是一种很好的安全做法,可以帮助您避免系统入侵和安全漏洞。

原创文章,作者:校长,如若转载,请注明出处:https://www.yundongfang.com/Yun135682.html

(0)
打赏 微信扫一扫不于多少! 微信扫一扫不于多少! 支付宝扫一扫礼轻情意重 支付宝扫一扫礼轻情意重
上一篇 2022年3月3日 上午10:23
下一篇 2022年3月9日 上午9:40

相关推荐