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

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

自查前需要准备什么

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

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

如果没有 ss
Ubuntu/Debian 可以用 apt install iproute2 安装,
CentOS/RHEL 一般自带。curl 缺失时分别用 apt install curlyum 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 coreutilsapt 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
系统公告

机房迁移升级通知

尊敬的用户: IP 段 103.23.148.x、156.224.29.x 原香港一区线路波动、攻击频繁,平台定于 7 月 5 日凌晨分批迁移至香港 GIA 机房,硬件升级 AMD 铂金机型。 迁移均在凌晨操作,最大程度降低业务影响,迁移期间服务器临时关机; 升级后配置不降低、费用不涨价,数据默认同步迁移; 迁移后 IP 全部更换,请及时修改域名解析、防火墙白名单; 建议提前备份重要数据,有问题可联系在线客服。 感谢理解与支持! 泽御云科技 2026.06.30
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意