环境准备与基础安全:操作系统安全加固、最小化安装原则、非root用户运行、防火墙规则配置
好,咱们正式开始动手了。这一章,说白了就是给Ollama搭一个「铁桶」一样的家。我见过太多人,模型跑得飞起,结果服务器被人当肉鸡用了还不知道。嗯,咱们从地基开始,把每一步都踩实了。
操作系统安全加固:从源头掐断风险
我个人习惯,拿到一台新机器,第一件事不是装软件,而是先做系统瘦身和加固。你想想看,一个干干净净的系统,攻击面自然就小。
核心原则: 用不到的端口全关,用不到的服务全删,用不到的用户全禁。
1. 最小化安装原则
装系统的时候,别图省事选「带GUI的服务器」或者「开发工作站」。我建议你选「最小化安装」,或者干脆用容器镜像。我在项目中遇到过,有人装了全套桌面环境,结果被一个浏览器漏洞直接打穿了内网。
- 删除不必要的软件包: 比如 cups(打印服务)、avahi(零配置网络)、postfix(邮件服务)等。
- 禁用不必要的服务: 用
systemctl list-unit-files | grep enabled检查,把不需要的统统systemctl disable掉。 - 关闭IPv6(如果不用): 很多攻击工具会优先扫描IPv6地址。
# 查看所有监听端口
ss -tlnp
# 禁用不必要的服务示例
systemctl disable --now cups.service
systemctl disable --now avahi-daemon.service
2. 内核参数调优
这里有个小技巧。我习惯把 /etc/sysctl.conf 里几个关键参数改一下,防止一些常见的网络攻击。
| 参数 | 值 | 说明 |
|---|---|---|
| net.ipv4.tcp_syncookies | 1 | 防止SYN Flood攻击 |
| net.ipv4.conf.all.rp_filter | 1 | 开启反向路径过滤,防IP欺骗 |
| net.ipv4.conf.all.accept_source_route | 0 | 禁用源路由,防止路由劫持 |
| kernel.exec-shield | 1 | 启用执行保护,防缓冲区溢出 |
我的经验: 改完参数记得
sysctl -p 生效。我曾经忘了这一步,排查了半天为什么配置没起作用。
非root用户运行:别把钥匙挂在门上
这是最基础,但也最容易翻车的一点。我见过有人图省事,直接用root跑Ollama。结果呢?模型文件里被人植入了恶意代码,整个服务器被提权。嗯,血的教训。
创建专用用户
我建议创建一个叫 ollama 的系统用户,权限越小越好。
# 创建系统用户,没有家目录,不能登录
useradd -r -s /sbin/nologin -M ollama
# 设置Ollama数据目录权限
mkdir -p /opt/ollama/models
chown -R ollama:ollama /opt/ollama
配置systemd服务以非root运行
这是关键一步。在 /etc/systemd/system/ollama.service 里,明确指定用户和组。
[Unit]
Description=Ollama Service
After=network-online.target
[Service]
Type=simple
User=ollama
Group=ollama
ExecStart=/usr/local/bin/ollama serve
Restart=on-failure
RestartSec=3
[Install]
WantedBy=multi-user.target
注意: 如果Ollama需要监听1024以下端口(比如80或443),非root用户默认没权限。这时候要么用反向代理(推荐),要么用
setcap 赋予能力。我个人强烈建议用反向代理,别为了省事降低安全等级。
防火墙规则配置:只开一扇门
防火墙就是你的看门狗。我习惯用 iptables 或者 nftables,但为了简单,咱们用 ufw(Ubuntu)或 firewalld(CentOS)来演示。核心思想就一句话:默认拒绝,按需放行。
默认策略:DROP一切
# 设置默认策略为拒绝
ufw default deny incoming
ufw default allow outgoing
放行必要端口
- SSH端口(22): 只允许特定IP访问,别全网开放。
- Ollama API端口(11434): 只允许内网或反向代理服务器访问。
- Web服务端口(443): 如果通过Nginx暴露,只放行443。
# 只允许内网访问Ollama
ufw allow from 10.0.0.0/8 to any port 11434
# 只允许特定IP访问SSH
ufw allow from 192.168.1.100 to any port 22
# 放行HTTPS
ufw allow 443/tcp
避坑指南: 我曾经把SSH端口写成了
ufw allow 22,结果忘了指定协议,导致UDP的22端口也开了。虽然影响不大,但看着不爽。建议养成习惯,写全 22/tcp。
限制连接速率(防暴力破解)
这个我强烈建议加上。尤其是SSH和Ollama API暴露在公网时。
# 限制SSH每分钟最多3次新连接
ufw limit ssh/tcp
# 或者用iptables更精细的控制
iptables -A INPUT -p tcp --dport 11434 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 11434 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP
知识体系结构图
下面这张图,把咱们这一章的核心逻辑串起来了。你一看就明白,安全加固不是零散的操作,而是一套环环相扣的体系。
总结一下: 操作系统加固是地基,非root运行是门锁,防火墙是围墙。三者缺一不可。我见过太多人只做了其中一两项,结果被攻击者从薄弱环节突破。记住,安全是木桶效应——最短的那块板决定了你的安全水位。