「デフォルト設定のまま動かしているが、ポート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サーバーのセキュリティ設定が必要なのか
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
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
Ollamaをollama専用ユーザーで分離実行する
1. 現在の実行ユーザーを確認する
Ollamaのsystemdサービスが誰の権限で動いているかを確認する。# Ollamaサービスの実行ユーザー確認 sudo systemctl show ollama --property=User # プロセスの実際の実行ユーザー確認 ps aux | grep ollama
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
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
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
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
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ハンズオン形式で実施しています。
・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら
- 前のページへ:OllamaをSSHポートフォワーディングでリモートアクセスする方法|VPSや社内サーバーのローカルLLMを外出先から安全に操作する
- この記事の属するカテゴリ:ローカルLLMへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。
登録無料・いつでも解除できます