介绍
在操作系统中,一个端口向特定流程或网络服务的数据包打开或关闭。
通常,端口可以识别给它们分配的特定网络服务,可以通过手动配置该服务以使用不同的端口来更改此功能,但一般来说,可以使用默认值。
第一个1024个端口(端口号码 0
至 1023
)被称为已知的端口号码,仅用于最常用的服务,其中包括SSH(端口 22
)、HTTP(端口 80
)、HTTPS(端口 443
)。
1024 以上的端口号称为 _ephemeral 端口。
- 端口号
1024
到49151
被称为 注册/用户端口. - 端口号
49152
到65535
被称为 动态/私人端口.
在本教程中,您将在Linux上打开一次性端口,因为最常见的服务使用已知的端口。
前提条件
要完成本教程,您将需要:
- 熟悉使用 终端。
列出所有开放的港口
在 Linux 上打开一个端口之前,您必须检查所有开放的端口列表,并选择一个不列在该列表中的平行端口来打开。
使用netstat
命令列出所有开放的端口,包括 TCP 和 UDP,这是网络层中最常见的数据包传输协议。
1netstat -lntu
这将打印:
- 所有 listening 接口 (
-l
) - 端口 number (
-n
) - TCP 端口 (
-t
) - UDP 端口 (
-u
)
1[secondary_label Output]
2Active Internet connections (only servers)
3Proto Recv-Q Send-Q Local Address Foreign Address State
4tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
5tcp 0 0 127.0.0.1:27017 0.0.0.0:* LISTEN
6tcp 0 0 127.0.0.1:6379 0.0.0.0:* LISTEN
7tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
8tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
9tcp6 0 0 ::1:5432 :::* LISTEN
10tcp6 0 0 ::1:6379 :::* LISTEN
11tcp6 0 0 :::22 :::* LISTEN
12udp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN
<$>[注]
**注:如果您的发行版没有netstat
,则可以使用ss
命令通过检查收听接口来显示开放的端口。
检查您是否使用ss
命令接收一致的输出,以列出具有开放端口的收听接口:
1ss -lntu
这将打印:
1[secondary_label Output]
2Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
3udp UNCONN 0 0 127.0.0.53%lo:53 0.0.0.0:*
4tcp LISTEN 0 128 127.0.0.1:5432 0.0.0.0:*
5tcp LISTEN 0 128 127.0.0.1:27017 0.0.0.0:*
6tcp LISTEN 0 128 127.0.0.1:6379 0.0.0.0:*
7tcp LISTEN 0 128 127.0.0.53%lo:53 0.0.0.0:*
8tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:*
9tcp LISTEN 0 128 [::1]:5432 0.0.0.0:*
10tcp LISTEN 0 128 [::1]:6379 0.0.0.0:*
11tcp LISTEN 0 128 [::]:22 0.0.0.0:*
这给出了大致相同的开放端口netstat
。
在 Linux 上打开端口以允许 TCP 连接
现在,打开一个关闭的端口,让它听取TCP连接。
但是,如果该端口在您的系统中没有打开,请自由选择另一个关闭的端口。
确保使用netstat
命令不使用4000
端口:
1netstat -na | grep :4000
或ss
命令:
1ss -na | grep :4000
输出必须保持空白,从而验证它目前没有使用,以便您可以手动将端口规则添加到 _system iptables 防火墙。
对于Ubuntu用户和基于UFW的系统
使用ufw
- UncomplicatedFirewall的命令行客户端。
你的命令会看起来像:
1sudo 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 和基于防火墙
的系统
使用「firewall-cmd」 - 指令行客户端为「firewalld」大门。
你的命令会看起来像:
1firewall-cmd --add-port=4000/tcp
请参阅如何设置 firewalld
为您的分发。
<$>[注] 注:
- CentOS 7/8:
为您的应用程序设置规则/为您的区域打开端口
- Rocky Linux 8/9:
为您的应用程序设置规则/为您的区域打开端口
美元
其他 Linux 发行版
使用iptables
来更改系统IPv4包过滤规则。
1iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
请参阅如何使用iptables设置防火墙为您的分发。
<$>[注] 注:
- Ubuntu 12.04:
基本防火墙
- Ubuntu 14.04:
接受其他必要的连接
美元
测试新打开的 TCP 连接端口
现在你已经成功打开了新的TCP端口,是时候测试它了。
首先,启动netcat(nc
)并在端口(-p
)4000
上听(-l
),同时将ls
的输出发送到任何连接的客户端:
1ls | nc -l -p 4000
现在,客户端在端口4000
上打开了TCP连接后,他们将收到ls
的输出。
在同一台机器上打开另一个终端会话。
打开 TCP 端口后,请使用telnet
检查 TCP 连接性. 如果命令不存在,请使用您的包管理器安装该命令。
输入您的服务器 IP 和端口号码(在本示例中‘4000’),然后运行以下命令:
1telnet localhost 4000
此命令试图在端口4000
上的localhost
上打开 TCP 连接。
您将收到类似于此的输出,表示已与听力程序建立了连接(nc
):
1[secondary_label Output]
2Trying ::1...
3Trying 127.0.0.1...
4Connected to localhost.
5Escape character is '^]'.
6while.sh
ls
的输出(在本示例中,while.sh)也被发送到客户端,表示成功的TCP连接。
使用「nmap」來檢查端口(`-p')是否開放:
1nmap localhost -p 4000
这个命令会检查开放的端口:
1[secondary_label Output]
2Starting Nmap 7.60 ( https://nmap.org ) at 2020-01-18 21:51 UTC
3Nmap scan report for localhost (127.0.0.1)
4Host is up (0.00010s latency).
5Other addresses for localhost (not scanned): ::1
6
7PORT STATE SERVICE
84000/tcp open remoteanything
9
10Nmap done: 1 IP address (1 host up) scanned in 0.25 seconds
已打开端口. 您已在 Linux 系统上成功打开新端口。
<$>[注]
注: nmap
只列出了目前有听取应用程序的开放端口。如果您不使用任何听取应用程序,如 netcat,则将显示端口 4000
作为关闭的,因为目前没有任何应用程序在该端口上听取。类似地, `telnet' 也不会工作,因为它也需要一个听取应用程序来连接。
但这只是暂时的,因为每次重新启动系统时都会重新设置这些更改。
持久规则
本文所示的方法只会暂时更新防火墙规则,直到系统关闭或重新启动,因此在重新启动后必须重复类似的步骤,以便再次打开相同的端口。
关于UFW
防火墙
ufw
规则不会在重新启动时重新设置,这是因为它被集成到启动过程中,而内核通过应用适当的配置文件来保存使用ufw
的防火墙规则。
关于消防
您将需要使用永久性
旗帜。
请参阅如何设置 firewalld
为您的分发。
<$>[注] 注:
- CentOS 7/8:
为您的应用程序设置规则
- Rocky Linux 8/9:
为您的应用程序设置规则
美元
关于iptables
您需要保存配置规则,这些教程建议iptables-persistent
。
请参阅如何使用iptables设置防火墙为您的分发。
<$>[注] 注:
- Ubuntu 12.04:
Saving Iptables Rules
- Ubuntu 14.04:
Saving your Iptables Configuration
美元
结论
在本教程中,你学会了如何在Linux上打开一个新的端口并为接入连接设置它,你还使用了netstat
,ss
,telnet
,nc
和nmap
。
继续学习 如何使用 Iptables 防火墙, 深沉浸入 Iptables 和 Netfilter 架构, 理解接口,以及 如何使用 Top, Netstat, Du 和其他工具来监控服务器资源。