背景
在linux服务器部署应用经常会出现因为端口开放而引起的无法访问问题,此类问题确认需要从客户端检查端口是否开放。
检测端口畅通方法
使用telnet ip port
可以确定是否端口畅通,例如:telnet 192.168.2.1 80
端口不通
使用netstat -ntl
命令确定此端口服务是否已启动
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
tcp6 0 0 :::3306 :::* LISTEN
tcp6 0 0 :::5355 :::* LISTEN
tcp6 0 0 :::8080 :::* LISTEN
tcp6 0 0 :::8081 :::* LISTEN
tcp6 0 0 :::8082 :::* LISTEN
tcp6 0 0 ::1:25 :::* LISTEN
tcp6 0 0 127.0.0.1:8005 :::* LISTEN
查看防火墙暴露端口
确定服务启动正常,使用命令firewall-cmd --zone=public --list-ports
查看服务器开放的端口
[root@iZ2ze5xna3is14isofzddlZ ~]# firewall-cmd --zone=public --list-ports
20/tcp 21/tcp 22/tcp 80/tcp 8888/tcp 39000-40000/tcp 3306/tcp 443/tcp
因为我这边使用nginx做了反向代理,对外开放的服务接口统一走80
和443
进来。如果此处没有使用代理服务器,暴漏的IP端口就需要开放上面应用对应的8080/8081/8082
这三个端口
防火墙端口操作
如果在查看防火墙中没有显示你需要访问的端口,则需要开放端口
常用的防火墙端口命令:
#查看防火墙某个端口是否开放
firewall-cmd --query-port=3306/tcp
#开放防火墙端口3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent
#查看防火墙状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#打开防火墙
systemctl start firewalld
#开放一段端口
firewall-cmd --zone=public --add-port=40000-45000/tcp --permanent
#查看开放的端口列表
firewall-cmd --zone=public --list-ports
其他情况
一般服务器经过以上的处理,端口就会开放,客户端访问一般不会出现其他问题,但是需要注意的是云主机(阿里云/腾讯云等云服务商提供的服务器资源)
需要在云主机的安全组配置中添加对应的安全组规则,端口访问才能通