在学习在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
)。
为了确保我们获得一致的输出,让我们使用ss
命令来验证这一点,以列出具有开放端口的侦听套接字。
这提供了几乎与netstat
相同的开放端口,所以我们很高兴!
2 在Linux上打开端口以允许TCP连接
就本例而言,我们打开一个封闭的端口并使其侦听TCP连接。
由于系统中未使用端口4000 ,因此我选择打开端口4000 。 如果您的系统中该端口未打开,请随时选择另一个关闭的端口。 只要确保它大于1023即可 !
再次,只是要确保,请使用netstat
或ss
命令确保未使用端口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