OllamaのLinuxセキュリティ設定ガイド|UFW・systemdサンドボックス・監査ログでローカルLLMサーバーを堅牢化する

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)ローカルLLM > OllamaのLinuxセキュリティ設定ガイド|UFW・systemdサンドボックス・監査ログでローカルLLMサーバーを堅牢化する
「Ollamaをサーバーに展開したが、セキュリティ設定は何もしていない」
「デフォルト設定のまま動かしているが、ポート11434が全IPに開いているのが不安だ」
そんな状態で運用しているLinuxサーバー管理者やインフラエンジニアは少なくない。Ollamaはインストール直後の状態ではポート11434番を全インターフェース(0.0.0.0)でLISTENする。認証もAPIキーも存在しない。社内LANに閉じているからといって安全とは言い切れず、VPN接続端末や侵害された社内機器からの不正アクセスを防ぐ手立てがない状態だ。
この記事では、Ubuntu Serverに構築済みのOllamaを対象に、4層のセキュリティ設定を順番に解説する。UFWによるネットワーク制限、専用ユーザーによるプロセス分離、systemdサンドボックス、auditdとAppArmorによる監査と権限最小化だ。コマンドベースの手順なので、Ollamaの初回構築を済ませたあとの追加作業として実施できる。
なお、Ollamaの基本セットアップは Ubuntu ServerでローカルLLMを構築する方法 に詳しくまとめてある。本記事はその先の「本番向け堅牢化」ステップとして活用してほしい。

この記事のポイント

・UFWで11434番ポートを特定IPからのみ許可し、全公開状態を即座に解消できる
・systemdのProtectSystem・PrivateTmpでOllamaプロセスをOSファイルシステムから分離できる
・auditdでOllamaの実行・モデル操作を監査ログとして記録・追跡できる
・AppArmorのcomplain→enforceの段階移行でプロセス権限を安全に最小化できる


OllamaのLinuxセキュリティ設定ガイド|UFW・systemdサンドボックス・監査ログでローカルLLMサーバーを堅牢化する

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

なぜOllamaサーバーのセキュリティ設定が必要なのか

Ollamaをインストールした直後の状態を確認すると、デフォルトのバインドアドレスが `0.0.0.0:11434` になっている。全インターフェースでLISTENしているということは、そのサーバーにネットワーク的に到達できる端末ならどこからでもOllama APIを呼び出せる状態だ。
社内LANに閉じているからといって安心はできない。VPN経由で接続した外部端末や、社内ネットワークに侵入した機器からのアクセスを防ぐ手立てがない。認証の問題もある。デフォルトのOllamaにはAPIキーも基本認証も存在しない。
70Bクラスのモデルを運用している環境では、大量リクエストを無制限に受け付けることでGPUリソースが枯渇し、サービスが実質的に停止する事態も起きうる。知人のインフラエンジニアが「外向けに公開するつもりはなかったが、社内から誰でもAPIを叩けることに半年気づかなかった」と話していたことがある。意図せずオープンな状態が続くのが一番のリスクだ。
この記事でカバーするのは以下4層の防御だ:
・ネットワーク層: UFWで11434番ポートのアクセスを制限する
・プロセス層: ollama専用ユーザーで実行権限を分離する
・システム層: systemdセキュリティディレクティブでサンドボックス化する
・監査層: auditdとAppArmorで操作記録と権限最小化を実現する
全部を一度に適用する必要はない。UFWだけでも入れれば、不要な外部アクセスの大半を塞げる。状況に合わせて段階的に積み重ねていく進め方を勧める。

UFWでOllamaのポートアクセスを制限する

1. UFWの状態を確認する

まずUFWが有効になっているかを確認する。

# UFWの状態確認 sudo ufw status verbose

`Status: active` と表示されれば有効だ。`inactive` の場合はこの手順で有効化する。UFWが入っていない場合はインストールから始める:

sudo apt update sudo apt install -y ufw

2. デフォルトポリシーとSSH許可を設定する

UFWを有効化する前に必ずSSHを許可しておく。この順序を間違えると、サーバーにアクセスできなくなる。

