【工具集】防火墙管理脚本

在 Linux 系统中,防火墙配置是一个非常重要的部分,尤其是在保护服务器免受外部攻击时,防火墙的正确配置至关重要。今天,我给大家带来了一份非常实用的防火墙管理脚本,它可以帮助你轻松地管理防火墙规则,放行、阻止和删除指定的端口,极大地方便了防火墙配置的日常工作。

这个脚本使用非常简单,而且能自动识别操作系统和防火墙类型,适应性强。接下来,我将带大家逐步了解这个脚本的功能和优点。

脚本主要功能

这个脚本的功能包括:

  1. 查看当前防火墙规则
    不同的 Linux 发行版有不同的防火墙管理工具(如 ufwfirewalldiptables 等)。这个脚本会自动识别当前系统使用的防火墙工具,并且显示相应的规则。
  2. 放行端口
    如果需要放行某个端口,可以使用脚本输入端口号,自动放行指定的端口。支持 ufwfirewalldiptables 工具。
  3. 阻止端口
    同样的,如果需要阻止某个端口的通信,可以使用该脚本快速阻止指定端口。
  4. 删除防火墙规则
    如果不再需要某个端口的防火墙规则,可以使用脚本删除它,自动处理 ufwfirewalldiptables 上的规则。

脚本实现细节

  1. 自动识别操作系统和防火墙工具
    脚本首先通过 uname -s 命令获取操作系统类型,确保只在支持的 Linux 系统中运行。如果系统为 Linux,脚本会进一步检查防火墙工具(ufwfirewalldiptables)的可用性,并根据检测结果执行相应的操作。这样,你不需要手动指定防火墙工具,脚本会智能判断。
  2. 简单易用的交互式菜单
    用户只需要输入数字(1-5)选择想要执行的操作,脚本会根据你的选择执行相应的任务,非常方便。例如:
  • 选择查看防火墙规则。
  • 放行某个端口。
  • 阻止某个端口。
  • 删除已设置的防火墙规则。每个操作都会根据所使用的防火墙工具自动调整配置命令,最大程度地避免了出错的可能。

亮点

  1. 跨平台支持
    这个脚本支持多种 Linux 防火墙工具,能够适配不同的防火墙设置,确保用户在不同的系统环境下都能够顺利使用。
  2. 高效便捷
    用户只需几个简单的输入,就能完成复杂的防火墙操作。通过交互式菜单,用户不再需要记住各种命令,极大地提高了效率。
  3. 适合日常使用
    不管是刚刚接触 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}"