添加firewall-cmd转发脚本
This commit is contained in:
113
Forward-Tools/firewall_tools.sh
Normal file
113
Forward-Tools/firewall_tools.sh
Normal file
@@ -0,0 +1,113 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "❌ 请使用 root 用户运行"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v firewall-cmd >/dev/null 2>&1; then
|
||||
echo "❌ 未检测到 firewall-cmd(仅支持 RHEL 系)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! systemctl is-active firewalld >/dev/null 2>&1; then
|
||||
echo "❌ firewalld 未运行"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ZONE=$(firewall-cmd --get-default-zone)
|
||||
|
||||
get_forward_ports() {
|
||||
mapfile -t RULES < <(
|
||||
firewall-cmd --permanent --zone="$ZONE" --list-forward-ports || true
|
||||
)
|
||||
}
|
||||
|
||||
list_rules() {
|
||||
get_forward_ports
|
||||
echo
|
||||
echo "📋 当前端口转发规则(zone=$ZONE)"
|
||||
echo "--------------------------------------"
|
||||
|
||||
if [ "${#RULES[@]}" -eq 0 ]; then
|
||||
echo "(暂无端口转发规则)"
|
||||
return 1
|
||||
fi
|
||||
|
||||
for i in "${!RULES[@]}"; do
|
||||
printf "%2d) %s\n" "$((i+1))" "${RULES[$i]}"
|
||||
done
|
||||
}
|
||||
|
||||
add_rule() {
|
||||
echo
|
||||
read -rp "本地监听端口: " LOCAL_PORT
|
||||
read -rp "目标 IP 地址: " TO_ADDR
|
||||
read -rp "目标端口: " TO_PORT
|
||||
|
||||
echo "协议类型:"
|
||||
echo "1) TCP"
|
||||
echo "2) UDP"
|
||||
read -rp "选择 (1/2): " P
|
||||
|
||||
case "$P" in
|
||||
1) PROTO="tcp" ;;
|
||||
2) PROTO="udp" ;;
|
||||
*) echo "❌ 无效选择"; return ;;
|
||||
esac
|
||||
|
||||
RULE="port=${LOCAL_PORT}:proto=${PROTO}:toport=${TO_PORT}:toaddr=${TO_ADDR}"
|
||||
|
||||
firewall-cmd --permanent --zone="$ZONE" --add-forward-port="$RULE"
|
||||
firewall-cmd --reload
|
||||
|
||||
echo "✅ 已添加端口转发规则"
|
||||
}
|
||||
|
||||
############################
|
||||
# 删除规则
|
||||
############################
|
||||
delete_rule() {
|
||||
list_rules || return
|
||||
|
||||
echo
|
||||
read -rp "请输入要删除的规则编号: " IDX
|
||||
[[ "$IDX" =~ ^[0-9]+$ ]] || { echo "❌ 输入无效"; return; }
|
||||
|
||||
RULE="${RULES[$((IDX-1))]}"
|
||||
[[ -n "$RULE" ]] || { echo "❌ 编号不存在"; return; }
|
||||
|
||||
echo "⚠️ 即将删除规则:"
|
||||
echo "$RULE"
|
||||
read -rp "确认删除?(y/N): " CONFIRM
|
||||
[[ "$CONFIRM" =~ ^[Yy]$ ]] || return
|
||||
|
||||
firewall-cmd --permanent --zone="$ZONE" --remove-forward-port="$RULE"
|
||||
firewall-cmd --reload
|
||||
|
||||
|
||||
echo "🗑️ 规则已删除"
|
||||
}
|
||||
|
||||
############################
|
||||
# 主菜单
|
||||
############################
|
||||
while true; do
|
||||
echo
|
||||
echo "====== firewalld 端口转发管理(forward-port) ======"
|
||||
echo "1) 添加端口转发规则"
|
||||
echo "2) 查看端口转发规则"
|
||||
echo "3) 删除端口转发规则"
|
||||
echo "0) 退出"
|
||||
echo "==================================================="
|
||||
read -rp "请选择: " C
|
||||
|
||||
case "$C" in
|
||||
1) add_rule ;;
|
||||
2) list_rules ;;
|
||||
3) delete_rule ;;
|
||||
0) exit 0 ;;
|
||||
*) echo "❌ 无效选择" ;;
|
||||
esac
|
||||
done
|
||||
Reference in New Issue
Block a user