# デフォルトポリシー: 外向きOK・内向きDENY sudo ufw default deny incoming sudo ufw default allow outgoing # SSH(22)を先に許可してからUFWを有効化する sudo ufw allow ssh sudo ufw enable

3. OllamaポートをIP指定で許可する

Ollamaの11434番ポートは、アクセスを許可するIPアドレスからのみ受け付けるよう設定する。チームメンバーの作業PCが `192.168.10.0/24` サブネットにある場合の例:

# サブネット単位で許可する場合 sudo ufw allow from 192.168.10.0/24 to any port 11434 proto tcp # 個別IPを許可する場合 sudo ufw allow from 192.168.10.50 to any port 11434 proto tcp # ルール確認 sudo ufw status numbered

4. Ollamaのバインドアドレスをlocalhostに絞る(推奨)

UFWに加えて、OllamaのバインドアドレスそのものをLISTENインターフェースから外す設定も有効だ。systemdのEnvironmentに `OLLAMA_HOST=127.0.0.1` を追加することで、Ollamaはlocalhostのみ受け付けるようになる。この場合、チームメンバーからのアクセスはNginxリバースプロキシ経由に統一する構成が推奨だ。
LISTENポートの確認:

# OllamaがどのIPでLISTENしているか確認 sudo ss -tlnp | grep 11434

`127.0.0.1:11434` だけが表示される状態が、ネットワーク層で最も絞り込まれた構成だ。

Ollamaをollama専用ユーザーで分離実行する

1. 現在の実行ユーザーを確認する

Ollamaのsystemdサービスが誰の権限で動いているかを確認する。

# Ollamaサービスの実行ユーザー確認 sudo systemctl show ollama --property=User # プロセスの実際の実行ユーザー確認 ps aux | grep ollama

公式インストーラーを使った場合、`ollama` という専用ユーザーが既に作成されていることが多い。`User=root` や一般ユーザー名が表示された場合は、以下の手順で専用ユーザーに切り替える。

2. ollama専用ユーザーを作成する

# ログインシェルなし・ホームディレクトリ固定の専用ユーザー作成 sudo useradd -r -s /bin/false -d /usr/share/ollama ollama # モデル保存先ディレクトリの所有者変更 sudo mkdir -p /usr/share/ollama/.ollama sudo chown -R ollama:ollama /usr/share/ollama # バイナリの確認 ls -la $(which ollama)

3. systemdサービスファイルを確認する

# サービスファイルにUser=ollama が含まれているか確認 grep -E "^User=|^Group=" /etc/systemd/system/ollama.service

`User=ollama` と `Group=ollama` の記述があることを確認する。なければ次のセクションのoverride.confで追加する。

systemdのセキュリティディレクティブでサンドボックス化する

systemdにはサービスを隔離するためのセキュリティディレクティブが多数用意されている。本体のサービスファイルを直接編集するとパッケージ更新で上書きされるため、`override.conf` を使って追記するのが正しい作法だ。
systemdのセキュリティ設定を加えることで、Ollamaプロセスが `/home` や `/etc` など本来触る必要のないディレクトリにアクセスできなくなる。万が一プロセスが不正に操作された場合でも、被害がシステム全体に及ぶリスクを下げられる。

1. override.confを作成する

# systemctl edit でoverride.confを開く(自動で正しいパスに保存される) sudo systemctl edit ollama

エディタが開いたら以下を入力する:

[Service] # バインドアドレスをlocalhostに限定する場合 Environment="OLLAMA_HOST=127.0.0.1" # 実行ユーザー(公式インストーラー使用時は確認してから) User=ollama Group=ollama # ファイルシステム保護 ProtectSystem=strict ProtectHome=yes PrivateTmp=yes PrivateDevices=no # 書き込みが必要なパスだけ例外許可 ReadWritePaths=/usr/share/ollama # 権限昇格を禁止 NoNewPrivileges=yes # カーネル設定の保護 ProtectKernelTunables=yes ProtectKernelModules=yes ProtectControlGroups=yes

注: `PrivateDevices=yes` にするとGPUデバイス (`/dev/nvidia*`) にアクセスできなくなるため、GPU環境では `no` のままにする。

2. 設定を反映してOllamaを再起動する

sudo systemctl daemon-reload sudo systemctl restart ollama sudo systemctl status ollama

