网站首页 > 技术教程 正文
Linux防火墙脚本使用说明
一、脚本概述
firewalld 管理脚本是一款用于简化 firewalld 防火墙管理的工具。它通过提供一个交互式菜单,使用户能够方便地执行启动、停止 firewalld 服务、查看监听端口、开放或关闭端口、查看当前规则以及批量删除所有 rich rules 等操作,同时将操作日志记录到指定文件中,便于后续查看和审计。
二、脚本使用方法
- 脚本运行环境
- 本脚本适用于安装有 firewalld 防火墙的 Linux 系统,且需要以 root 用户权限运行,因为 firewalld 的相关操作通常需要管理员权限。
- 脚本文件位置
- 将脚本文件(firewalld_manage.sh)保存到系统中的合适位置,例如 /root/ 或其他具有适当权限的目录。
- 运行脚本
- 打开终端,切换到脚本所在目录,然后使用以下命令运行脚本:
bash firewalld_manage.sh
三、脚本功能详细说明
1. 启动 firewalld(选项 1)
- 功能描述 :启动系统中的 firewalld 服务。
- 操作步骤 :在脚本主菜单中选择选项 1,脚本会调用 systemctl 命令尝试启动 firewalld 服务,并根据执行结果输出相应的成功或失败信息,同时将操作记录写入日志文件。
2. 停止 firewalld(选项 2)
- 功能描述 :停止系统中正在运行的 firewalld 服务。
- 操作步骤 :在主菜单中选择选项 2,脚本执行 systemctl stop 命令来停止 firewalld 服务,根据执行结果反馈操作状态,并记录日志。
3. 查看监听端口(选项 3)
- 功能描述 :显示系统当前正在监听的所有端口信息,包括端口号、协议类型、状态等,帮助用户了解当前网络连接情况。
- 操作步骤 :选择主菜单中的选项 3,脚本将调用 ss -tuln 命令,并以黄色高亮显示 “当前监听端口” 标题,然后输出端口监听信息。
4. 开放端口(选项 4)
- 功能描述 :根据用户输入的端口号、源 IP 地址(可选)和协议类型,在 firewalld 中添加相应的规则以开放指定端口的访问权限。
- 操作步骤 :在主菜单中选择选项 4,脚本提示用户输入要开放的端口,可以是单个端口或用逗号分隔的多个端口,例如 80,443,8080。接着输入允许访问的源 IP 地址,若留空则表示对所有 IP 开放该端口;若需要指定多个 IP,则用逗号分隔。选择协议类型,默认为 tcp,也可以输入 udp。脚本会根据输入信息,使用 firewall-cmd 命令添加相应的 rich rule 规则到 firewalld 的永久配置中,并输出每个端口规则添加的结果。最后,脚本自动重新加载 firewalld 规则,使更改生效,并提示重新加载是否成功。
5. 关闭端口(选项 5)
- 功能描述 :关闭之前通过脚本开放的端口,即从 firewalld 的规则中移除相应的 rich rule 规则,限制对指定端口的访问。
- 操作步骤 :在主菜单中选择选项 5,输入要关闭的端口号,可输入单个或多个用逗号分隔的端口。输入对应的源 IP 地址,若之前开放该端口时未指定源 IP,则此处留空;若需要关闭多个 IP 对该端口的访问,则用逗号分隔输入。脚本会根据输入信息,构造对应的 firewall-cmd 命令来移除相应的 rich rule 规则,并输出每个端口规则移除的结果。重新加载 firewalld 规则,使关闭端口的操作生效,并提示用户。
6. 查看当前 firewalld 规则(选项 6)
- 功能描述 :显示当前 firewalld 的所有配置,信息包括激活的区域、接口、服务、端口、rich rules 等,方便用户查看当前的防火墙策略设置。
- 操作步骤 :在主菜单中选择选项 6,脚本执行 firewall-cmd --list-all 命令,并以黄色高亮显示 “当前 firewalld 规则” 标题,然后输出详细的规则信息。
7. 批量删除所有 rich rules(选项 7)
- 功能描述 :一次性删除 firewalld 中所有已配置的 rich rules 规则,用于快速清理复杂的规则设置,恢复到较为简单的防火墙状态。
- 操作步骤 :在主菜单中选择选项 7,脚本会先检查当前是否存在 rich rules 规则。如果存在,脚本会逐条读取这些规则,并使用 firewall-cmd 命令将它们从永久配置中移除,同时记录每条规则删除的结果。删除完成后,重新加载 firewalld 规则,使配置变更生效,并提示用户操作是否成功。
8. 退出脚本(选项 8)
- 功能描述 :结束脚本的运行,返回到终端命令行界面。
- 操作步骤 :在主菜单中选择选项 8,脚本输出 “再见!” 的提示信息后退出。
四、脚本日志记录
- 脚本在执行过程中会将所有操作信息记录到日志文件中,默认日志文件路径为 /var/log/firewalld-script.log。
- 每条日志记录包含操作执行的时间戳以及具体的操作描述和结果,方便用户后续查看历史操作记录,进行问题排查或审计工作。
五、注意事项
- 由于脚本涉及对系统防火墙规则的修改,操作时应谨慎,确保输入的参数正确,避免因误操作导致系统无法正常访问或出现安全漏洞。
- 在开放端口时,应遵循最小权限原则,只开放必要的端口和服务,并尽量限制允许访问的源 IP 范围,以降低安全风险。
- 如果在脚本运行过程中遇到问题,可以查看日志文件中的详细信息,帮助定位和解决问题。
- 脚本的使用和修改应符合所在组织或系统的安全策略和规定,未经授权不得随意更改防火墙配置。
六、完整脚本
#!/bin/bash
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
NC='\033[0m' # 清除颜色
log_file="/var/log/firewalld-script.log"
function log() {
echo -e "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$log_file"
}
function start_firewalld() {
systemctl start firewalld && log "${GREEN} firewalld 已启动${NC}" || log "${RED} 启动 firewalld 失败${NC}"
}
function stop_firewalld() {
systemctl stop firewalld && log "${GREEN} firewalld 已停止${NC}" || log "${RED} 停止 firewalld 失败${NC}"
}
function show_ports() {
echo -e "${YELLOW} 当前监听端口:${NC}"
ss -tuln
}
function open_ports() {
read -p " 你可以输入多个端口用逗号隔开,如 80,443,8080
请输入要开放的端口: " ports
read -p "请输入要开放的IP(多个用逗号分隔): " ips
read -p "请选择协议 (tcp/udp,默认 tcp): " proto
[[ -z "$proto" ]] && proto="tcp"
IFS=',' read -ra port_list <<< "$ports"
IFS=',' read -ra ip_list <<< "$ips"
for port in "${port_list[@]}"; do
if [[ -z "$ips" ]]; then
firewall-cmd --permanent --add-rich-rule="rule family=\"ipv4\" port port=\"$port\" protocol=\"$proto\" accept"
log "${GREEN} 已开放 $port/$proto(全网)${NC}"
else
for ip in "${ip_list[@]}"; do
firewall-cmd --permanent --add-rich-rule="rule family=\"ipv4\" source address=\"$ip\" port port=\"$port\" protocol=\"$proto\" accept"
log "${GREEN} 已开放 $port/$proto(源IP: $ip)${NC}"
done
fi
done
echo -e "${YELLOW} 重新加载 firewalld 规则...${NC}"
firewall-cmd --reload && echo "success" || echo "${RED} reload 失败${NC}"
}
function close_ports() {
read -p " 你可以输入多个端口用逗号隔开,如 80,443,8080
请输入要关闭的端口: " ports
read -p "请输入要关闭的IP(多个用逗号分隔): " ips
IFS=',' read -ra port_list <<< "$ports"
IFS=',' read -ra ip_list <<< "$ips"
for port in "${port_list[@]}"; do
if [[ -z "$ips" ]]; then
firewall-cmd --permanent --remove-rich-rule="rule family=\"ipv4\" port port=\"$port\" protocol=\"tcp\" accept"
log "${GREEN} 已关闭 $port/tcp(全网)${NC}"
else
for ip in "${ip_list[@]}"; do
firewall-cmd --permanent --remove-rich-rule="rule family=\"ipv4\" source address=\"$ip\" port port=\"$port\" protocol=\"tcp\" accept"
log "${GREEN} 已关闭 $port/tcp(源IP: $ip)${NC}"
done
fi
done
echo -e "${YELLOW} 重新加载 firewalld 规则...${NC}"
firewall-cmd --reload && echo "success" || echo "${RED} reload 失败${NC}"
echo -e "${GREEN} 修改已生效${NC}"
}
function show_rules() {
echo -e "${YELLOW} 当前 firewalld 规则:${NC}"
firewall-cmd --list-all
}
function delete_all_rich_rules() {
echo -e "${RED} 正在尝试删除所有 rich rule...${NC}"
rules=$(firewall-cmd --permanent --list-rich-rules)
if [[ -z "$rules" ]]; then
echo -e "${YELLOW} 当前没有 rich rules${NC}"
return
fi
while read -r rule; do
firewall-cmd --permanent --remove-rich-rule="$rule" && \
log "${GREEN} 已删除 rich rule: $rule${NC}" || \
log "${RED} 删除失败: $rule${NC}"
done <<< "$rules"
echo -e "${YELLOW} 重新加载 firewalld 规则...${NC}"
firewall-cmd --reload && echo "success" || echo "${RED} reload 失败${NC}"
}
# 主循环
while true; do
clear
echo " firewalld 管理菜单 "
echo "1. 启动 firewalld"
echo "2. 停止 firewalld"
echo "3. 查看监听端口"
echo "4. 开放端口"
echo "5. 关闭端口"
echo "6. 查看当前 firewalld 规则"
echo "7. 批量删除所有 rich rules"
echo "8. 退出脚本"
read -p "请输入选项 [1-8]: " opt
echo ""
case "$opt" in
1) start_firewalld ;;
2) stop_firewalld ;;
3) show_ports ;;
4) open_ports ;;
5) close_ports ;;
6) show_rules ;;
7) delete_all_rich_rules ;;
8) echo -e "${GREEN} 再见!${NC}"; exit 0 ;;
*) echo -e "${RED} 无效选项,请重新输入 [1-8]${NC}" ;;
esac
read -p "按 Enter 键返回菜单..." pause
done
猜你喜欢
- 2025-06-23 Linux 操作系统不需要防病毒软件和防火墙的几个原因
- 2025-06-23 Linux防火墙——iptables原理介绍
- 2025-06-23 防火墙/路由器Linux发行版Devil-Linux
- 2025-06-23 五问 Linux 网络防火墙(四):nftables 的高效框架与数据结构
- 2025-06-23 linux防火墙过滤技术iptables的原理及操作命令详解
- 2025-06-23 Linux,操作系统,防火墙,Netfilter,命令及操作
- 2025-06-23 LINUX IPTABLES 防火墙配置(linux防火墙怎么配置)
- 2025-06-23 Linux安全之网络防火墙(linux防火墙在哪)
- 2025-06-23 linux系统相关防火墙iptables命令操作
- 2025-06-23 linux 防火墙基本命令(linux防火墙主要功能)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)