在Linux上打开端口

时间:2020-02-23 14:40:10  来源:igfitidea点击:

在学习在Linux上打开端口之前,我们先了解一下网络端口是什么。
端口是通信端点。
在操作系统内,端口允许数据包特定的进程或者网络服务。

通常,端口标识分配给它们的特定网络服务。
可以通过手动将服务配置为使用其他端口来更改此设置,但通常可以使用默认值。

前1024个端口(端口0-1023)称为众所周知的端口号,并保留用于最常用的服务,包括SSH(端口22),HTTP和HTTPS(端口80和443)等。
上面的端口号1024被称为临时端口。

在临时端口中,端口号1024-49151称为已注册/用户端口。
其余端口49152-65535称为动态/专用端口。

在本教程中,我们将展示如何在Linux上打开临时端口,因为最常用的服务使用众所周知的端口。

列出所有打开的端口

在Linux上打开端口之前,让我们首先检查所有打开的端口的列表,然后从该列表中选择一个临时端口打开。

我们可以使用netstat命令列出所有打开的端口,包括TCP,UDP的端口,这些端口是网络层中用于数据包传输的最常见协议。

注意:如果您的发行版没有netstat,那不是问题。
您可以使用ss命令通过监听套接字显示打开的端口。

netstat -lntu

这将打印所有监听套接字(-l)以及端口号(-n),同时在输出中也列出了TCP端口(-t)和UDP端口(-u)。

列出开放端口

为了确保我们获得一致的输出,让我们使用ss命令来验证此操作,以列出具有开放端口的侦听套接字。

ss -lntu

列出侦听套接字

这或者多或者少地提供了与netstat相同的开放端口,所以我们很高兴!

在Linux上打开端口以允许TCP连接

就本例而言,我们打开一个封闭的端口并使其侦听TCP连接。

由于系统中未使用端口4000,因此我选择打开端口4000。
如果您的系统中未打开该端口,请随时选择另一个关闭的端口。
只要确保它大于1023!

再次确认一下,请使用netstat或者ss命令确保未使用端口4000。

netstat -na | grep :4000

ss -na | grep :4000

输出必须保持空白,从而验证当前未使用该输出,以便我们可以将端口规则手动添加到系统iptables防火墙。

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

Ubuntu有一个名为" ufw"的防火墙,该防火墙负责处理端口和连接的这些规则,而不是旧的" iptables"防火墙。
如果您是Ubuntu用户,则可以使用ufw直接打开端口。

sudo ufw allow 4000

您可以跳过接下来的几个步骤,直接测试您新打开的端口!

对于CentOS和基于Firewalld的系统

对于这些类型的系统,如果您将firewalld'作为主要防火墙,建议您使用firewall-cmd更新防火墙规则,而不是使用旧的iptables`防火墙。

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

注意:这将在重新启动时将"防火墙"规则重置为默认值,因此,如果您要永久修改此设置,请在命令中添加" --permanent"标志。

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

您可以跳过接下来的几个步骤,直接测试您新打开的端口!

对于其他Linux发行版

因此,让我们使用" iptables"命令将此新端口添加到系统iptables规则中。

如果尚未安装此命令,请使用软件包管理器获取它。

iptables -A INPUT -p tcp --dport 4000 -j ACCEPT

这会将防火墙设置为附加新的规则(-A),以通过目标端口(-dport)为4000的协议(-p)TCP接受输入数据包,并指定目标跳转(- j)规则接受。

要更新防火墙规则,请重新启动" iptables"服务。

sudo service iptables restart

或者使用systemctl(如果有)。

sudo systemctl restart iptables

测试新打开的端口的TCP连接

现在我们已经成功打开了一个新的TCP端口(在我的情况下为Port 4000),让我们对其进行测试。

首先,我们将启动netcat(nc)并侦听端口4000,同时将ls的输出发送到任何已连接的客户端。
因此,在客户端打开端口4000上的TCP连接之后,他们将收到ls的输出。

ls | nc -l -p 4000

这使得netcat在端口4000上进行侦听。
暂时不进行此会话。

在同一台计算机上打开另一个终端会话。

由于打开了TCP端口,因此我将使用telnet来检查TCP连接。
如果该命令不存在,请再次使用程序包管理器进行安装。

telnet的格式:

telnet [hostname/IP address] [port number]

因此,输入您的服务器IP和端口号(在我的情况下为4000),然后运行此命令。

telnet localhost 4000

这试图在端口4000的localhost上打开TCP连接。

您将获得类似的输出,表明已与侦听程序(nc)建立了连接。

使用Telnet检查端口

如您所见,ls的输出(在我的情况下为while.sh)也已经发送到客户端,表明TCP连接成功!

为了告诉您端口确实是开放的,我们可以使用nmap进行检查。

nmap localhost -p 4000

检查开放端口

确实,我们的港口已经开放!我们已经在Linux系统上成功打开了一个新端口!

注意:nmap仅列出已打开的端口,这些端口具有当前正在监听的应用程序。
如果您不使用任何监听应用程序(例如netcat),则会将端口4000显示为关闭状态,因为当前没有任何应用程序在该端口上进行监听。
同样,telnet也不起作用,因为它还需要绑定监听应用程序。
这就是nc这样有用的工具的原因。
这在一个简单的命令中模拟了这种环境。

但这只是暂时的,因为更改将在每次重新引导系统时重置。

每次重启后都需要更新规则

本文介绍的方法只会临时更新防火墙规则,直到系统关闭/重新启动为止。
因此,必须重复类似的步骤才能在重新启动后再次打开同一端口。

对于ufw防火墙

ufw规则不会在重启时重置,因此,如果您是Ubuntu用户,则不必担心这部分!

这是因为它已集成到引导过程中,并且内核通过适当的配置文件使用ufw保存了防火墙规则。

对于防火墙

如前所述,"防火墙"也遭受相同的问题,但是在打开端口或者设置任何其他规则时,可以通过在初始命令后附加" --permananent"标志来避免这种情况。

例如,您可以使用以下命令永久打开TCP端口4000:

firewall-cmd --zone=public --add-port=400/tcp --permanent

对于iptables

对于" iptables"防火墙,尽管无法避免这种不便,但我们可以将麻烦降到最低。

我们可以将" iptables"规则保存到一个配置文件中,例如" /etc/iptables.conf"。

sudo iptables-save | sudo tee -a /etc/iptables.conf

重新启动后,我们可以使用以下命令从配置文件中检索它:

sudo iptables-restore < /etc/iptables.conf

现在," iptables"规则现在已更新,并且我们的端口再次打开!