|
CentOS 7 自定义端口一键放行脚本 脚本内容(保存为 open_port.sh)
#!/bin/bash
# 一键放行自定义端口脚本 for CentOS7
# 检查是否 root
if [[ $EUID -ne 0 ]]; then
echo "请使用 root 用户运行此脚本"
exit 1
fi
# 读取端口号
read -p "请输入要放行的端口号(如 12345): " PORT
if ! [[ $PORT =~ ^[0-9]+$ ]]; then
echo "端口号必须是数字"
exit 1
fi
# 选择协议
echo "请选择协议类型:"
echo "1) TCP"
echo "2) UDP"
echo "3) TCP+UDP"
read -p "输入数字 (1/2/3): " PROTO_CHOICE
case $PROTO_CHOICE in
1) PROTO="tcp" ;;
2) PROTO="udp" ;;
3) PROTO="both" ;;
*) echo "无效选择"; exit 1 ;;
esac
# 获取默认接口所在 zone
INTERFACES=$(nmcli device status | awk '$2=="ethernet" && $3=="connected"{print $1}')
if [[ -z "$INTERFACES" ]]; then
INTERFACES=$(nmcli device status | awk '$2=="bridge" && $3=="connected"{print $1}')
fi
if [[ -z "$INTERFACES" ]]; then
echo "没有找到已连接的接口,请确认 NetworkManager 已启动"
exit 1
fi
ZONE=$(firewall-cmd --get-zone-of-interface=$INTERFACES)
if [[ -z "$ZONE" ]]; then
ZONE="public"
fi
echo "接口: $INTERFACES"
echo "区域: $ZONE"
# 放行端口
if [[ $PROTO == "tcp" || $PROTO == "both" ]]; then
firewall-cmd --zone=$ZONE --add-port=$PORT/tcp --permanent
echo "TCP端口 $PORT 已放行"
fi
if [[ $PROTO == "udp" || $PROTO == "both" ]]; then
firewall-cmd --zone=$ZONE --add-port=$PORT/udp --permanent
echo "UDP端口 $PORT 已放行"
fi
# 重载防火墙
firewall-cmd --reload
echo "防火墙已重载,端口生效"
# 列出当前端口
firewall-cmd --list-ports
🔹 使用方法- 保存脚本:
vim open_port.sh
粘贴内容后保存。
- 赋予可执行权限:
chmod +x open_port.sh
- 运行脚本:
./open_port.sh
- 输入端口号
- 选择协议(1/2/3)
- 脚本会自动放行端口并重载 firewalld
|