在Linux RHEL/CentOS 7/8中打开端口的简单步骤

时间:2020-01-09 10:41:49  来源:igfitidea点击:

在本文中,将介绍一些示例以检查端口状态并在Linux中打开端口。
本文是在使用CentOS 8时编写的,因此可以肯定地说,它也全面介绍了CentOS/RHEL 7/8,Fedora,Oracle Enterprise Linux以及整个Red Hat操作系统家族,以及Novell的SLES和OpenSUSE。

在进入示例以在Linux中打开端口之前,我们必须清楚地了解需求。
我想到的最基本的问题

  • 我们需要打开服务端口吗?
    例如用于Apache服务的自定义端口5555?

  • 我们是否表示该端口已在侦听但已被防火墙阻止,因此我们想在防火墙中打开端口?

  • 打开一个端口用于自定义临时任务,例如使用此端口传输和接收文件,然后关闭该端口。

我们将在本文中介绍所有这些情况

检查端口状态

要检查已打开的现有端口列表,我们将使用nmap来检查端口状态:

[root@centos-8 ~]# nmap localhost Starting Nmap 7.70 ( https://nmap.org ) at 2017-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端口。
与nmap输出相比,端口总数更高。

[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,而不是相反地启动端口,即,如果我们打开端口22,它将不会自动启动SSHD服务。

让我们在示例中进行观察,我们知道在我的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打开端口,因为这是RHEL/CentOS 7和8中当今最常用的接口。

确定系统的网络接口位于哪个区域。
在以下示例中,eth0和eth1接口位于"公共"区域:

[root@centos-8 ~]# firewall-cmd --get-active-zoneslibvirt  interfaces: virbr0public  interfaces: eth0 eth1

要在区域中将防火墙永久打开,请使用--add-port选项。
下面的示例在" public"区域中永久打开TCP端口1234. 请注意,直到重新加载防火墙服务后,永久更改才会生效。

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

说明:

要进行非持久性更改,请在不设置--permanent选项的情况下发出相同的命令。
任何非永久性更改都会立即生效,并且会一直持续到重新加载防火墙为止。

防火墙打开端口后,接下来使用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",但是" NO NOT LISTENING"。
一旦请求或者服务尝试使用端口1234,我们将使其处于LISTEN状态。

使用nc或者ncat在Linux中打开端口

让我们验证一下这一理论。
在Linux中使用" nc"或者" ncat"打开端口。
" nc"或者" ncat"作为RHEL/CentOS中" nmap-ncat" rpm的一部分提供,我们可以使用yum或者dnf安装。

通过nc命令将--listen--port一起使用来打开端口。
在下面的示例中,我们打开端口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"将文件从一台主机传输到另一台主机。
其中我将输入文件从" 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开放端口