OllamaのAPIをufwで保護する方法|Linuxファイアウォールで社内ネットワーク限定公開とポート制御を設定する手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)ローカルLLM > OllamaのAPIをufwで保護する方法|Linuxファイアウォールで社内ネットワーク限定公開とポート制御を設定する手順
「OllamaをUbuntu Serverに入れたが、ポートを絞る設定をしていない」
「チーム外や社外から11434番ポートへアクセスされないか不安だ」

そんな不安を抱えるLinuxエンジニアや情報システム担当者は多いはずです。この記事では、OllamaのAPIポートをufwとsystemdの組み合わせで保護し、社内ネットワークのサブネットだけにアクセスを絞る手順を一通り解説します。
iptablesとの使い分け、Nginxリバースプロキシとの多層防御構成、設定後の実測検証方法まで含めて、本番運用に耐えるファイアウォール設定を完成させましょう。

この記事のポイント

・sudo ufw allow from 192.168.1.0/24 to any port 11434 proto tcp でサブネット限定公開が即日実現できる
・systemdのEnvironment="OLLAMA_HOST=127.0.0.1:11434"でLoopbackバインドに絞るとプロセスレベルで外部遮断できる
・NginxをHTTPS終端にして11434番ポートを外部に見せないのがチーム運用の定石
・設定後はnmap -p 11434 でfilteredと表示されるか実測で確認する


OllamaのAPIをufwで保護する方法|Linuxファイアウォールで社内ネットワーク限定公開とポート制御を設定する手順

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

OllamaをインストールするとAPIポートはどこまで公開されているか

Ollamaを公式の1コマンドインストール(`curl -fsSL https://ollama.com/install.sh | sh`)で導入すると、デフォルトでは `0.0.0.0:11434` にバインドされます。
これはサーバーのすべてのNICに対して11434番ポートを開放した状態です。同じLAN内のPCからはもちろん、クラウドVPSのセキュリティグループや社内ルーターのNATが通している経路があれば、外部のネットワークからもOllamaのAPIに到達できてしまいます。

オンプレミスの社内サーバーであれば、ルーターの外側からの到達は難しいケースが多いです。ただし、VPN経由でLANに入ったメンバーが誰でも11434番にアクセスできる状態になっており、権限のないメンバーが社内の機密データを学習させたモデルに問い合わせできてしまう可能性があります。

クラウドVPS(AWS EC2・さくらVPS・Vultrなど)でOllamaを立てている場合はさらにリスクが高まります。セキュリティグループやファイアウォールの設定ミスが一つあるだけで、インターネット上にLLM APIが丸ごと公開される可能性があります。OllamaにはデフォルトでAPIキー認証がないため、URLさえわかれば誰でもモデルを呼び出せます。

現在のリッスン状態は以下のコマンドで確認できます。

# Ollamaのリッスン状態を確認 $ ss -tlnp | grep 11434 LISTEN 0 4096 0.0.0.0:11434 0.0.0.0:* users:(("ollama",pid=12345,fd=7))

`0.0.0.0:11434` と表示されれば、現状はすべてのNICでListenしています。既存のOllamaの構築手順についてはUbuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイドでまとめています。本記事はその「次のステップ」として、ポートとバインドアドレスの保護を扱います。

ufwの基礎確認とOllamaが使うポート番号

Ubuntu Serverでは `ufw`(Uncomplicated Firewall)がデフォルトのファイアウォール管理ツールです。iptablesの複雑なルール記述を抽象化しており、ポートの許可・拒否を人間が読みやすい書式で管理できます。

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

# ufwの状態と現在のルールを確認 $ sudo ufw status verbose Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 22/tcp ALLOW IN Anywhere

`Status: inactive` と表示された場合は `sudo ufw enable` で有効化してください。その際、**SSHポート(22番)を先に許可してから有効化**することを必ず確認してください。SSHポートを許可する前にufwを有効化すると、リモートからの接続が切断されてしまいます。

Ollamaが使うポートは11434番のTCPのみです。このポートへの通信をどの範囲に許可するかが今回の設定の核心です。

ufwのデフォルト設定(`deny incoming`)が有効であれば、11434番は許可ルールがない限り全拒否のはずです。ただし、過去の作業で `ufw allow 11434` のような全開放ルールが入っている場合は、本記事の手順の前に削除する必要があります。現在のルールを番号付きで確認してから作業を進めましょう。

# ルールを番号付きで一覧表示 $ sudo ufw status numbered To Action From -- ------ ---- [ 1] 22/tcp ALLOW IN Anywhere [ 2] 11434 ALLOW IN Anywhere ← 全開放になっていたら削除する # 全開放ルールを削除する場合(番号を指定) $ sudo ufw delete 2

OllamaのAPIを社内サブネットだけに限定するufw設定

