Ollama无鉴权公网暴露风险自查脚本批量扫描本机端口

Ollama 默认在 11434 端口提供 API 服务,如果启动时没有限制监听地址,又未加任何鉴权,公网上的任何人都可能直接调用你的模型接口,造成资源被滥用、数据被读取甚至被植入恶意任务。
本文提供一套可落地的自查脚本,用于批量扫描本机所有网卡上的 11434 端口,判断是否存在无鉴权公网暴露风险,并给出对应加固方案。

自查前需要准备什么

执行脚本前,请确认以下条件:

  • 服务器系统为 Linux,且有 bash、curl、ss 或 netstat 命令。
  • 你有服务器的 root 或 sudo 权限。
  • Ollama 服务当前正在运行,且端口 11434 没有被其他进程占用。

如果没有 ss,
Ubuntu/Debian 可以用 apt install iproute2 安装,
CentOS/RHEL 一般自带。curl 缺失时分别用 apt install curl 或 yum install curl 安装。

一键自查脚本:批量扫描本机端口 11434

将下面内容保存为 ollama_exposure_check.sh:

#!/bin/bash
# Ollama 公网暴露风险自查脚本
# 批量扫描本机所有 IPv4 地址上的 11434 端口

PORT=11434

if ! command -v ss >/dev/null 2>&1; then
    echo "错误:未找到 ss 命令,请先安装 iproute2"
    exit 1
fi

echo "========== 1. 查看 11434 端口监听状态 =========="
ss -tlnp | grep ":$PORT " || echo "端口 $PORT 未被监听"

echo ""
echo "========== 2. 获取本机所有 IPv4 地址 =========="
IP_LIST=$(hostname -I 2>/dev/null || ip -4 addr show | grep inet | awk '{print $2}' | cut -d'/' -f1)
if [ -z "$IP_LIST" ]; then
    echo "无法自动获取本机 IP,请手动执行 ip addr 查看。"
else
    echo "本机 IP 列表:"
    echo "$IP_LIST"
fi

echo ""
echo "========== 3. 批量探测 11434 端口连通性 =========="
for ip in $IP_LIST; do
    timeout 2 bash -c "echo >/dev/tcp/$ip/$PORT" 2>/dev/null && echo "$ip:11434 开放" || echo "$ip:11434 不可达"
done

echo ""
echo "========== 4. 测试本地 API 是否有鉴权 =========="
if curl -s --max-time 3 http://127.0.0.1:$PORT/api/tags | head -c 300; then
    echo ""
    echo "警告:本机请求无需认证直接返回了模型列表,说明无鉴权风险。"
else
    echo "本地请求失败,或已配置鉴权/连接受限。"
fi

给脚本执行权限并运行:

chmod +x ollama_exposure_check.sh
sudo ./ollama_exposure_check.sh

脚本会依次输出端口监听状态、本机所有 IP 地址,并用 bash 原生 /dev/tcp 批量探测所有 IP 上的 11434 端口。
最后模拟本地请求 Ollama API,判断是否无鉴权访问。

如何判断结果是否危险

正常情况下,Ollama 推荐只监听本机回环地址。
自查结果需要关注以下几项:

  1. 监听地址是 0.0.0.0 或 ::::表示服务绑定在所有网卡上,公网可能有访问路径。
  2. 公网 IP 的 11434 端口显示“开放”:如果该 IP 是公网地址,外部可以直连,危险等级很高。
  3. /api/tags 直接返回 JSON 数据:说明没有 Token 或 Basic Auth 保护,已满足无鉴权暴露条件。

只要满足上述任意一条,就应立即对 Ollama 配置进行调整。

常见隐患与避坑说明

很多用户把 Ollama 装在带公网 IP 的服务器上,却忽略了默认监听行为。
使用以下方式可以大幅降低暴露风险:

  • 修改服务启动参数:在 systemd 服务文件中设置 Environment="OLLAMA_HOST=127.0.0.1",然后重启 ollama 服务。
  • 使用防火墙限制 11434 端口:ufw deny 11434(Ubuntu)或 firewall-cmd --permanent --remove-port=11434/tcp(CentOS)。
  • 不要把 11434 端口直接映射到宿主机或 Docker 的 -p 0.0.0.0:11434:11434 上。
  • 如果确实需要远程调用,建议用 Nginx 反向代理并启用 auth_basic 或前置 API Key 校验,同时只放行你本机或内网 IP。

执行脚本时如果出现 timeout 命令不存在,可以用 yum install coreutils 或 apt install coreutils;
或用 curl 替代 /dev/tcp 探测:curl -s --connect-timeout 2 http://$ip:$PORT/。

另外,本机探测只能证明端口在本机可访问,无法直接证明公网路径一定通。
建议再借助服务商的安全组规则或在线端口检测工具从外部验证,确认公网入口是否真正被拦截。

效果验证:加固后再次运行脚本

加固完成后,重新执行上面的自查脚本,预期输出应该是:

  • ss 结果显示监听地址为 127.0.0.1:11434 或 [::1]:11434。
  • 对所有非回环 IP 的 11434 端口探测结果为“不可达”。
  • 本地 /api/tags 仍然能正常返回,但公网无法访问。

如果你希望通过反向代理远程使用,此时只要确认代理监听在受控网络端口,并且有鉴权,就可以正常使用。

两个常见疑问

端口没有被公网扫描到就安全吗?
不一定。端口暴露存在时间差,也可能被内网其他机器通过跳板访问。建议把无鉴权访问视为最高风险,尽早处理。

Ollama 新版是否自动开启鉴权?
Ollama 目前默认没有强制鉴权机制,具体行为请以官方文档和实际控制台显示为准。因此最稳妥的做法是自主设置网络绑定和访问控制。

如果你正在处理 Ollama 无鉴权公网暴露风险自查,建议先按本文脚本完整执行,再根据自己的环境微调防火墙和绑定配置;
遇到异常时优先回看避坑和高频问题部分。
安全自查不是一次性任务,服务升级或换机器后记得重新跑一遍脚本。

分享到:
上一篇
npm供应链蠕虫400+投毒包,Node项目依赖安全自查流程
下一篇
NadMesh僵尸网络扫描AI服务端口
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意