简介:由于不了解端口工作的方式,导致在想要实践telnet ip 80时一直被报telnet: Unable to connect to remote host: Connection refused,在解决问题的过程中又一直在防火墙放行处原地转圈圈导致自己浪费了很长时间,遂梳理一份自己解决问题的可行方案,并总结一下此过程学到的关于端口和服务的琐碎知识点。

解决方案写在最前面,(以80端口为例子,80端口是http服务默认的端口)

首先,要检查端口监听状态netstat -lnpt此时还没有监听80端口

centos监听80端口 linux监听80端口的命令_Apache

如果发现所需端口未被监听LISTENING,那么首先需要做的就是启动一个进程去监听它,而不是去设置防火墙(iptables, firewall-cmd).
我想要监听的是80端口,80是http服务的默认端口,打开http配置文件vim /etc/httpd/conf/httpd.conf可以看到默认的监听端口就是80

33 #
 34 # Listen: Allows you to bind Apache to specific IP addresses and/or
 35 # ports, instead of the default. See also the 
 36 # directive.
 37 #
 38 # Change this to Listen on specific IP addresses as shown below to
 39 # prevent Apache from glomming onto all bound IP addresses.
 40 #
 41 #Listen 12.34.56.78:80
 42 Listen 80
 43 #

于是问题首先就是要启动http服务

查看http服务状态
systemctl status httpd

centos监听80端口 linux监听80端口的命令_linux_02

启动服务
systemctl start httpd 再次查看http服务状态
systemctl status httpd

centos监听80端口 linux监听80端口的命令_centos监听80端口_03

此时再去查看端口监听情况netstat -lntp

centos监听80端口 linux监听80端口的命令_Apache_04


发现已经有了80端口的监听情况,接下来才是去配置防火墙放行该端口,这部分教程遍地都是,此处仅简记命令

#开放及关闭30007端口,并重启防火墙firewalld
firewall-cmd --zone=public --add-port=30007/tcp --permanent # 开放30007端口
firewall-cmd --zone=public --remove-port=30007/tcp --permanent #关闭30007端口
firewall-cmd --reload # 配置立即生效
#查看防火墙所有开放的端口
firewall-cmd --zone=public --list-ports #查看防火墙所有开放的端口
firewall-cmd --list-ports #如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
systemctl stop firewalld.service #开机启动防⽕墙
systemctl enable firewalld #禁止开机启动防⽕墙
systemctl disable firewalld #启动防⽕墙
systemctl start firewalld #关闭防⽕墙
systemctl stop firewalld #查看防火墙状态
firewall-cmd --state

我的情况是端口未监听,还可能遇到另一种情形,就是端口被占用,可以使用以下方式找到对应进程,杀死进程释放端口

#检查端口被哪个进程占用
netstat -lnpt |grep 5672 #查看进程详情(端口号)
ps 6832 #查看进程详情(应用程序名)
ps -ef|grep XXX #应用程序名
#杀死进程(进程号)
kill -9 26531 #进程号

吃一堑长一智,重新认识一下端口和监听

systemctl list-units --type=service | grep httpd 查看某服务是否启动
后面自己理解消化后会输出在这里
https://zhuanlan.zhihu.com/p/20365900