チームのサーバーが 192.168.1.0/24 のサブネットに属しているケースを例に、Ollamaへのアクセスをそのサブネット内からのみ許可します。サブネットのアドレスは環境に合わせて変更してください。

1. サブネット限定の許可ルールを追加する

# 社内サブネット(192.168.1.0/24)からの11434番アクセスのみ許可 $ sudo ufw allow from 192.168.1.0/24 to any port 11434 proto tcp Rule added

2. 設定後のufw statusで反映を確認する

$ sudo ufw status numbered To Action From -- ------ ---- [ 1] 22/tcp ALLOW IN Anywhere [ 2] 11434/tcp ALLOW IN 192.168.1.0/24

これで、192.168.1.0/24 以外のIPからの 11434番 TCPへの接続はデフォルトdenyによってブロックされます。

社外からVPN経由でアクセスするメンバーがいる場合は、VPNのIPレンジも追加してください。

# VPNサブネット(例: 10.8.0.0/24)も追加許可 $ sudo ufw allow from 10.8.0.0/24 to any port 11434 proto tcp

3. 特定の管理用IPアドレスだけを許可する場合

さらに絞り込みたい場合、サブネット単位ではなく特定のIPアドレスだけを許可できます。インフラ担当者のIPだけに限定する運用で有効です。

# 特定のIPのみ許可(例: 管理者端末 192.168.1.50) $ sudo ufw allow from 192.168.1.50 to any port 11434 proto tcp # 複数のIPをまとめて許可する場合は1行ずつ追加する $ sudo ufw allow from 192.168.1.51 to any port 11434 proto tcp

サブネット単位の許可ルールが既に入っている場合は、それを削除してから特定IP指定のルールに切り替えてください。ルール順序はufwが上から評価するため、広いサブネットの許可ルールが先にあると個別IP拒否が機能しないケースがあります。

OllamaのバインドアドレスをsystemdのEnvironmentで制限する

ufwはファイアウォールレベルの保護ですが、Ollama自体が `0.0.0.0` にバインドしている限り、サーバー上で動くスクリプトや同一サーバー上の別サービスから11434番への直接接続は制限できません。プロセスレベルで外部NICへの応答を止めるには、Ollamaのバインドアドレスを `127.0.0.1` に絞ります。

systemdのoverride.confでOLLAMA_HOST環境変数を設定するのが正しい手順です。直接 `/etc/systemd/system/ollama.service` を編集すると、Ollamaのアップデート時に上書きされる可能性があります。

1. systemctl editでoverride.confを作成する

# エディタでoverride.confを開く(存在しない場合は新規作成) $ sudo systemctl edit ollama

エディタが開いたら以下を入力して保存します。保存後は `/etc/systemd/system/ollama.service.d/override.conf` に書き込まれます。

[Service] Environment="OLLAMA_HOST=127.0.0.1:11434"

2. systemdをリロードしてOllamaを再起動する

$ sudo systemctl daemon-reload $ sudo systemctl restart ollama # バインドアドレスが変わったか確認 $ ss -tlnp | grep 11434 LISTEN 0 4096 127.0.0.1:11434 0.0.0.0:* users:(("ollama",pid=23456,fd=7))

`127.0.0.1:11434` のみになれば成功です。この状態では、同じサーバー上のNginxやPythonスクリプトからはLocalhostでアクセスできますが、他ホストから11434番に直接接続することはできません。

Ollamaをsystemdのサービスとして運用する詳細(override.confの書き方・ログ確認方法)は別記事でまとめています。本記事ではバインドアドレスの変更に絞って説明します。

なお、OLLAMA_HOST をユーザーのシェル環境変数(~/.bashrc など)に設定するのは**推奨しません**。systemdサービスとしての起動時に反映されず、ユーザーセッション依存の設定になってしまうためです。override.conf経由での設定が信頼性の高い方法です。

iptablesで細かいアクセス制御を追加する(ufw補完)

ufwは内部でiptablesのルールを管理しています。通常はufwだけで十分ですが、接続数のレート制限(rate limiting)やより細かいパケットフィルタリングが必要な場合は、iptablesのルールを直接追加することもできます。

たとえば、同一IPから短時間に大量のリクエストを投げてサーバーリソースを消費される場合への対策として、1分あたりの新規接続数を制限するルールを追加できます。

# 1分あたり20接続を超えたIPからの新規接続をDROPする $ sudo iptables -I INPUT -p tcp --dport 11434 -m state --state NEW \ -m recent --set --name OLLAMA_RATE $ sudo iptables -I INPUT -p tcp --dport 11434 -m state --state NEW \ -m recent --update --seconds 60 --hitcount 21 --name OLLAMA_RATE \ -j DROP # 現在のiptablesルールを確認 $ sudo iptables -L INPUT -n --line-numbers | grep 11434

このルールはサーバー再起動で消えるため、永続化するには `iptables-persistent` を使います。

# iptablesルールを永続化 $ sudo apt install -y iptables-persistent $ sudo iptables-save | sudo tee /etc/iptables/rules.v4 # 次回起動時に自動適用されるか確認 $ sudo systemctl is-enabled netfilter-persistent enabled

ただし、OllamaをLoopbackバインドにしている場合(前セクション参照)、そもそも外部から11434番に到達できないため、レート制限の実効的な対象はNginxの443番ポートの手前に設定するほうが効果的です。11434番への直接アクセスが起こり得る構成(Loopbackバインドを使っていない)の場合にのみ、このiptablesルールを追加してください。

Nginxリバースプロキシとufwをセットで使う多層防御の構成

本番環境のチーム運用で最も安全性が高い構成は、3層の防御を組み合わせることです。

・第1層: Ollama自体は127.0.0.1:11434(Loopbackのみ)でListenする
・第2層: NginxがHTTPS(443番)でチームへ公開し、TLS終端とBasic認証を担当する
・第3層: ufwで443番はチームサブネットのみ許可。11434番は明示的にDENYする

この構成をufwで実現するルールセットは以下の通りです。

# SSHはサブネット内からのみ許可 $ sudo ufw allow from 192.168.1.0/24 to any port 22 proto tcp # HTTPSはチームサブネットのみ許可 $ sudo ufw allow from 192.168.1.0/24 to any port 443 proto tcp # 11434番は全拒否(Loopbackバインド+明示的DENYで二重ブロック) $ sudo ufw deny 11434 $ sudo ufw status numbered

To Action From -- ------ ---- [ 1] 22/tcp ALLOW IN 192.168.1.0/24 [ 2] 443/tcp ALLOW IN 192.168.1.0/24 [ 3] 11434 DENY IN Anywhere

Nginxのproxy_pass設定はOllamaのLoopbackアドレスへ向けます。`/etc/nginx/sites-available/` の設定ファイルで以下の箇所を確認してください。

# Nginx設定のproxy_passをLoopbackアドレスに向ける $ grep proxy_pass /etc/nginx/sites-available/ollama proxy_pass http://127.0.0.1:11434; # 設定をテストして問題がなければリロード $ sudo nginx -t && sudo systemctl reload nginx

OllamaをLoopbackバインドに絞り、外部公開はNginxに任せる構成にすると、ufwの設定ミスが万が一あっても、プロセスレベルで直接接続できない二重の壁になります。社内でChatGPTが使えない環境でローカルLLMを活用する背景については社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢も参考にしてください。

設定後の検証方法|外部から本当にブロックされているか確認する

ファイアウォール設定は「設定した」だけでは安心できません。外部ホストから実測して確認することが重要です。知人のインフラエンジニアから聞いた話では、ufw設定が完了したつもりでnmapを実行したら `open` と表示されて青くなった、というケースが実際にあったそうです。設定後の実測検証は省略しないことをすすめます。

1. 別ホストからcurlで直接確認する

社内の別PCや、VPS上で以下を実行します(OllamaサーバーのIPを仮に 192.168.1.100 とします)。

# サブネット外のホスト(例: 192.168.2.10)からアクセスを試みる $ curl -v http://192.168.1.100:11434/ --connect-timeout 5 curl: (28) Connection timed out after 5001 milliseconds

タイムアウトであればufwがパケットをドロップしています。`Connection refused` ではなく `timed out` が返るのが正常なブロック状態です。許可したサブネット内のホストからはアクセスできることも確認します。

# 許可サブネット内(例: 192.168.1.50)からアクセスを確認 $ curl http://192.168.1.100:11434/api/tags {"models":[{"name":"llama3.3:70b-instruct-q4_0","modified_at":"2026-08-01T10:00:00Z","size":42123456789}]}

2. nmapでポートスキャン結果を確認する

# 外部ホストからnmapで11434番をスキャン $ nmap -p 11434 192.168.1.100 Host is up (0.00042s latency). PORT STATE SERVICE 11434/tcp filtered unknown Nmap done: 1 IP address (1 host up) scanned in 1.32 seconds

`filtered` と表示されればufwがパケットをドロップしています。`open` と表示される場合はルールが正しく機能していないため、`sudo ufw status numbered` でルール一覧を再確認してください。

3. サーバー側でufwのログを確認する

# ブロックされたパケットのログを確認(ufwログが有効な場合) $ sudo tail -20 /var/log/ufw.log Aug 6 10:23:45 server kernel: [UFW BLOCK] IN=eth0 OUT= MAC=aa:bb:cc:dd:ee:ff:... \ SRC=203.0.113.10 DST=192.168.1.100 LEN=60 ... DPT=11434 ...

