Ollama禁止外网访问的几种正确配置方式
Ollama 默认只监听 127.0.0.1 的 11434 端口,也就是只有本机能访问。
如果你把监听地址改成 0.0.0.0,或者用 Docker 映射了外网端口,Ollama 就会暴露到公网。
关掉这个风险,重点不是加防火墙规则,而是让 Ollama 进程本身只绑定回环地址或内网地址。
下面给出几种正确的配置方式,并附上验证方法。
先搞清楚你的 Ollama 目前监听了什么地址
在改配置之前,先确认当前状态。
执行下面命令:
ss -lntp | grep 11434
如果看到类似 0.0.0.0:11434 或 :::11434,说明 Ollama 确实在监听所有网卡,外网可达。
如果输出是 127.0.0.1:11434,则只在本地监听,那不用额外改防火墙。
方式一:用环境变量 OLLAMA_HOST 绑定回环地址
Ollama 通过 OLLAMA_HOST 环境变量控制监听地址。
最稳妥的做法是设为 127.0.0.1。
如果是直接用命令行启动,可以这样写:
OLLAMA_HOST=127.0.0.1 ollama serve
如果你用 systemd 管理服务,通常需要修改服务配置。
先查看当前服务文件:
systemctl cat ollama
然后创建覆盖文件:
sudo mkdir -p /etc/systemd/system/ollama.service.d
sudo tee /etc/systemd/system/ollama.service.d/override.conf <<'EOF'
[Service]
Environment="OLLAMA_HOST=127.0.0.1"
EOF
接着重新加载并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart ollama
如果你用的是 Docker 部署 Ollama,注意端口映射。
正确方式是只映射到本机,例如:
docker run -d --name ollama -p 127.0.0.1:11434:11434 ollama/ollama
这里 -p 127.0.0.1:11434:11434 表示只在宿主机回环地址上暴露端口,外网无法直接访问。
禁止使用 -p 11434:11434 这种省略宿主 IP 的写法。
方式二:修改 systemd 服务里的启动参数
有些 Ollama 安装包会在 Unit 文件里写入 Environment=OLLAMA_HOST=0.0.0.0,只覆盖环境变量不一定生效,需要直接修改 Unit 文件。
编辑 /etc/systemd/system/ollama.service,找到 [Service] 段落,检查是否包含:
Environment="OLLAMA_HOST=0.0.0.0"
如果有,把它改成 127.0.0.1 或者直接删除这一行(未设置时默认就是 127.0.0.1)。
保存后执行:
sudo systemctl daemon-reload
sudo systemctl restart ollama
修改后立即验证监听地址。
方式三:防火墙应该用来兜底,而不是唯一防线
如果你确实需要让 Ollama 监听 0.0.0.0,只能访问内网或特定 IP,那必须配置防火墙。
但要知道,防火墙规则一旦被误删、误改,服务照样会暴露。
所以正确的姿势是:应用层绑定内网地址,防火墙只放行固定来源。
以 UFW 为例,只允许内网网段访问 11434:
sudo ufw allow from 192.168.1.0/24 to any port 11434 proto tcp
同时拒绝其他来源:
sudo ufw deny 11434/tcp
如果是 iptables:
iptables -A INPUT -p tcp --dport 11434 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 11434 -j DROP
另外,云服务器厂商的安全组也要检查。
很多情况是防火墙配好了,但安全组放通了 0.0.0.0/0 的 11434 端口,依然能从外部访问。
验证是否真正禁止了外网访问
配置完成后,先看监听状态:
ss -lntp | grep 11434
正常输出应该只包含 127.0.0.1:11434 或内网 IP。
随后在另外一台外网机器上测试:
curl http://你的公网IP:11434
如果提示超时或连接被拒,说明外网访问已拦截。
本机测试仍然正常:
curl http://127.0.0.1:11434
能返回响应即可。
常见坑:改完不生效或仍能外网访问
很多人改了 systemd 配置但忘了 daemon-reload,导致重启时仍用旧配置。
改完务必执行完整命令:先 reload,再 restart。
Docker 场景容易忽略旧容器的端口映射。
删除旧容器重新创建,而不是直接 restart,映射参数不会改变。
如果改了环境变量后监听地址没变,可能是启动脚本里强制写死了 OLLAMA_HOST。
可以用 systemctl cat ollama 查看最终生效的配置,确认是否有多个地方设置。
只改防火墙不够,正确思路是把 Ollama 的监听地址限制在可信网络范围,再用防火墙做二级防护。
这样即使防火墙规则被误清,服务也不会直接暴露到公网。
遇到问题时,按本文顺序逐步检查,基本都能定位到原因。