3. セキュリティスコアを確認する

`systemd-analyze security` でsystemdが評価するセキュリティスコアを確認できる。スコアが低いほど堅牢な設定だ。

# Ollamaサービスのセキュリティスコア確認 sudo systemd-analyze security ollama

設定前は `EXPOSURE` スコアが8前後のことが多いが、上記の設定で4~5程度まで下げられる。全項目を緑にすることが目的ではなく、Ollamaが正常動作する範囲で絞り込むことが大切だ。

auditdでOllamaプロセスの操作を監査ログに記録する

auditdはLinuxカーネルの監査サブシステムと連携して、プロセスの実行・ファイルアクセス・システムコールをログに残す仕組みだ。「いつ」「どのユーザーが」「OllamaのAPIを呼び出したか」を追跡できるようになる。インシデント発生時の調査起点として機能する。

1. auditdをインストールする

sudo apt install -y auditd audispd-plugins sudo systemctl enable --now auditd sudo systemctl status auditd

2. Ollamaバイナリの実行を監視するルールを追加する

# Ollamaバイナリの実行を監視(-p x=実行イベント、-k=キータグ) sudo auditctl -w /usr/bin/ollama -p x -k ollama_exec # モデル保存ディレクトリへの書き込みを監視 sudo auditctl -w /usr/share/ollama -p wa -k ollama_models # 設定したルールの確認 sudo auditctl -l

3. ルールを永続化する

`auditctl` コマンドは再起動で消える。永続化には `/etc/audit/rules.d/` に設定ファイルを作成する。

sudo tee /etc/audit/rules.d/ollama.rules << 'EOF' -w /usr/bin/ollama -p x -k ollama_exec -w /usr/share/ollama -p wa -k ollama_models EOF sudo systemctl restart auditd # 反映確認 sudo auditctl -l

4. ログを確認する

# ollama_execタグのログを検索 sudo ausearch -k ollama_exec # 過去1時間のモデル操作ログ sudo ausearch -k ollama_models --start recent # 実行ユーザー別サマリー sudo aureport -x -i | grep ollama

`auid` フィールドには操作を行ったLinuxユーザーのUID、`exe` フィールドには実行バイナリのパスが記録される。予期しないユーザーによる実行や、深夜帯の不審なアクセスを発見する手がかりになる。

AppArmorプロファイルでOllamaの権限を最小化する

AppArmorはプロセスが「どのファイルに」「どのネットワーク通信に」アクセスできるかをプロファイルで制限する仕組みだ。Ubuntu 22.04以降はデフォルトで有効になっている。まずcomplainモード(違反をログに残すがブロックしない)で動作確認してから、enforceモードに切り替えるのが安全な進め方だ。

1. AppArmorの状態を確認する

# AppArmorの全体状態確認 sudo aa-status # Ollamaのプロファイルが既に存在するか確認 sudo aa-status | grep ollama

2. Ollamaのプロファイルを作成する

sudo tee /etc/apparmor.d/usr.bin.ollama << 'EOF' #include /usr/bin/ollama { #include #include # バイナリ自身 /usr/bin/ollama mr, # モデルファイルの読み書き /usr/share/ollama/** rw, /usr/share/ollama/.ollama/** rw, # 一時ファイル /tmp/** rw, /var/tmp/** rw, # ネットワーク通信 network tcp, network udp, # GPUアクセス(NVIDIA環境) /dev/nvidia* rw, /dev/nvidiactl rw, /dev/nvidia-uvm rw, /dev/nvidia-uvm-tools rw, /dev/dri/** rw, # GPUステータス確認 /sys/class/drm/** r, /sys/bus/pci/** r, @{PROC}/** r, # システムライブラリ /lib/** mr, /usr/lib/** mr, } EOF

3. complainモードで読み込んで動作確認する

# 構文チェック sudo apparmor_parser -p /etc/apparmor.d/usr.bin.ollama # complainモードで読み込み(ブロックせずログだけ残す) sudo aa-complain /usr/bin/ollama # Ollamaを再起動して通常通り操作する sudo systemctl restart ollama # 1~2日後、AppArmorの違反ログを確認 sudo journalctl -t kernel | grep apparmor | grep ollama | tail -20

