防火墙跨平台管理shell脚本(麒麟V10/CentOS/Ubuntu/macOS)快速指南

一套脚本,一键执行常见防火墙操作:查询状态、开/关、防火墙自启动、开放/关闭端口。适用于麒麟V10、CentOS、Ubuntu 和 macOS

一、脚本核心功能

运维环境中往往混合使用多个发行版,防火墙命令( firewalld / ufw / pf )差异较大。

  • 核心功能
    1. 查询防火墙状态(已开启/已关闭/不支持/未知)
    2. 查询开机自启动状态(已开启/已关闭/不支持/未知)
    3. 开启/关闭 防火墙
    4. 设置/取消 开机自动启动
    5. 永久放行端口(TCP/UDP)
    6. 列出当前已放行端口(含协议/服务)
    7. 关闭指定端口(自动删除相关规则,无需再次选择协议)

二、环境准备

1. 脚本执行环境

  • 必须用 Bash 运行(脚本首行 #!/usr/bin/env bash),不能用 sh
  • 需要 sudo 或 root 权限。

2. 各系统依赖

  • 麒麟V10 / CentOSfirewalldfirewall-cmd
sudo yum install -y firewalld
sudo systemctl start firewalld
sudo systemctl enable firewalld
  • Ubuntuufw
sudo apt update
sudo apt install -y ufw
sudo ufw enable
  • macOS:自带应用防火墙(socketfilterfw)和 Packet Filter(pf,配置文件 /etc/pf.conf

3. 工具支持

  • timeout(大多数 Linux 已预装;如无则安装 coreutils)。
  • 如脚本从 Windows 编辑后出现奇怪卡顿,执行:
dos2unix firewall_manager.sh

三、脚本核心思路

1. 跨平台检测

if [ "$(uname)" = "Darwin" ]; then
  OS_TYPE="macos"
  elif [ -f /etc/os-release ]; then
    . /etc/os-release
    case "$ID" in
    kylin|kylin10|kylinv10) OS_TYPE="kylin" ;;
    centos)               OS_TYPE="centos" ;;
    ubuntu)               OS_TYPE="ubuntu" ;;
   *)                    OS_TYPE="unknown" ;;
     esac
   else
     OS_TYPE="unknown"
   fi

2. 状态获取统一用 timeout 防卡死

  • firewalld:
STATE="$(timeout 3s firewall-cmd --state 2>/dev/null || echo "timeout")"
  • ufw:
STATUS_UFW="$(timeout 3s ufw status 2>/dev/null | head -n1 || echo "timeout")"
  • systemctl is-enabled:
EN="$(timeout 2s systemctl is-enabled ufw 2>/dev/null || echo "timeout")"
  • macOS 直接用 socketfilterfw --getglobalstate 查询 “State = 1/0”。

3. 端口关闭自动化(Ubuntu 下避免交互确认卡住):

   while true; do
     NUM="$(ufw status numbered | grep "${PORT}/" | head -n1 | sed -n 's/^\[ *\([0-9]\+\)\].*/\1/p')"
     [ -z "$NUM" ] && break
     yes | ufw delete "$NUM" >/dev/null
   done

4. macOS pf 规则操作

  • 备份 /etc/pf.conf
cp /etc/pf.conf /etc/pf.conf.bak_$(date +%F_%T)
  • 新增:
echo "pass in proto tcp from any to any port 8080" >> /etc/pf.conf
pfctl -f /etc/pf.conf
  • 删除:
sed -i.bak "/port[[:space:]]*8080/d" /etc/pf.conf
pfctl -f /etc/pf.conf

四、使用步骤

1. 保存脚本并赋可执行权限

vim firewall_manager.sh
# 粘贴下方“完整脚本”内容并保存
chmod +x firewall_manager.sh

2. (如有 Windows 换行)转换格式

dos2unix firewall_manager.sh

3. 启动脚本(务必用 Bash)

sudo bash firewall_manager.sh

或者

./firewall_manager.sh

4. 交互示例

  • 运行后菜单显示:


五、完整脚本(复制即用)

#!/usr/bin/env bash
#
# 文件名:firewall_manager.sh
# 说明:跨平台(麒麟V10、CentOS、Ubuntu、macOS)防火墙管理脚本
#
# 功能:
#   1. 显示防火墙状态(已开启/已关闭/不支持/未知)
#   2. 显示开机自启动状态(已开启/已关闭/不支持/未知)
#   3. 开启/关闭 防火墙
#   4. 设置/取消 开机自启动
#   5. 永久放行端口(TCP/UDP)
#   6. 查看已开放端口(数字+协议/服务)
#   7. 关闭指定端口(自动删除,非交互式)
#
# 注意:
#   - 必须用 Bash 运行,不要用 sh:
#       chmod +x firewall_manager.sh
#       sudo bash firewall_manager.sh
#   - 需 root 或 sudo 权限
#   - 使用 timeout 防止命令卡住
#   - Ubuntu 下 ufw delete 由 yes 自动确认

# --------------------- 判断操作系统 ---------------------
OS_TYPE=""
if [ "$(uname)" = "Darwin" ]; then
  OS_TYPE="macos"
elif [ -f /etc/os-release 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安全日记pro

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值