firewalld 不支持原生定时失效,临时规则仅在服务运行期间有效;需借助 systemd timer 或 cron 调度 --remove-port 实现近似定时关闭,如 10 分钟后移除 8080/tcp 端口。

确认 firewalld 正在运行
临时操作的前提是 firewalld 处于活动状态:
- 检查状态:sudo systemctl status firewalld —— 显示 active (running) 才可继续
- 若未运行,启动它:sudo systemctl start firewalld(无需 enable,临时操作不依赖开机自启)
执行临时端口开放
使用 --add-port 添加运行时规则,不加 --permanent 即为临时:
- 开放 TCP 端口 8080:sudo firewall-cmd --add-port=8080/tcp
- 开放 UDP 端口 53:sudo firewall-cmd --add-port=53/udp
- 开放端口范围(如 5000–5100):sudo firewall-cmd --add-port=5000-5100/tcp
验证是否已生效
立即查看当前运行时开放的端口列表:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
- sudo firewall-cmd --list-ports —— 只显示临时添加的端口(不含永久规则)
- sudo firewall-cmd --list-all —— 查看当前 zone 的完整运行时配置,含服务、端口、富规则等
模拟“定时失效”:用 systemd timer 自动关闭
firewalld 没有内置倒计时,但可通过 systemd timer 在指定时间后执行 --remove-port:
- 创建定时器单元(例如 10 分钟后关闭 8080):
sudo systemctl edit --force --full firewalld-remove-8080.timer
内容示例:[Unit] Description=Remove port 8080 after 10 minutes [Timer] OnBootSec=10min Persistent=false [Install] WantedBy=timers.target
- 创建对应 service 文件:
sudo systemctl edit --force --full firewalld-remove-8080.service
内容示例:[Unit] Description=Remove temporary port 8080 [Service] Type=oneshot ExecStart=/usr/bin/firewall-cmd --remove-port=8080/tcp RemainAfterExit=yes
- 启用并启动定时器:
sudo systemctl daemon-reload
sudo systemctl start firewalld-remove-8080.timer