4. 問題がなければenforceモードに切り替える

complainモードで1~2日間通常運用し、ログに想定外のパスが出た場合はプロファイルに追記してからenforceに切り替える。

# enforceモードに切り替え sudo aa-enforce /usr/bin/ollama # 状態確認 sudo aa-status | grep ollama

よくあるトラブルと対処法

UFWを有効にしたらlocalhostからもAPIにアクセスできなくなった

UFWのデフォルト設定では、ループバックインターフェースのトラフィックが制限される場合がある。以下でloインターフェースを明示的に許可する:

sudo ufw allow in on lo sudo ufw allow out on lo sudo ufw reload # 確認 curl http://localhost:11434/api/tags

ProtectSystem=strict 適用後にモデルが読み込めなくなった

モデルファイルの保存先が `/usr/share/ollama` 以外(例: `/opt/models` や外付けHDD)の場合、`ReadWritePaths` に追記が必要だ。`OLLAMA_MODELS` 環境変数でパスを変更している場合も同様:

# 実際のモデルパスを確認 sudo -u ollama env | grep OLLAMA_MODELS ls -la /usr/share/ollama/.ollama/models/ # override.confのReadWritePathsに追記 sudo systemctl edit ollama # ReadWritePaths=/usr/share/ollama /mnt/external/models sudo systemctl daemon-reload sudo systemctl restart ollama

AppArmor enforceモードでGPUを認識しなくなった

GPUデバイスのパスは環境によって異なる。まずcomplainモードに戻してからauditログで不足パスを特定する:

# complainモードに戻す sudo aa-complain /usr/bin/ollama # AppArmorの違反ログ(AVC)を確認 sudo ausearch -m AVC --start recent | grep ollama # 不足パスをプロファイルに追記してからenforceに戻す sudo aa-enforce /usr/bin/ollama

auditdログが急増してディスクを圧迫する

auditdのログローテーション設定を見直す:

# 現在のログ設定確認 grep -E "max_log_file|num_logs" /etc/audit/auditd.conf # 10MBで10世代ローテートに設定 sudo sed -i 's/^max_log_file =.*/max_log_file = 10/' /etc/audit/auditd.conf sudo sed -i 's/^num_logs =.*/num_logs = 10/' /etc/audit/auditd.conf sudo systemctl restart auditd

まとめ

Ollamaのデフォルト状態はAPIが全公開・認証なし・プロセス分離なしで、セキュリティ上の懸念が多い。4層の設定を積み重ねることで、本番運用に耐えられるレベルに堅牢化できる。
設定層 主なコマンド・ディレクティブ 効果
ネットワーク (UFW) sudo ufw allow from 192.168.x.x/24 to any port 11434 proto tcp 許可IPからのみアクセス可能にする
プロセス分離 (systemd) User=ollama (override.conf) root権限で動かさない
systemdサンドボックス ProtectSystem=strict / PrivateTmp=yes ファイルシステムへの無制限アクセスを遮断
監査ログ (auditd) sudo auditctl -w /usr/bin/ollama -p x -k ollama_exec 実行・操作を記録して追跡可能にする
権限最小化 (AppArmor) sudo aa-enforce /usr/bin/ollama アクセス可能なファイル・デバイスを限定

いきなり全部を適用するのが難しければ、UFWから始めて段階的に追加するのが現実的だ。20年以上Linuxサーバーを触ってきた経験から言うと、「後からセキュリティを足す」のは必ずどこかに抜け漏れが出る。構築と同時に最低限UFWだけでも設定しておくことを強く勧める。
ローカルLLMの社内導入判断や情報セキュリティポリシーとの兼ね合いについては、社内でChatGPTが使えないときの代替手段も参考にしてほしい。

ローカルLLMのセキュリティ設定を実機ハンズオンで体験する

UFW・systemdサンドボックス・AppArmorの設定は、実際に手を動かして動作確認しながら覚えるのが一番確実だ。読むだけでは得られない「設定変更→動作確認→トラブル対処」のサイクルを体験したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。

>> ローカルAIマスターセミナーの詳細を確認する
ローカルLLMの構築・運用に関する関連記事もあわせて参考にしてください。

Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。