在 Linux RHEL/CentOS 7/8 中开放端口

在本文中,我们将分析如何在 Linux 中检查端口状态和打开端口。本文是基于 CentOS 8 系统编写的,因此它适用于 CentOS/RHEL 7/8、Fedora、Oracle Enterprise Linux 以及整个 Red Hat 系列操作系统。

检查 Linux 端口状态

要查看已打开的端口列表,可以使用 nmap 来检查端口状态:

[root@centos-8 ~]# nmap localhost
 Starting Nmap 7.70 ( https://nmap.org ) at 2020-03-22 12:08 IST
 Nmap scan report for localhost (127.0.0.1)
 Host is up (0.000024s latency).
 Other addresses for localhost (not scanned): ::1
 Not shown: 998 closed ports
 PORT    STATE SERVICE
 22/tcp  open  ssh
 111/tcp open  rpcbind
 Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds

可以看到上图中的 CentOS 8 只打开了两个端口。

检查监听端口列表

可以使用 netstat 列出处于监听状态的 TCP 端口。

[root@centos-8 ~]# netstat -ntlp
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1627/dnsmasq
 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      26893/sshd
 tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
 tcp6       0      0 :::22                   :::*                    LISTEN      26893/sshd
 tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd

为某些服务打开端口

当我们打开某项服务时,该服务将打开对应端口。例如,当启动 SSHD 服务时,默认情况下它将启动 22 端口。

在之前的内容中,我们知道在示例 CENTOS 8 上已经开启了 22 端口。如果我们停止 sshd 服务:

[root@centos-8 ~]# systemctl stop sshd

当再次检查端口运行状态时,22 端口已经关闭:

[root@centos-8 ~]# netstat -ntlp
 Active Internet connections (only servers)
 Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
 tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1627/dnsmasq
 tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
 tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd

可以使用相应服务的配置文件来更改默认端口。完成后重新启动服务,便会自动打开 Linux 上相应的端口。如果要为服务使用自定义端口,那么还应该将其添加到/etc/services

防火墙开放端口

您的端口也可能在防火墙中被禁用。如果您的端口未在其中列出,nmap则很可能已被防火墙阻止。

我们可以使用 firewalld 命令设置防火墙打开端口。先确定系统的网络接口位于哪个区域。在以下示例中,eth0 和 eth1 接口位于“公共”区:

[root@centos-8 ~]# firewall-cmd --get-active-zones
libvirt
  interfaces: virbr0
public
  interfaces: eth0 eth1

要在防火墙中永久打开某个端口,请使用 --add-port 选项。下面的示例在“公共”区域中永久打开 TCP 端口 1234。请注意,更改后要重新加载 firewalld 服务,否则更改不会生效。

[root@centos-8 ~]# firewall-cmd --zone=public --add-port=1234/tcp --permanent
success

[root@centos-8 ~]# firewall-cmd --reload
success

如果不想永久开放,需把 --permanent 去掉。暂时性开放更改将立即生效,并将持续到重新加载防火墙。

一旦通过 firewalld 打开端口,接下来可以使用 netstat 检查端口状态:

[root@centos-8 ~]# netstat -ntlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1627/dnsmasq
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      28188/sshd
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd
tcp6       0      0 :::22                   :::*                    LISTEN      28188/sshd
tcp6       0      0 :::111                  :::*                    LISTEN      1/systemd

我们在这里看不到端口 1234。这是因为当前端口 1234 未绑定到任何服务。该端口是处于 OPEN 状态,但是 NOT LISTENING 的。一旦某项请求或服务尝试使用 1234 端口,就会将其置于 LISTEN 状态。

使用 nc 或 ncat 打开一个端口

让我们验证一下,使用 ncncat 在 Linux 中打开一个端口,可以使用 yum 或 dnf 安装它们。使用 nc 命令打开 1234 端口。

[root@centos-8 ~]# nc --listen --source-port 1234

打开另一个终端检查该端口状态:

[root@centos-8 ~]# netstat -ntlp | grep 1234
 tcp         0 0 0.0.0.0: 1234            0.0.0.0:* LISTEN 28983/nc
 tcp6       0 0 ::: 1234                 :::* LISTEN 28983/nc

如上所示,端口 1234 正在侦听 IPv4 和 IPv6。要仅使用 IPv4 ,请在上述命令中使用 -4

[root@centos-8 ~]# nc --listen --source-port 1234 -4

然后在另一个终端上,检查端口 1234 的状态:

[root@centos-8 ~]# netstat -ntlp | grep 1234
tcp 0 0 0.0.0.0:1234 0.0.0.0:* LISTEN 29329/nc

使用 nc 或 ncat 打开端口并传输文件

我们还可以使用 nc 将文件从一台主机传输到另一台主机。在这里,我将把“ inputfile”从 centos-8 转移到 rhel-8 客户端上,我们将打开一个随机端口,这里我们使用 9899。

[root@rhel-8 ~]# ncat --verbose --listen 9899 > outputfile
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Listening on :::9899
Ncat: Listening on 0.0.0.0:9899
Ncat: Connection from 192.168.43.250.
Ncat: Connection from 192.168.43.250:40242.

接下来开始传输,使用以下命令:

[root@centos-8 ~]# ncat --verbose 192.168.43.157 9899 < inputfile
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.43.157:9899.
Ncat: 19 bytes sent, 0 bytes received in 0.01 seconds.

如果遇到任何问题,可以检查服务器和客户端之间的防火墙。可能是相应的端口被阻止了,必须使用 firewalld 命令开放端口。

扩展阅读:

作者:牛奇网,本站文章均为辛苦原创,在此严正声明,本站内容严禁采集转载,面斥不雅请好自为之,本文网址:https://www.niuqi360.com/linux/open-a-port-in-linux-centos/

(0)
上一篇 2022年3月29日 上午9:21
下一篇 2022年3月29日 下午7:48

相关推荐

发表评论

登录后才能评论