在Linux RHEL/CentOS 7/8中打开端口的简单步骤
在本文中,将介绍一些示例以检查端口状态并在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开放端口