在Linux上打开端口

在学习在Linux上打开端口之前,让我们了解什么是网络端口。 端口是通信端点。 在操作系统内,端口允许数据包特定的进程或网络服务。通常,端口标识分配给它们的特定网络服务。 可以通过手动将服务配置为使用其他端口来更改此设置,但是通常可以使用默认值。

前1024个端口(端口0-1023 )称为众所周知的端口号,并保留用于最常用的服务,包括SSH(端口22),HTTP和HTTPS(端口80和443)等。端口号大于1024的被称为临时端口。 在临时端口中,端口号1024-49151称为已注册/用户端口。 其余端口49152-65535被称为动态/专用端口。

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

1 列出所有打开的端口 

在Linux上打开端口之前,让我们首先检查所有打开的端口的列表,然后从该列表中选择一个临时端口打开。 我们可以使用netstat命令列出所有打开的端口,包括TCP , UDP的端口 ,它们是网络层中用于数据包传输的最常见协议。

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

netstat -lntu
复制代码

这将打印所有侦听套接字(-l)以及端口号(-n),并且输出中还将列出TCP端口( -t )和UDP端口( -u )。

在Linux上打开端口_第1张图片

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

在Linux上打开端口_第2张图片

这提供了几乎与netstat相同的开放端口,所以我们很高兴!

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

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

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

再次,只是要确保,请使用netstatss命令确保未使用端口4000。

netstat -na | grep :4000
ss -na | grep :4000
复制代码

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

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

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

sudo ufw allow 400
复制代码

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

2.2 对于CentOS和基于Firewalld的系统

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

firewall-cmd --add-port=4000/tcp
复制代码

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

2.3 对于其他Linux发行版

因此,让我们使用iptables命令将此新端口添加到系统iptables规则中。如果尚未安装此命令,请使用软件包管理器获取它。

iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
复制代码

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

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

sudo service iptables restart
复制代码

或使用systemctl如果有)。

sudo systemctl restart iptables
复制代码

3 测试新打开的端口的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 )建立了连接。

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

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

 nmap localhost -p 4000
复制代码

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

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

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

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

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

4.1 对于ufw防火墙

ufw规则不会在重启时重置,因此,如果您是Ubuntu用户,则不必担心这部分!这是因为它已集成到引导过程中,并且内核使用ufw通过适当的配置文件保存了防火墙规则。

4.2 对于防火墙

如前所述, firewalld也存在相同的问题,但是在打开端口或设置任何其他规则时,可以通过在初始命令后附加--permananent标志来避免此问题。

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

 firewall-cmd --zone=public --add-port=400/tcp --permanent
复制代码

4.3 对于iptables

对于iptables防火墙,尽管无法避免这种不便,但我们可以将麻烦降到最低。我们可以将iptables规则保存到配置文件中,例如/etc/iptables.conf

 sudo iptables-save | sudo tee -a /etc/iptables.conf
复制代码

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

 sudo iptables-restore < /etc/iptables.conf
复制代码

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

5 结论 

在本教程中,我们向您展示了如何在Linux上打开新端口并将其设置为传入连接。


作者:abvlcy
链接:https://juejin.cn/post/6934952605227417614

你可能感兴趣的:(笔记)