在 Linux 系统中,防火墙配置是一个非常重要的部分,尤其是在保护服务器免受外部攻击时,防火墙的正确配置至关重要。今天,我给大家带来了一份非常实用的防火墙管理脚本,它可以帮助你轻松地管理防火墙规则,放行、阻止和删除指定的端口,极大地方便了防火墙配置的日常工作。
这个脚本使用非常简单,而且能自动识别操作系统和防火墙类型,适应性强。接下来,我将带大家逐步了解这个脚本的功能和优点。
脚本主要功能
这个脚本的功能包括:
- 查看当前防火墙规则
不同的 Linux 发行版有不同的防火墙管理工具(如ufw
、firewalld
、iptables
等)。这个脚本会自动识别当前系统使用的防火墙工具,并且显示相应的规则。 - 放行端口
如果需要放行某个端口,可以使用脚本输入端口号,自动放行指定的端口。支持ufw
、firewalld
和iptables
工具。 - 阻止端口
同样的,如果需要阻止某个端口的通信,可以使用该脚本快速阻止指定端口。 - 删除防火墙规则
如果不再需要某个端口的防火墙规则,可以使用脚本删除它,自动处理ufw
、firewalld
或iptables
上的规则。
脚本实现细节
- 自动识别操作系统和防火墙工具
脚本首先通过uname -s
命令获取操作系统类型,确保只在支持的 Linux 系统中运行。如果系统为 Linux,脚本会进一步检查防火墙工具(ufw
、firewalld
或iptables
)的可用性,并根据检测结果执行相应的操作。这样,你不需要手动指定防火墙工具,脚本会智能判断。 - 简单易用的交互式菜单
用户只需要输入数字(1-5)选择想要执行的操作,脚本会根据你的选择执行相应的任务,非常方便。例如:
- 选择查看防火墙规则。
- 放行某个端口。
- 阻止某个端口。
- 删除已设置的防火墙规则。每个操作都会根据所使用的防火墙工具自动调整配置命令,最大程度地避免了出错的可能。
亮点
- 跨平台支持
这个脚本支持多种 Linux 防火墙工具,能够适配不同的防火墙设置,确保用户在不同的系统环境下都能够顺利使用。 - 高效便捷
用户只需几个简单的输入,就能完成复杂的防火墙操作。通过交互式菜单,用户不再需要记住各种命令,极大地提高了效率。 - 适合日常使用
不管是刚刚接触 Linux 的新手,还是长期运维的老鸟,这个脚本都能带来便捷的操作体验,避免了手动配置防火墙时可能带来的错误。
完整脚本
#!/bin/bash
# 设置红色输出
RED='\033[31m'
RESET='\033[0m'
# 显示社区信息
echo -e "${RED}欢迎来到 Linux.MBA「Most Badass Admin」最强管理员社区${RESET}"
echo -e "${RED}网址:http://linux.mba${RESET}"
echo "----------------------------------------------"
# 自动识别操作系统类型
OS=$(uname -s)
# 检查防火墙工具是否存在,并显示防火墙规则
check_firewall() {
if [ "$OS" == "Linux" ]; then
if command -v ufw &> /dev/null; then
echo "系统使用 UFW 防火墙,正在显示防火墙规则..."
sudo ufw status verbose
elif command -v firewall-cmd &> /dev/null; then
echo "系统使用 Firewalld 防火墙,正在显示防火墙规则..."
sudo firewall-cmd --list-all
elif command -v iptables &> /dev/null; then
echo "系统使用 Iptables 防火墙,正在显示防火墙规则..."
sudo iptables -L
else
echo "未找到已安装的防火墙工具。"
exit 1
fi
else
echo "不支持的操作系统:$OS"
exit 1
fi
}
# 放行指定端口
allow_port() {
read -p "请输入要放行的端口号: " port
if [ "$OS" == "Linux" ]; then
if command -v ufw &> /dev/null; then
sudo ufw allow $port
echo "端口 $port 已放行 (UFW)"
elif command -v firewall-cmd &> /dev/null; then
sudo firewall-cmd --zone=public --add-port=$port/tcp --permanent
sudo firewall-cmd --reload
echo "端口 $port 已放行 (Firewalld)"
elif command -v iptables &> /dev/null; then
sudo iptables -A INPUT -p tcp --dport $port -j ACCEPT
sudo service iptables save
echo "端口 $port 已放行 (Iptables)"
else
echo "未找到已安装的防火墙工具。"
exit 1
fi
else
echo "不支持的操作系统:$OS"
exit 1
fi
}
# 阻止指定端口
block_port() {
read -p "请输入要阻止的端口号: " port
if [ "$OS" == "Linux" ]; then
if command -v ufw &> /dev/null; then
sudo ufw deny $port
echo "端口 $port 已阻止 (UFW)"
elif command -v firewall-cmd &> /dev/null; then
sudo firewall-cmd --zone=public --remove-port=$port/tcp --permanent
sudo firewall-cmd --reload
echo "端口 $port 已阻止 (Firewalld)"
elif command -v iptables &> /dev/null; then
sudo iptables -A INPUT -p tcp --dport $port -j REJECT
sudo service iptables save
echo "端口 $port 已阻止 (Iptables)"
else
echo "未找到已安装的防火墙工具。"
exit 1
fi
else
echo "不支持的操作系统:$OS"
exit 1
fi
}
# 删除指定的防火墙规则
delete_rule() {
read -p "请输入要删除的端口号: " port
if [ "$OS" == "Linux" ]; then
if command -v ufw &> /dev/null; then
# 删除放行或阻止的端口规则
sudo ufw delete allow $port
sudo ufw delete deny $port
sudo ufw reload
echo "端口 $port 已删除并重新加载防火墙规则 (UFW)"
elif command -v firewall-cmd &> /dev/null; then
sudo firewall-cmd --zone=public --remove-port=$port/tcp --permanent
sudo firewall-cmd --reload
echo "端口 $port 已删除并重新加载防火墙规则 (Firewalld)"
elif command -v iptables &> /dev/null; then
sudo iptables -D INPUT -p tcp --dport $port -j ACCEPT
sudo iptables -D INPUT -p tcp --dport $port -j REJECT
sudo service iptables save
echo "端口 $port 已删除并重新加载防火墙规则 (Iptables)"
else
echo "未找到已安装的防火墙工具。"
exit 1
fi
else
echo "不支持的操作系统:$OS"
exit 1
fi
}
# 显示选择菜单
echo "请选择要进行的操作:"
echo "1. 查看防火墙规则"
echo "2. 放行端口"
echo "3. 阻止端口"
echo "4. 删除防火墙规则"
echo "5. 退出"
# 读取用户输入
read -p "请输入数字(1-5): " choice
case $choice in
1)
check_firewall
;;
2)
allow_port
;;
3)
block_port
;;
4)
delete_rule
;;
5)
echo "退出程序。"
exit 0
;;
*)
echo "无效的选择,请输入 1、2、3、4 或 5。"
;;
esac
# 显示结束信息
echo "----------------------------------------------"
echo -e "${RED}感谢使用 Linux.MBA 工具集${RESET}"
echo -e "${RED}网址:http://linux.mba${RESET}"