当前位置:首页 > 探索

centos防火墙开放端口

CentOS防火墙的防火放端端口开放,核心就一条命令:firewall-cmd --add-port=8080/tcp --permanent,墙开然后firewall-cmd --reload。防火放端但这条命令背后藏着不少坑,墙开我见过太多人栽在“端口明明加了,防火放端外部还是墙开连不上”的怪圈里。

先说说为什么你加了端口不生效。防火放端CentOS 7以上默认用的墙开是firewalld,不是防火放端老掉牙的iptables。很多人还在用service iptables stop那种老办法,墙开结果防火墙压根没停,防火放端只是墙开把规则表清空了,重启后又恢复原样。防火放端真正要做的墙开,是防火放端确认firewalld在运行:systemctl status firewalld。如果显示inactive,直接systemctl start firewalld,再设个开机自启systemctl enable firewalld。

接下来是端口操作的具体细节。临时开放和永久开放是两码事。你敲firewall-cmd --add-port=8080/tcp不加--permanent,马上生效,但服务器一重启就丢了。加了--permanent,规则写进配置文件,但不会立刻生效,必须reload。我习惯两条一起用:先临时加,测试通了,再永久加,最后reload。这样即使中间出问题,也不会把自己锁在外面。

有个场景特别容易踩雷:你开放了端口,但服务监听的是127.0.0.1。比如MySQL默认绑在localhost,你防火墙放行3306,外部照样连不上。这不是防火墙的锅,是服务本身没监听外部接口。检查一下ss -tlnp,看看端口是不是绑在0.0.0.0或者具体IP上。如果是127.0.0.1,改配置文件里的bind-address,重启服务。

再说说端口范围的开放。有时候你要开一堆端口,比如游戏服务器需要10000-10100,别一个个加,firewall-cmd --add-port=10000-10100/tcp,一条搞定。同样记得带--permanent。还有UDP和TCP的区别,很多新手只开TCP,结果DNS或某些语音服务走UDP,照样连不通。判断协议类型,用netstat -lunp看UDP监听,别一股脑全开TCP。

最后提个实际案例。我帮朋友调一个Web服务,端口开了,reload了,但外网就是访问不了。折腾半天,发现是云服务商的安全组规则没放行。阿里云、腾讯云这些,除了服务器内部的防火墙,还有一层安全组在拦你。那层规则在网页控制台里配,跟系统防火墙完全无关。你本地怎么敲命令都没用,得去云控制台把端口加上。这个坑,比防火墙本身更隐蔽。

顺便说一句,查看当前所有开放端口,用firewall-cmd --list-ports。如果看到一堆乱七八糟的旧规则,别客气,firewall-cmd --remove-port=旧端口/tcp --permanent删掉,再reload。保持规则干净,排查问题能省一半时间。

分享到: