
LinuxでSambaを導入してファイルサーバーを構築したものの、Windows PCのエクスプローラーから \\サーバーのIPアドレス と入力しても「ネットワークパスが見つかりません」「アクセスできません」というエラーが表示されて接続できないケースが頻発します。
pingコマンドを実行するとLinuxサーバーからの応答はあるため、ネットワーク自体は繋がっているように見えます。この場合、最も疑うべき原因の1つが、Linux側のファイアウォール(ufw)によってSambaの通信ポートが遮断されていることです。
Sambaは複数のポート(TCPおよびUDP)を利用してファイル共有や名前解決を行っています。どのポートを開放すべきかを正しく把握していないと、不要なポートを開けてしまったり、逆に必要なポートが閉じていて接続に失敗したりします。
この記事では、Sambaで使用する主要な4つのポート番号とその役割を一覧表で整理した上で、UbuntuやDebianのファイアウォール管理ツール「ufw」を使った安全なポート開放手順を解説します。さらに、WindowsのPowerShellからポート疎通を確認するコマンドや、接続できないときのトラブルシューティングまで網羅しています。
この記事で行うこと
前提条件・対象読者
本記事は以下のような環境や読者を想定しています。
【結論】Sambaで使用する4つのポート番号一覧表
Sambaでファイル共有やPCの検出を行う際に使用されるポート番号は、主に以下の4つです。
| ポート番号 | プロトコル | サービス名 | 主な役割 |
|---|---|---|---|
| 445 | TCP | microsoft-ds (Direct Hosted SMB) | 現代のWindows/Mac/Linuxによるファイル共有の主通信(SMB2/SMB3) |
| 139 | TCP | netbios-ssn (NetBIOS Session Service) | 旧来のNetBIOS over TCP/IPを用いたファイル・プリンター共有 |
| 137 | UDP | netbios-ns (NetBIOS Name Service) | NetBIOSコンピューター名の名前解決・検索 |
| 138 | UDP | netbios-dgm (NetBIOS Datagram Service) | ネットワーク上のブラウジングやデータグラム通信 |
現代のネットワーク(Windows 10/11など)では、ファイル共有そのものは「TCP 445」のみで通信が完結します。ただし、エクスプローラーの「ネットワーク」一覧にコンピューター名を表示させたり、古い機器やNetBIOS名を介してアクセスしたりする場合には、137/UDP、138/UDP、139/TCPも必要となります。
各ポート番号の役割と通信プロトコル(TCP 445 / TCP 139 / UDP 137 / UDP 138)
各ポートが具体的にどのような役割を果たしているかを詳しく解説します。
TCP 445(Direct Hosted SMB)
TCP 445は、NetBIOSを介さずにTCP/IP上で直接SMB(Server Message Block)プロトコルを実行するためのポートです。
Windows 2000以降のWindowsや最新のmacOS、Linuxでは、このポートがファイル共有の標準通信ポートとして利用されます。SMB2やSMB3といった近年のセキュアなプロトコルもすべてTCP 445上で動作します。
IPアドレスを直接指定して \\192.168.1.10\share のようにアクセスする場合、サーバー側のTCP 445ポートさえ開放されていれば、共有フォルダーの読み書きが可能です。Sambaサーバーにおいて最重要となるポートです。
TCP 139(NetBIOS Session Service)
TCP 139は、NetBIOS over TCP/IP(NBT)のセッションサービスを提供するポートです。
TCP 445が登場する以前のWindows 95/98/NTなどの古い環境でSMB通信を行うために必須とされていました。
現代の環境では、TCP 445への接続に失敗した際のフォールバック(代替)手段として利用されることがありますが、通常はTCP 445が優先されます。古いクライアント機器(レガシーな複合機や古い組込み機器など)が混在している環境では開放が必要になるケースがあります。
UDP 137(NetBIOS Name Service)
UDP 137は、Windowsネットワークにおけるコンピューター名とIPアドレスを紐付ける名前解決サービスです。DNS(Domain Name System)のNetBIOS版と考えると理解しやすいでしょう。
Windowsから \\LINUX-SERVER\share のようにコンピューター名(ホスト名)でアクセスする際、DNSサーバーに登録されていないローカル環境では、このUDP 137を使ってブロードキャストで対象PCを探します。
このポートが閉じていると、IPアドレス指定(\\192.168.1.10\)ではアクセスできるのに、サーバー名指定(\\LINUX-SERVER\)ではアクセスできないという現象が発生します。
UDP 138(NetBIOS Datagram Service)
UDP 138は、NetBIOSにおけるコネクションレス通信(データグラム配信)を担当するポートです。
主に、Windowsのエクスプローラーにある「ネットワーク」画面を開いたときに、同一ネットワーク上に存在するPCやファイルサーバーを一覧表示(ネットワークブラウジング機能)するために使用されます。
マスタブラウザと呼ばれる代表PCとの間で稼働状況のやり取りを行う際に利用されます。
Ubuntu/Debianでufwを使ってSambaの通信を許可する手順(ufw allow samba)
UbuntuやDebianでSambaをインストールすると、ufw用のアプリケーションプロファイル(設定定義)が自動的に登録されます。これを利用すると、ポート番号を個別に指定することなく、ワンストップで必要な全ポートをまとめて許可できます。
手順1:ufwのアプリケーション一覧を確認する
まず、Sambaのプロファイルが正しく認識されているか確認します。
sudo ufw app list
実行結果の中に Samba が表示されていれば準備完了です。
手順2:プロファイルの詳細内容を確認する
Sambaプロファイルがどのポートを対象としているか確認するには、以下のコマンドを実行します。
sudo ufw app info Samba
出力例:
Profile: Samba
Title: LanManager-like file and printer server for Unix
Description: LanManager-like file and printer server for Unix
Ports:
137,138/udp|139,445/tcp
このように、137/UDP、138/UDP、139/TCP、445/TCPが定義されていることが確認できます。
手順3:Sambaの通信を許可する
プロファイル名を指定して通信を許可します。
sudo ufw allow Samba
もし大文字小文字の関係で環境によってエラーが出る場合は、すべて小文字で sudo ufw allow samba と入力しても動作します。
手順4:ファイアウォールの設定状態を確認する
設定が反映されたか確認します。
sudo ufw status verbose
出力結果に以下のようなルールが追加されていれば成功です。
445/tcp ALLOW IN Anywhere
139/tcp ALLOW IN Anywhere
137/udp ALLOW IN Anywhere
138/udp ALLOW IN Anywhere
特定のサブネット(LAN内のみ)からSamba接続を許可する安全設定
前述の sudo ufw allow Samba は、すべてのネットワーク(Anywhere)からの接続を許可します。
自宅やオフィスのローカルネットワーク内だけで利用する場合、Sambaポートをインターネットや外部ネットワークに向けて無条件に開放することはセキュリティ上非常に危険です。
過去にはSMBの脆弱性を狙ったマルウェア(WannaCryなど)が猛威を振るった事例もあります。Sambaへのアクセスは、必ず同一LAN内のIPアドレス範囲(サブネット)に限定して許可することを強く推奨します。
手順1:現在全開放しているルールがあれば削除する
既に全開放のルールを追加している場合は、番号付きで状態を確認して削除します。
sudo ufw status numbered
ルール番号を確認した上で、該当する番号を指定して削除します。
sudo ufw delete <ルール番号>
手順2:特定サブネットからのみSamba接続を許可する
例として、家庭内LANのIPアドレス範囲が 192.168.1.0/24 の場合、その範囲からのみSambaプロファイルの通信を許可するコマンドは以下の通りです。
sudo ufw allow from 192.168.1.0/24 to any app Samba
もし自宅のネットワークが 192.168.0.0/24 や 10.0.0.0/24 の場合は、環境に合わせてサブネットの数値を変更してください。
手順3:ポート番号を個別にLAN限定で許可する場合
アプリケーションプロファイルを使わず、ポート番号を明示して設定したい場合は、以下のように1行ずつ指定します。
sudo ufw allow from 192.168.1.0/24 to any port 445 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 139 proto tcp
sudo ufw allow from 192.168.1.0/24 to any port 137 proto udp
sudo ufw allow from 192.168.1.0/24 to any port 138 proto udp
名前解決をIPアドレス直接指定やローカルDNSのみで行い、NetBIOS関連のポートを開放したくない場合は、上記の「ポート445(TCP)」のみを許可する設定に絞り込むことも可能です。
Windows側から接続できない場合のポート疎通確認コマンド(Test-NetConnection)
Linux側でufwの設定を完了したにもかかわらず、Windowsのエクスプローラーから共有フォルダーが開けない場合は、ネットワーク層でポートが実際に開いているかをWindows側から検証します。
Windows標準のpingコマンドはICMPプロトコルを使用するため、「pingは通るけれどSambaのポート445は通らない」という状態を判別できません。そこで、PowerShellの Test-NetConnection コマンドを使用します。
手順1:PowerShellを起動する
Windowsキーを押し、「PowerShell」と入力してWindows PowerShellを起動します。
手順2:Test-NetConnectionを実行する
以下のコマンドを実行します。<サーバーのIPアドレス> の部分は、実際のLinuxサーバーのIPアドレス(例: 192.168.1.50)に置き換えてください。
Test-NetConnection -ComputerName 192.168.1.50 -Port 445
短縮形のエイリアスを使って、以下のように入力しても同様に実行できます。
tnc 192.168.1.50 -p 445
手順3:実行結果を確認する
数秒後に実行結果が出力されます。最下行にある TcpTestSucceeded の値を確認してください。
成功時の出力例:
ComputerName : 192.168.1.50
RemoteAddress : 192.168.1.50
RemotePort : 445
InterfaceAlias : Wi-Fi
SourceAddress : 192.168.1.20
TcpTestSucceeded : True
TcpTestSucceeded : True と表示されていれば、WindowsとLinuxサーバー間のポート445の通信は正常に成立しています。この場合、接続できない原因はファイアウォールではなく、Sambaの設定ファイル(smb.conf)の構文誤り、共有フォルダーのLinuxファイルパーミッション、またはユーザー認証(ユーザー名・パスワード)の問題に絞り込めます。
失敗時の出力例:
WARNING: TCP connect to (192.168.1.50 : 445) failed
ComputerName : 192.168.1.50
RemoteAddress : 192.168.1.50
RemotePort : 445
InterfaceAlias : Wi-Fi
SourceAddress : 192.168.1.20
TcpTestSucceeded : False
TcpTestSucceeded : False と表示された場合は、通信がどこかで遮断されています。Linux側のufwルール、Sambaデーモンの稼働状態、または経由するルーターやWi-Fiの隔離機能(プライバシーセパレーターなど)を疑う必要があります。
よくあるトラブルと確認ポイント(ルーター越えのポート445制限など)
ポート開放後も接続できない、あるいは疎通確認でFalseになる場合によくある原因と確認ポイントをまとめます。
1. インターネット経由・ルーター越えでのポート445制限(ISPブロック)
外出先や遠隔地から自宅のSambaサーバーにアクセスしようとしてポート開放を行う場合、多くのインターネットプロバイダー(ISP)や市販のブロードバンドルーターによって、ポート445の外部通信は意図的に遮断(ブロック)されています。
これは、過去に猛威を振るったランサムウェアやワームがポート445を悪用して感染拡大した歴史があるため、セキュリティ保護の観点からWAN側のポート445通信を遮断する仕様が業界標準となっているためです。
インターネット越しに自宅や社内のファイルサーバーへアクセスしたい場合は、ポート445を直接インターネットに公開するのではなく、WireGuardやOpenVPN、TailscaleなどのVPNを構築し、VPNトンネル経由で接続するのが鉄則です。
2. Sambaデーモン(smbd/nmbd)が起動していない
ファイアウォールが開いていても、Linux側でSambaサービス自体が停止していると通信は拒否されます。
Linuxサーバー上で以下のコマンドを実行し、サービスの状態を確認してください。
sudo systemctl status smbd
Active: active (running) となっていれば正常です。もし inactive や failed になっている場合は、設定ファイル smb.conf に誤りがないか確認し、サービスを起動・再起動します。
sudo testparm
sudo systemctl restart smbd
3. Wi-Fiルーターのプライバシーセパレーター機能
ノートPCからWi-Fi経由で接続している場合、Wi-Fiルーターの「プライバシーセパレーター」「ネットワーク分離」「APアイソレーション」機能が有効になっていると、同一Wi-Fi内の端末同士や、Wi-Fi端末と有線LAN接続されたサーバー間の直接通信が遮断されます。
この機能がオンになっていると、pingもポート疎通もすべて通らなくなります。ルーターの管理画面で端末間通信が許可されているか確認してください。
4. Windows 10/11のゲストアクセス無効化とSMBv1廃止
Windows 10やWindows 11では、セキュリティ強化のため「パスワードなしのゲストアクセス(未認証のゲストログオン)」がグループポリシーで既定で無効化されています。
Samba側で guest ok = yes を設定していても、Windows側でブロックされて接続できないことがあります。
安全に利用するためには、Linux側でSamba用ユーザーを作成してパスワード認証を行うか、接続時に明示的にユーザー名とパスワードを入力してください。また、古いNAS等で使われていた危険な「SMBv1」は現代のWindowsでは標準で無効化されており、Samba側もSMB2/SMB3に対応した設定であることが前提となります。
次に読むおすすめ記事
Ubuntu・Linuxの初期設定から開発環境、ファイル共有サーバー構築やトラブルシューティングまでを体系的に学びたい方は、以下の完全ガイドもあわせて参考にしてください。


