firewalld防火墙设置

发布时间 2023-07-19 16:20:44作者: 游走De提莫
#!/bin/bash
#基础信息
hostname=`hostname`
date=`date "+%Y-%m-%d %H:%M:%S"`
#输入处理-判断端口
check_newport(){
  while [[ true ]]; do
    read -p "请输入开放端口(1-65535):" newport ;
    if [[ -n $newport ]]; then
      if grep '^[[:digit:]]*$' <<< "$newport"; then
          if [[ $newport -ge 1 && $newport -le 65535 ]]; then
            break 
          else
            echo "输入端口有误!  端口范围(1-65535)"
          fi
      else
          echo "输入参数有误!"
      fi
    else
      echo "输入为空,请重新输入"
    fi
  done
}
#输入处理-判断协议
check_newprotocol(){
  while [[ true ]]; do
    read -p "请输入开放协议(tcp 或 udp):" newprotocol ;
    if [[ -n $newprotocol ]]; then
      if [[ $newprotocol == "tcp" ]] || [[ $newprotocol == "udp" ]]; then
          break
      else
          echo "输入有误,请重新输入!   开放协议(tcp 或 udp)"
      fi
    else
      echo "输入为空,请重新输入"
    fi
  done
}

# 检查防火墙状态及开放端口
check_firewall(){
    # 获取防火墙状态
    filewalld=`systemctl status firewalld | grep Active | awk '{print $2}'`
    if [ $filewalld = "active" ]
    then 
        fwport=`firewall-cmd --zone=public --list-ports`
        fwstr="防火墙已启动,已开放端口:$fwport"
    else 
        fwstr="\033[5m \033[41;37m 防火墙未启动,建议启用防火墙保障系统安全! \033[0m"
        fwnum=0
    fi 
    echo -e "\n\n"$fwstr
}
set_firewall(){
    # 检查防火墙状态及开放端口
    check_firewall
    # 输入处理
    check_newport
    check_newprotocol
    # 设置防火墙
  if [ -n "$fwnum" ]
    then 
        echo "-----正在启动防火墙-----"
        systemctl start firewalld
    filewalld=`systemctl status firewalld | grep Active | awk '{print $2}'`
    if [ $filewalld = "active" ]
    then
      echo "防火墙启动完成"
    else 
      echo "\033[5m \033[41;37m 防火墙启动报错,请执行命令(systemctl status firewalld)查看异常! \033[0m"
      exit
    fi
    else
        echo -e "\n\n" $fwstr
    fi
  echo "-----开始配置防火墙-----"
  if [ $filewalld = "active" ]
  then 
    echo "防火墙已启动,正在开放端口权限。。。"
    #防火墙增加端口
    firewall-cmd --zone=public --add-port=$newport/$newprotocol  --permanent
    firewall-cmd --reload
    fwport=`firewall-cmd --zone=public --list-ports`
    echo "防火墙已启动,已开放端口:$fwport"
    echo "-----配置完成-----"
  fi
}

stop_firewalld(){
  # 检查防火墙状态及开放端口
  check_firewall
  # 输入处理
  check_newport
  check_newprotocol
  if [ $filewalld = "active" ]
  then 
    echo "-----开始配置防火墙-----"
    firewall-cmd --remove-port=$newport/$newprotocol --permanent
    firewall-cmd --reload
    fwport=`firewall-cmd --zone=public --list-ports`
    echo "已关闭端口$newport/$newprotocol,防火墙已启动,已开放端口:$fwport"
    echo "-----配置完成-----"
  else
    echo -e "\033[5m \033[41;37m 防火墙未启动,建议启用防火墙保障系统安全! \033[0m"
  fi
}

home(){
  echo "

  防火墙端口开启脚本
  请输入对应数字进行操作:
  1.检查防火墙状态及开放端口

  2.新增开放端口(永久开放)

  3.关闭端口

  4.退出
  "
  read -p " 请输入您的操作:" h
  case "$h" in
  "1") check_firewall
  ;;
  "2") set_firewall
  ;;
  "3") stop_firewalld
  ;;
  "4") exit
  ;;
  *)
    echo "输入错误,请重新输入。"
    sleep 1
    num=$[$num+1]
    if [[ $num -eq 3 ]]; then
      echo "多次输入有误,已退出"
      exit
    fi
    home
  ;;
  esac
}

while [[ true ]]; do
  home
done