环境准备与基础安全:操作系统安全加固、最小化安装原则、非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

知识体系结构图

下面这张图,把咱们这一章的核心逻辑串起来了。你一看就明白,安全加固不是零散的操作,而是一套环环相扣的体系。

Ollama安全部署基础加固体系 操作系统安全加固 最小化安装原则 删服务、关端口、禁用户 非root用户运行 专用用户、最小权限 防火墙规则配置 默认拒绝、按需放行 删除无用软件包 禁用不必要服务 内核参数调优 创建专用用户 systemd配置 权限与能力控制 默认策略设置 端口放行规则 连接速率限制 目标:攻击面最小化 + 权限最小化 + 网络最小化

总结一下: 操作系统加固是地基,非root运行是门锁,防火墙是围墙。三者缺一不可。我见过太多人只做了其中一两项,结果被攻击者从薄弱环节突破。记住,安全是木桶效应——最短的那块板决定了你的安全水位。

专注资料整理