什么是端口,为什么需要打开它?
端口是网络上的端点。把它想象成一扇通向特定房间或外部世界的门,但在您的计算机上。您在 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
这将打印所有侦听套接字 ( -l ) 以及端口号 ( -n )。它包括 TCP 端口 ( -t ) 以及 UDP ( -u )。如果您的系统没有netstat,只需使用具有相同参数的ss即可。
ss -lntu
如何在 Linux 中打开端口
为了这个例子,我们假设我们想要打开端口 4000 到 TCP 连接。我们首先需要确保该端口尚未在使用中。我们通过netstat或ss做到这一点。
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 系统没有ufw或firewalld,则需要使用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的连接已打开。
我们还可以使用nmap显示端口已打开。同样,如果该命令尚未安装,请使用您的包管理器来检索它。
nmap localhost -p 4000
请注意,nmap只会列出正在侦听连接的开放端口。这就是为什么我们使用 netcat 进行测试,监听那个端口。否则,端口不会注册为打开状态。
我无法连接到刚刚打开的端口,现在怎么办?
如果您执行了上述所有步骤并且无法连接到端口,请仔细检查您的输入。如果您确定您输入的所有内容均正确无误,则您可能需要重新配置网络路由器以允许流量。
由于每个网络路由器都有不同的配置屏幕,您应该查阅特定设备的支持页面或用户手册。您需要检查端口转发或端口映射设置,以及路由器可能使用的任何内置防火墙。
如何在 Linux 中永久打开端口
一旦您测试了您的开放端口并确保它工作正常,您可能希望永久更改。否则,重新启动后更改可能不会保留。如果您是 Ubuntu 用户,或者以其他方式使用ufw防火墙,则不必担心这一点。ufw规则不会在重新启动时重置。
对于防火墙用户
使用firewalld可以轻松地在重启后保留端口规则。只需将–permanent标志添加到您的初始命令中,它就会在启动时包含在您的 Linux 系统的防火墙规则中。
sudo firewall-cmd --add-port=4000/tcp --permanent
如果你还在使用 iptables
iptables防火墙要麻烦得多(也许是升级到firewalld或ufw的好理由)。要在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