`DPT=11434` の `UFW BLOCK` ログが記録されていれば、外部からのアクセス試行が正しくブロックされています。ログが表示されない場合は `sudo ufw logging on` でロギングを有効化してください。

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

1. ufw allowを追加したのに許可サブネットからもアクセスできない

ufwのルール評価順序が問題の場合があります。`ufw status numbered` で確認し、DENYルールがALLOWルールより前にある場合は、ALLOW側を前に挿入します。

# 現状確認(DENYが[ 1]でALLOWが[ 2]の場合は逆転している) $ sudo ufw status numbered [ 1] 11434 DENY IN Anywhere [ 2] 11434/tcp ALLOW IN 192.168.1.0/24 # ALLOW側をDENYより前(位置1)に挿入する $ sudo ufw insert 1 allow from 192.168.1.0/24 to any port 11434 proto tcp # 元のルール2(古いALLOW)と古いDENYを削除して整理する $ sudo ufw status numbered # 番号を再確認してから削除

2. systemd restart後にOllamaが起動しない

override.confの記述に問題がある場合です。確認手順を実行してください。

$ sudo systemctl status ollama # エラー例: Failed at step ENVIRON spawning... # → override.confの構文を確認する $ sudo cat /etc/systemd/system/ollama.service.d/override.conf [Service] Environment="OLLAMA_HOST=127.0.0.1:11434" # 構文エラーがないか検証 $ sudo systemd-analyze verify /etc/systemd/system/ollama.service.d/override.conf

3. NginxからLoopbackの11434番に接続できない

Loopbackバインドに変更した後、NginxのSELinuxポリシーがLinuxサーバーの種類によってはLocalhostへの接続を制限する場合があります(主にCentOS系)。Ubuntu Serverでは通常発生しませんが、念のため確認します。

# Nginxのエラーログを確認 $ sudo tail -20 /var/log/nginx/error.log # proxy_passのアドレスが127.0.0.1になっているか確認 $ grep proxy_pass /etc/nginx/sites-available/ollama proxy_pass http://127.0.0.1:11434; # Loopback上でOllamaが実際にListenしているか再確認 $ ss -tlnp | grep 11434 LISTEN 0 4096 127.0.0.1:11434 0.0.0.0:* users:(("ollama",pid=23456,fd=7))

4. OLLAMA_HOST設定後、ollama runコマンドが動かない

`OLLAMA_HOST` をシェルの環境変数として別途設定している場合に競合が起きることがあります。systemdのoverride.confはサービス起動時のみ有効なので、ターミナルから `ollama run` を実行する分には問題なく動作するはずです。

# ターミナルのOLLAMA_HOST環境変数を確認 $ echo $OLLAMA_HOST (空白または未設定が正常) # ollama run でモデルを動かして疎通確認 $ ollama run llama3.3:70b-instruct-q4_0 "ufwの用途を一言で教えて" Linuxのファイアウォール設定を簡単に管理するためのツールです。

まとめ

OllamaのAPIポートをufwとsystemdで保護する手順を整理します。
設定内容 コマンド・設定箇所 効果
サブネット限定許可 sudo ufw allow from 192.168.1.0/24 to any port 11434 proto tcp 指定サブネット外からのアクセスをブロック
Loopbackバインド override.conf: Environment="OLLAMA_HOST=127.0.0.1:11434" プロセスレベルで外部NICへの応答を遮断
11434番の明示的DENY sudo ufw deny 11434 Loopback設定と二重でブロック
多層防御構成 Nginx(443番HTTPS)+ ufw(サブネット443番許可) 11434番を外部に一切見せない設計
接続レート制限 sudo iptables -m recent --hitcount 21 -j DROP 単一IPからの過剰リクエストをブロック
設定後の実測検証 nmap -p 11434 <サーバーIP> filteredと表示されればブロック済み
OllamaにはデフォルトでAPIキー認証がありません。社内ネットワークといえど、アクセス範囲を最小化する設計が基本です。ufwでサブネットを絞り、systemdのOLLAMA_HOSTでLoopbackに縛り、Nginxを通してチームに公開する。この3段構えを入れておけば、設定ミスが1箇所あっても他のレイヤーが守ってくれます。

20年以上のLinuxサーバー運用経験から言えば、セキュリティ設定は「したつもり」が一番危険です。ufw設定後は必ずnmapとcurlで実測検証し、`filtered` と `timed out` の両方を確認してから完了とみなしてください。

利用するモデルの選定についてはローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイントも合わせて参照すると、セキュアな環境でどのモデルを動かすかの判断材料が揃います。

ローカルLLMのセキュア運用を2日間のハンズオンで体験する

ufwのポート制限だけでなく、Nginx多層防御・systemdチューニング・モデル選定まで実機GPU環境で手を動かしながら習得したい方向けに、「ローカル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人材の育成に取り組んでいる。

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