介绍
端口是通信的端点。在操作系统中,端口会打开或关闭,以允许特定进程或网络服务的数据包通过。.
通常,端口用于标识分配给它的特定网络服务。虽然可以通过手动配置服务来更改端口,但通常情况下,可以使用默认设置。.
前 1024 个端口(端口号 0 到 1023)被称为常用端口号,保留给最常用的服务。这些服务包括 SSH(端口 22)、HTTP(端口 80)和 HTTPS(端口 443)。.
端口号大于 1024 的端口称为临时端口。.
- 端口 1024 到 49151 称为注册/用户端口。.
- 端口 49152 至 65535 称为动态/私有端口。.
在本教程中,您将在 Linux 中打开一个临时端口,因为大多数常用服务都使用众所周知的端口。.
先决条件
- 熟悉终端的使用
所有开放端口列表
在 Linux 中打开端口之前,您应该检查所有已打开端口的列表,并选择一个不在列表中的临时端口来打开。.
使用 netstat 命令列出所有打开的端口,包括 TCP 和 UDP,它们是网络层数据包传输最常用的协议。.
netstat -lntu这将打印:
- 所有监听套接字(-l)
- 端口号(-n)
- TCP端口(-t)
- UDP端口(-u)
Output
Active 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使用 ss 命令列出已打开端口的监听套接字,验证是否获得一致的输出:
ss -lntu这将打印:
Output
Netid 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 – 一款命令行客户端,可轻松配置防火墙。.
您的命令类似于:
sudo ufw allow 4000适用于 CentOS 和基于防火墙的系统
使用 firewall-cmd – firewalld 守护进程的命令行客户端。.
您的命令类似于:
firewall-cmd --add-port=4000/tcp对于其他Linux发行版
使用 iptables 修改系统的 IPv4 数据包过滤规则。.
iptables -A INPUT -p tcp --dport 4000 -j ACCEPT测试新打开的端口是否支持 TCP 连接
既然您已经成功打开了一个新的 TCP 端口,现在是时候进行测试了。.
首先,启动 netcat (nc) 并监听 (-l) 端口 (-p) 4000,同时将 ls 命令的输出发送给每个已连接的客户端:
ls | nc -l -p 4000现在,当客户端在 4000 端口上打开 TCP 连接后,它将收到 ls 命令的输出。暂时离开此会话。.
在同一设备上打开另一个终端会话。.
既然你已经打开了 TCP 端口,请使用 telnet 命令检查 TCP 连接。如果该命令不存在,请使用软件包管理器安装它。.
输入您的服务器 IP 地址和端口号(本例中为 4000),然后运行以下命令:
telnet localhost 4000此命令尝试在本地主机的 4000 端口上打开 TCP 连接。.
您将收到类似这样的输出,表明已与监听程序 (nc) 建立连接:
Output
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
while.shls 命令(在本例中为 while.sh)的输出也会发送到客户端,表明 TCP 连接成功。.
使用 nmap 检查端口是否打开(-p):
nmap localhost -p 4000此命令检查开放端口:
Output
Starting 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 系统上打开一个新端口。.
但这只是暂时的,因为每次重启系统后,这些更改都会被重置。.
可持续发展规则
本文介绍的方法仅临时更新防火墙规则,直至系统关闭或重启。因此,重启后必须重复相同的步骤才能重新打开同一端口。.
对于 ufw 防火墙
ufw 规则不会在重启后重置。这是因为 ufw 已集成到启动过程中,内核会通过应用相应的配置文件来存储使用 ufw 的防火墙规则。.
防火墙
如果要将端口添加到永久防火墙配置中并立即应用更改,可以使用 --permanent 和 --reload 标志:
sudo firewall-cmd --permanent --add-port=4000/tcp
sudo firewall-cmd --reload对于 iptables
您需要保存配置规则并使用 iptables-persistent 命令。.
结果
在本教程中,您学习了如何在Linux中打开一个新端口并配置它以接受传入连接。您还使用了netstat、ss、telnet、nc和nmap等工具。.









