CentOS7 firewalld开放80、443端口永久生效命令
前言
CentOS7 默认用 firewalld 管理防火墙,新装系统后外网访问 80、443 经常被拒,浏览器打不开网站。很多人只在临时会话里加规则,重启或 reload 后端口又被关。本篇给出永久开放 80、443 的完整命令和验证方法。
一、先确认防火墙状态
systemctl status firewalld
firewall-cmd --state
返回 running 表示防火墙在运行;如果是 not running,先启动并设为开机自启:
systemctl start firewalld
systemctl enable firewalld
二、永久开放80、443端口
关键是 --permanent 参数,不加它规则只在当前运行时生效,reload 或重启就丢失。
# 永久开放HTTP 80
firewall-cmd --permanent --add-port=80/tcp
# 永久开放HTTPS 443
firewall-cmd --permanent --add-port=443/tcp
# 重载使永久规则立即生效
firewall-cmd --reload
也可以用服务名方式(firewalld 自带 http/https 服务定义):
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
三、查看已开放端口,确认生效
# 查看永久规则里已开放的端口
firewall-cmd --permanent --list-ports
# 查看当前运行时生效的服务
firewall-cmd --list-services
能看到 80/tcp 443/tcp 或 http https 即成功。
四、开放单个/多个端口常用命令汇总
# 永久开放单个端口
firewall-cmd --permanent --add-port=8080/tcp
# 永久移除某个端口
firewall-cmd --permanent --remove-port=8080/tcp
# 开放一段端口范围(如30000-30100)
firewall-cmd --permanent --add-port=30000-30100/tcp
# 开放UDP(DNS、视频流用)
firewall-cmd --permanent --add-port=53/udp
每加完一条都要 firewall-cmd --reload。
五、常见坑
- 加了规则但不 reload:运行时看不到,外网照样访问不通;
- 忘记 --permanent:重启服务器后规则消失,以为没生效;
- 协议选错:Web 是 tcp,写成 udp 无效;
- 云服务器安全组没放行:系统防火墙开了,云厂商控制台安全组还拦着,两边都要开;
- 服务本身没监听:
ss -tlnp确认 nginx 在 80/443 上监听,否则放了端口也连不上。
总结
记住三步:--add-port=端口/tcp --permanent → --reload → --list-ports 验证。系统防火墙和云安全组同时放行,网站才能从外网访问。
遇到问题加QQ23979811 协助处理
CentOS7 防火墙开放端口范围,一次性开放多个端口
前言
有时候需要一次性开放很多端口,或者开放一段端口范围,一个个加太麻烦。CentOS7 的 firewalld 支持开放端口范围,也支持一次性开放多个端口,本文讲一下怎么操作。
查看当前开放的端口
先看看现在防火墙开了哪些端口:
firewall-cmd --list-ports
输出类似:
80/tcp 443/tcp 8080/tcp
开放单个端口
永久开放
firewall-cmd --permanent --add-port=80/tcp
然后重载生效:
firewall-cmd --reload
开放 UDP 端口
把 tcp 改成 udp 就行:
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --reload
一次性开放多个端口
方法一:一条命令加多个
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp --add-port=8080/tcp
firewall-cmd --reload
多个 --add-port 用空格分开就行。
方法二:开放端口范围
如果要开放一段连续的端口,比如 8000 到 9000:
firewall-cmd --permanent --add-port=8000-9000/tcp
firewall-cmd --reload
这样 8000 到 9000 之间所有 TCP 端口都开放了。
方法三:同时开放 TCP 和 UDP
firewall-cmd --permanent --add-port=53/tcp --add-port=53/udp
firewall-cmd --reload
移除端口
移除单个端口
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
移除端口范围
firewall-cmd --permanent --remove-port=8000-9000/tcp
firewall-cmd --reload
常见场景
场景1:开放 20 到 80 之间的所有端口
firewall-cmd --permanent --add-port=20-80/tcp
firewall-cmd --reload
场景2:同时开放 HTTP 和 HTTPS 服务
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
场景3:只允许某个 IP 访问某个端口
这个更安全,只允许 192.168.1.100 访问 3306 端口:
firewall-cmd --permanent --add-rich-rule="rule family='ipv4' source address='192.168.1.100' port protocol='tcp' port='3306' accept"
firewall-cmd --reload
常见坑
坑1:加了端口没生效
执行了 add-port 但还是访问不了。
原因: 没加 --permanent,或者没 reload。
解决: 一定要加 --permanent 参数,然后执行 firewall-cmd --reload。
坑2:端口范围写反了
写成了 9000-8000,报错。
原因: 范围必须从小到大写。
正确写法: 8000-9000/tcp
错误写法: 9000-8000/tcp
坑3:防火墙没启动
执行 firewall-cmd 报错。
原因: firewalld 服务没启动。
解决:
systemctl start firewalld
systemctl enable firewalld
坑4:开了端口但还是访问不了
防火墙开了端口,但是外部还是访问不了。
原因: 除了防火墙,还有可能是云服务商的安全组没开。
解决: 去云服务商控制台(阿里云、腾讯云等)的安全组里,把对应的端口也开放了。
总结
| 操作 | 命令 |
|---|---|
| 开放单个端口 | firewall-cmd --permanent --add-port=80/tcp |
| 开放多个端口 | firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp |
| 开放端口范围 | firewall-cmd --permanent --add-port=8000-9000/tcp |
| 移除端口 | firewall-cmd --permanent --remove-port=8080/tcp |
| 查看已开放端口 | firewall-cmd --list-ports |
| 重载生效 | firewall-cmd --reload |
记住:加完端口一定要 --reload 才生效。
遇到问题加QQ23979811 协助处理
CentOS7 firewalld开放80、443端口永久生效命令
前言
CentOS 7 开始,系统默认的防火墙管理工具从原来的 iptables 换成了 firewalld。很多刚接触 CentOS 7 的运维同学,部署完 Nginx 或者 Apache 之后发现网站访问不了,最后排查半天发现是防火墙没放行 80 和 443 端口。
这篇文章就详细讲讲 CentOS 7 下用 firewalld 开放 80、443 端口,并且确保重启后依然生效的完整操作步骤。
操作步骤
1. 先确认 firewalld 服务状态
在配置端口之前,先确认防火墙服务是否正在运行:
systemctl status firewalld
如果看到 active (running) 就说明防火墙正在运行。如果是 inactive 状态,说明防火墙没启动,可以先启动它:
systemctl start firewalld
systemctl enable firewalld
2. 查看当前已经开放的端口和服务
firewall-cmd --list-all
执行完之后会看到类似下面的输出:
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
从这里可以看到,默认只开放了 ssh 和 dhcpv6-client 两个服务,80 和 443 端口都没开。
3. 永久开放 80 端口
这里要注意,必须加上 --permanent 参数,否则重启服务器之后配置就丢了。
firewall-cmd --permanent --add-port=80/tcp
执行成功之后会返回 success。
4. 永久开放 443 端口
同样的方式开放 443 端口,这个是 HTTPS 默认端口:
firewall-cmd --permanent --add-port=443/tcp
5. 重载防火墙使配置生效
很多同学加完端口就以为完事了,其实不对。firewalld 有运行时配置和永久配置之分,加了 --permanent 的配置写入了永久配置,但还需要重载一下才能在当前运行时生效:
firewall-cmd --reload
6. 验证端口是否真的开放了
最后再检查一下:
firewall-cmd --list-ports
如果看到 80/tcp 和 443/tcp 都在列表里,就说明配置成功了。
常见坑
坑 1:忘记加 --permanent 参数
这是最常见的错误。如果不加 --permanent,配置只在当前运行时生效,服务器一重启就没了。很多同学配置完当时测试没问题,第二天服务器重启网站又打不开了,就是这个原因。
正确写法:firewall-cmd --permanent --add-port=80/tcp
坑 2:加完端口忘记 reload
加了 --permanent 之后,必须执行 firewall-cmd --reload 才能生效。不然你会发现配置写进去了,但端口还是不通。
坑 3:想一次性开放多个端口怎么办
如果要开放一批连续的端口,比如 1000 到 2000,可以用这个写法:
firewall-cmd --permanent --add-port=1000-2000/tcp
如果要开放多个不连续的端口,就执行多次 add-port 命令就行。
坑 4:怎么移除已经开放的端口
如果不小心开错了端口,要移除的话用 remove-port:
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
总结
CentOS 7 下 firewalld 开放端口的核心就三步:
- 用
--permanent --add-port=端口号/tcp添加永久规则 - 执行
firewall-cmd --reload重载生效 - 用
firewall-cmd --list-ports确认结果
记住这三个关键点,基本不会踩坑。Web 服务常用的 80 和 443 端口开放之后,外部才能正常访问你的网站。
遇到问题加QQ23979811 协助处理
CentOS7 firewalld开放80、443端口永久生效命令
前言
刚装好 CentOS7 服务器,部署完 Nginx 网站后,外网却访问不了?十有八九是防火墙没放行端口。CentOS7 默认用 firewalld 代替了旧版的 iptables,很多刚接触的朋友不太熟悉操作。本文就详细讲解如何在 CentOS7 上永久开放 80、443 等常用端口,以及操作中容易踩的坑。
操作步骤
1. 检查 firewalld 运行状态
首先确认防火墙服务是否正在运行:
systemctl status firewalld
如果显示 active (running) 说明防火墙已启动。如果没启动,先启动它:
systemctl start firewalld
systemctl enable firewalld
2. 查看当前已开放的端口
firewall-cmd --list-ports
这个命令会列出当前防火墙放行的所有端口。
3. 永久开放 80 端口
firewall-cmd --permanent --add-port=80/tcp
参数说明:
--permanent:永久生效,不加这个参数重启防火墙后就失效--add-port=80/tcp:开放 80 端口,协议为 TCP
4. 永久开放 443 端口
firewall-cmd --permanent --add-port=443/tcp
5. 同时开放多个端口
如果需要一次性开放多个端口,可以这样写:
firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp --add-port=8080/tcp
6. 开放端口范围
如果要开放一整段端口,比如 3000 到 4000:
firewall-cmd --permanent --add-port=3000-4000/tcp
7. 重载防火墙使配置生效
修改完规则后,必须重载才能生效:
firewall-cmd --reload
8. 验证端口是否开放成功
firewall-cmd --list-ports
如果输出里能看到 80/tcp 443/tcp 就说明开放成功了。
9. 移除开放的端口(如果需要)
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
常见坑
坑1:忘了加 --permanent 参数
很多朋友执行了 firewall-cmd --add-port=80/tcp,当时测试是通的,但重启服务器或者重启防火墙后就又不通了。原因就是没加 --permanent,这种方式只是临时生效,重启后规则丢失。
解决: 开放端口时一定要加 --permanent 参数,然后执行 firewall-cmd --reload 重载配置。
坑2:改完规则忘了 reload
执行完 --add-port 后,规则只是写入了配置文件,还没有真正生效。必须执行 firewall-cmd --reload 才能让新规则生效。
坑3:以为开放了端口就一定能访问
防火墙只是第一道关卡。如果网站还是访问不了,还要检查:
- Nginx/Apache 是否启动并监听了对应端口
- 安全组(云服务器)是否也放行了端口
- 服务器内部的应用是否正常运行
坑4:用了 iptables 命令却不生效
CentOS7 默认是 firewalld 管理防火墙,如果你用 iptables 命令添加规则,firewalld 重启后会把规则覆盖掉。要么用 firewalld 命令,要么先关掉 firewalld 再用 iptables。
总结
CentOS7 开放端口的核心命令就是三步:
firewall-cmd --permanent --add-port=端口号/tcp添加规则firewall-cmd --reload重载生效firewall-cmd --list-ports验证结果
记住 --permanent 和 --reload 这两个关键点,90% 的问题都能解决。
遇到问题加QQ23979811 协助处理