介绍
A port is a communication endpoint. Within an operating system, a port is opened or closed to data packets for specific processes or network services.
通常,端口标识特定分配给它们的网络服务。这可以通过手动配置服务来使用不同的端口进行更改,但一般情况下可以使用默认设置。
前1024个端口(端口号0
到1023
)被称为众所周知的端口号,并保留用于最常用的服务。其中包括SSH(端口22
)、HTTP(端口80
)、HTTPS(端口443
)。
1024以上的端口号被称为临时端口。
- 端口号
1024
到49151
称为注册/用户端口。 - 端口号
49152
到65535
称为动态/私有端口。
在本教程中,您将在Linux上打开一个临时端口,因为最常用的服务使用众所周知的端口。
使用DigitalOcean应用平台从GitHub部署您的应用程序。让DigitalOcean专注于扩展您的应用。
先决条件
完成本教程,您需要:
- 熟悉使用终端。
列出所有打开的端口
在Linux上打开端口之前,您必须检查所有打开端口的列表,并选择一个未在该列表上的临时端口。
使用netstat
命令列出所有打开的端口,包括TCP和UDP,这是网络层中用于数据包传输的最常见协议。
- netstat -lntu
这将打印:
- 所有监听的套接字(
-l
) - 端口号码(
-n
) - TCP端口(
-t
) - UDP端口(
-u
)
OutputActive Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp6 0 0 ::1:5432 :::* LISTEN
tcp6 0 0 ::1:6379 :::* LISTEN
tcp6 0 0 :::22 :::* LISTEN
udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
注意:如果您的发行版没有netstat
,您可以使用ss
命令通过检查监听套接字来显示打开的端口。
使用ss
命令列出具有打开端口的监听套接字以验证您是否收到一致的输出:
- ss -lntu
这将打印:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port
udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*
tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
tcp LISTEN 0 128 [::1]:5432 0.0.0.0:*
tcp LISTEN 0 128 [::1]:6379 0.0.0.0:*
tcp LISTEN 0 128 [::]:22 0.0.0.0:*
这会输出几乎与netstat
相同的打开端口。
在Linux上打开端口以允许TCP连接
现在,打开一个关闭的端口并使其监听TCP连接。
在本教程中,您将打开端口4000
。但是,如果该端口在您的系统中未打开,请随意选择另一个关闭的端口。只需确保它大于1023
。
使用netstat
命令确保端口4000
未被使用:
- netstat -na | grep :4000
或使用ss
命令:
- ss -na | grep :4000
输出必须保持空白,从而验证它当前未被使用,以便您可以手动向系统iptables防火墙添加端口规则。
对于Ubuntu用户和基于ufw
的系统
使用ufw
– UncomplicatedFirewall的命令行客户端。
您的命令将类似于:
- sudo ufw allow 4000
参考如何设置ufw
防火墙设置适用于您的发行版。
注意:
- Ubuntu 14.0.4:“允许特定端口范围”
- Ubuntu 16.0.4/18.0.4/20.0.4/22.0.4: “允许其他连接/特定端口范围”
- Debian 9/10/11: “允许其他连接/特定端口范围”
对于基于 CentOS 和 firewalld
的系统
使用 firewall-cmd
– 这是 firewalld
守护程序的命令行客户端。
您的命令将类似于:
- firewall-cmd --add-port=4000/tcp
参考 如何设置 firewalld
适用于您的发行版。
注意:
- CentOS 7/8: “为您的应用程序设置规则/为您的区域打开端口”
- Rocky Linux 8/9: “为您的应用程序设置规则/为您的区域打开端口”
对于其他 Linux 发行版
使用 iptables
更改系统 IPv4 数据包过滤规则。
- iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
参考 如何使用 iptables
设置防火墙 适用于您的发行版。
注意:
- Ubuntu 12.04: “基本防火墙”
- Ubuntu 14.04: “接受其他必要的连接”
测试新打开的 TCP 连接端口
现在您已成功打开了一个新的 TCP 端口,是时候测试它了。
首先,在端口(-p
)4000
上启动 netcat(nc
)并监听(-l
),同时将ls
的输出发送到任何连接的客户端:
- ls | nc -l -p 4000
现在,当客户端在端口4000
上打开了 TCP 连接后,它们将收到ls
的输出。现在让这个会话保持不动。
在同一台机器上打开另一个终端会话。
由于您打开了一个 TCP 端口,因此使用telnet
来检查 TCP 连通性。如果命令不存在,请使用软件包管理器进行安装。
输入您的服务器 IP 和端口号(本示例中为4000
)并运行此命令:
- telnet localhost 4000
此命令尝试在localhost
上的端口4000
上打开一个 TCP 连接。
您将获得类似于此的输出,表明已与监听程序(nc
)建立了连接:
OutputTrying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.sh
ls
的输出(本示例中为while.sh
)也已发送到客户端,表明 TCP 连接成功。
使用 nmap
检查端口(-p
)是否开放:
- nmap localhost -p 4000
该命令将检查开放的端口:
OutputStarting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00010s latency).
Other addresses for localhost (not scanned): ::1
PORT STATE SERVICE
4000/tcp open remoteanything
Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
端口已经被打开。您已成功在Linux系统上打开一个新端口。
注意:nmap
仅列出当前具有监听应用程序的已打开端口。如果您不使用任何监听应用程序,例如netcat,这将显示端口 4000
为关闭,因为当前没有任何应用程序在该端口上进行监听。类似地,telnet
也不起作用,因为它还需要一个监听应用程序来绑定。这就是为什么 nc
是如此有用的工具的原因。它通过一个简单的命令模拟这样的环境。
但这只是暂时的,因为每次重新启动系统时更改都将被重置。
持久规则
本文介绍的方法将仅在系统关闭或重新启动之前暂时更新防火墙规则。因此,在重新启动后,必须重复类似的步骤才能再次打开相同的端口。
对于 ufw
防火墙
ufw
规则在重启时不会重置。这是因为它已集成到引导过程中,内核使用ufw
通过应用适当的配置文件保存防火墙规则。
对于firewalld
您需要使用--permanent
标志。
参考您的发行版的如何设置firewalld
注意:
- CentOS 7/8:“为您的应用设置规则”
- Rocky Linux 8/9:“为您的应用设置规则”
对于iptables
您需要保存配置规则。这些教程推荐使用iptables-persistent
。
参考您的发行版的如何使用iptables
设置防火墙
注意:
- Ubuntu 12.04:“保存Iptables规则”
- Ubuntu 14.04:“保存您的Iptables配置”
结论
在本教程中,您学会了如何在Linux上打开一个新的端口,并为传入连接进行设置。您还使用了netstat
、ss
、telnet
、nc
和nmap
。
继续学习,了解Iptables防火墙的工作原理、深入了解Iptables和Netfilter架构、理解套接字以及如何使用Top、Netstat、Du及其他工具监控服务器资源。
Source:
https://www.digitalocean.com/community/tutorials/opening-a-port-on-linux