Linux服务器端口放行问题 ,最近在用Docker装一个应用过程中遇到服务器端口无法访问的问题,防火墙关闭了安全组也放行了,但是站长工具端口依然显示未开启,虽然最终解决了问题,但是过程真的是很曲折,百度都快百度烂了,最后发现自己坑自己,主要还是理解不够(就是太菜了 Ծ‸Ծ )下面专门记录一下,方便以后回来爬坑。

1.问题描述及解决

1.1 问题复现

我们以1234端口为例,先去阿里云后台自带的防火墙进行放行

然后在终端关闭防火墙,并确认关闭了

这时候我们使用站长之家的端口检测工具进行端口检测

这是我的一台测试服务器,所以ip直接放出来了,可以看到显示关闭

那我们再去终端开启防火墙并开放1234端口,命令依次如下

systemctl start firewalld
firewall-cmd --zone=public --add-port=1234/tcp --permanent

添加之后重启一下防火墙,使刚刚的添加生效

firewall-cmd --reload

查看所有开放的端口,确认1234添加成功

firewall-cmd --permanent --zone=public --list-ports

我们再去站长工具那边检测一下

仍然是关闭状态

1.2 解决办法

我这个时候用我另一台服务器,使用telnet命令经行端口检测,telnet安装命名

yum install telnet

telnet命令使用格式

telnet ip port

我们先来测试一个正常端口 8848

telnet 39.105.173.178 8848

站长工具也去测试一下

确认都是正常的,那么我们接着分析 1234 端口

[root@Yremp ~]# telnet 39.105.173.178  1234
Trying 39.105.173.178...
telnet: connect to address 39.105.173.178: Connection refused

Connection refused 其实就是这个端口没有被监听,再说的简单点这个端口其实已经可以访问了只不过你的服务器没有应用运行在这个端口(没有监听这个端口)

如果我们去防火墙删除对这个端口的放行

firewall-cmd --zone=public --remove-port=1234/tcp --permanent 

重启防火墙使上面的删除端口生效

firewall-cmd --reload

此时在我另一台服务器继续使用telnet命令检测1234端口

[root@Yremp ~]# telnet 39.105.173.178  1234
Trying 39.105.173.178...
telnet: connect to address 39.105.173.178: No route to host

No route to host 这个才是真正被防火墙拦截,出现这种情况就需要检查服务器后台的防火墙或者服务器本身的防火墙是否放行了目标端口,下面我们先开启这个端口的访问

此时我去docker运行一个容器监听1234端口(过程省略),完成之后再次测试

这个时候端口已经正常访问了,用站长工具进行测试

1.3 爬坑总结

尽量不要用站长工具检测端口,因为无论是防火墙拦截还是端口为被监听都是会显示端口未开启,容易误以为端口是被防火墙拦截

可以使用telnet命令检测,具体的使用上面已经演示过了,下面再贴两个图说明一下

此图像的alt属性为空
上图情况表示被防火墙拦截
此图像的alt属性为空
上图说明端口未被监听
此图像的alt属性为空
上图属于端口正常访问情况
  1. 重要的事情说三遍,不要用站长工具的端口检测!!!
  2. 重要的事情说三遍,不要用站长工具的端口检测!!!
  3. 重要的事情说三遍,不要用站长工具的端口检测!!!

2.CentOS 防火墙常用命令

CentOS7常用的防火墙命令,为什么是CentOS7是因为CentOS6和之前都是iptables,到了CentOS7变成了firewall。

2.1 查看防火墙状态:

firewall-cmd --state 

2.2 启动防火墙

systemctl start firewalld

2.3 关闭防火墙

systemctl stop firewalld

2.4 检查防火墙开放的端口

firewall-cmd --permanent --zone=public --list-ports

2.5 开放一个新的端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent

2.6 重启防火墙

firewall-cmd --reload

2.7验证新增加端口是否生效

firewall-cmd --zone=public --query-port=8080/tcp

2.8 防火墙开机自启动

systemctl enable firewalld.service

2.9 禁用防火墙开机自启动

systemctl disable firewalld.service

2.10 防火墙取消某一开放端口

firewall-cmd --zone=public --remove-port=9200/tcp --permanent 

标签云

ajax AOP Bootstrap cdn Chevereto CSS Docker Editormd GC Github Hexo IDEA JavaScript jsDeliver JS樱花特效 JVM Linux Live2D markdown Maven MyBatis MyBatis-plus MySQL Navicat Oracle Pictures QQ Sakura SEO Spring Boot Spring Cloud Spring Cloud Alibaba SpringMVC Thymeleaf Vue Web WebSocket Wechat Social WordPress Yoast SEO 代理 分页 图床 小幸运 通信原理

Linux服务器端口放行问题
Linux服务器端口放行问题