現在、ファイアウォールの管理を行なっています。ファイルサーバをUNIX上のSamba 2.2.3aで構築しており、137/udp、138/udp、139/tcpポートを許可することで、問題なくファイル共有などは行なえているのですが、ファイアウォールのログに445/tcpポートへのアクセスが大量に記録されているので、調べたところ、Windows 2000やWindows XPクライアントからは、139/tcpポートに接続する前に、必ず445/tcpポートへのアクセスを試行するようです。
とりあえず、実害はないので現状放置していますが、できればこの通信を抑止したいと考えています。何か方法はあるのでしょうか?
また、調べたところ、445/tcpポートはWindows 2000から実装されているDirect Hosting of SMBという機能のようですが、これは139/tcpとどういった違いがあるのでしょうか?
Windows 2000以降では、ファイル・プリンタ共有を行なう際に、従来から用いられてきた139/tcpポートを使用するNBT(NetBIOS over TCP/IP)の代わりに、デフォルトでは445/tcpを使用するような実装になっています。
実際にネットワークモニタを使って確認すると、Windows 2000以降のマシンがファイル・プリンタサーバに接続を行なう際は、図1のように139/tcpと445/tcpポートの両方に対してTCPコネクションの確立を試行し、両方ともに応答があった場合は、139/tcpの方を強制的に切断して、以降445/tcpのみを使用する実装になっているようです。
質問にあるように139/tcpのみを許可している場合は、445/tcpからの応答がないため、最終的に139/tcpによるTCPコネクションが使用されますが、結果として445/tcpによる接続試行のログが大量に記録されてしまいます。
445/tcpのみを使用したいという場合は、TCP/IPプロトコルのプロパティ(図2)の画面で「NetBIOS over TCP/IP を無効にする」を選択することで簡単に行なえます。
なお、レジストリを直接変更したい場合は、以下のレジストリを修正してください。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters\Interfaces\Tcpip_インタフェース名 REG_DWORD: NetBIOSOptions : 0(既定値), 1(有効にする), 2(無効にする)
しかし、今回のように139/tcpのみを使用したいという場合は、以下のレジストリを修正する必要があります。
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NetBT\Parameters REG_DWORD: SMBDeviceEnabled : 0
これにより、445/tcpが無効となり、常に139/tcpを用いた通信が行なわれるようになります。なお、この設定を行なった場合、当然ですがNBTを無効にしたマシンとはファイル共有などができなくなります。
最後にDirect Hosting of SMBについて説明しましょう。これは、図xxのように従来NetBIOSインタフェース上に実装していたSMBを直接TCP/IP上に実装したプロトコルになります。「Direct Hosting of SMB」とは、NetBIOSを介さず、直接(Direct)TCP/IP上にホスト(Hosting)しているSMBということを意味しています。
このため、図4のようにセッション確立時のNetBIOS名の名前解決も不要となり、WINSサーバの構築が不要になる他、すでにTCPレイヤで名前解決を行ない、通信先を特定しているにも関わらず、再度NetBIOSレイヤで名前解決を行なうという冗長さも解消されています。
一度SMBセッションが開始された後の処理は従来と変わりません。
なお、実は最新のSamba 3.0系列であれば、Direct Hosting of SMBに対応しています。
またSamba 2.2系列であっても、Sambaをデーモンとして起動せず、inetdやxinetdなどを使って、smbdを445/tcpポートで待ち受けさせる形をとることで、Direct Hosting of SMBを使用することも可能です。inetdから起動することによるデメリットもあるので、単純にこの方式をとることがよいとはいえませんが、対処策の一つとして頭の片隅に入れておくと良いかも知れません。