Q

現在,ファイアウオールの管理を行っています。ファイル・サーバーをUNIX上のSambaで構築しており,ファイアウオールでは137/udp,138/udp,139/tcpポートを許可することで,問題なくファイル共有などは行えています。

 しかし,ファイアウオールのログに445/tcpポートへのアクセスが大量に記録されています。調べたところ,Windows 2000やWindows XPクライアントからは,139/tcpポートに接続する前に,必ず445/tcpポートへのアクセスを試すようです。実害がないので現状のまま放置していますが,できれば445/tcpポートへのアクセス試行を抑止したいと考えています。何か方法がありますか。

 また,調べたところ,445/tcpポートはWindows 2000から実装されているDirect Hosting of SMBという機能のようです。これは139/tcpとどういった違いがあるのでしょうか。

A

Windows 2000以降のOSでファイル/プリント・サーバーに接続する際には,従来から用いられてきたNBT(NetBIOS over TCP/IP)の139/tcpポートに加えて,445/tcpポートに対してのTCPコネクションの確立も試行します。両方ともに応答があった場合は,139/tcpを強制的に切断して,以降445/tcpのみを使用する実装になっているようです。

 実際にネットワーク・モニタを使って確認してみましょう。図4はSMBセッション開始時のパケットをキャプチャしたものです。1行が1つのフレームに当たり,[説明]カラムでそのフレームのフラグの様子や送信元/送信先ポートを参照できます。


△ 図をクリックすると拡大されます
図4●Windows 2000のSMBセッション確立時のパケット・キャプチャ

 TCPのセッションは,(1)確立を試みるホストからSYNフラグの立ったフレームを送信,(2)接続相手がACKフラグとSYNフラグの立ったフレームを返信,(3)これに対してACKフラグの立ったフレームを送信,という3つの手順で確立されます。図4では,フレーム1,3,4がこの3つの手順に当たり,クライアント(CLIENT)の2658/tcpとサーバー(SERVER)の445/tcpとのセッションが確立していることが読み取れます。このセッションは,続くフレーム5,8,および図に現れていないそれ以降のフレームで継続されています。

 これと並行して,フレーム2,6では,139/tcpに対するセッション確立試行も進んでいます(クライアントのポートは2659/tcp)。ところが,フレーム4で既に445/tcpに対するセッションが確立したため,クライアントはACKを送信せず,代わりにフレーム7でRESETフラグを立てたフレームを送信して139/tcpに対するセッション確立の試行を打ち切っていることが分かります。

レジストリ編集で抑止できる
 質問にあるように,ファイアウオールで445/tcpを許可していなくても,139/tcpが許可されていればSMBセッションは確立されます。しかし,その場合でも445/tcpを使った接続は必ず試みられるので,結果的に445/tcpへのアクセスがファイアウオールに大量に記録されてしまいます。


△ 図をクリックすると拡大されます
図5●NetBIOS over TCP/IPを使わない設定は容易

 445/tcpのみを使用したい場合は,TCP/IPプロトコルのプロパティの[詳細設定]-[WINS]タブで139/tcpを使ったアクセスを無効にできます(図5)。しかし,逆に139/tcpのみを使用したいという場合は,レジストリを編集する必要があります。図6のレジストリ・キーを設定してください。


△ 図をクリックすると拡大されます
図6●SMBセッションをNetBIOS over TCP/IPのみで行う設定

 これにより,445/tcpが無効となり,常に139/tcpを用いた通信が行われるようになります。当然ですが,この設定を行うと,NBTを無効にしたマシンとはファイル共有などができなくなります。

NetBIOS固有の環境が不要に
 最後にDirect Hosting of SMBについて説明しましょう。これは,図7のように従来NetBIOSインターフェース上に実装していたSMBを直接TCP/IP上に実装したプロトコルです。「Direct Hosting of SMB」という名称は,TCP/IPが(NetBIOSを介さずに)SMBを直接ホストしていること(Direct Hosting)を意味しています。

図7●NetBIOS over TCP/IPとDirect Hosting of SMBのスタックの違い
(a)NetBIOS over TCP/IP(NBT)では,SMBをNetBIOSインターフェース上に実装している。一方,(b)Windows 2000以降に実装されているDirect Hosting of SMBは,SMBが直接TCP/IP上に実装されている。

 SMBセッションが開始された後の処理は従来と同じですが,セッション確立時にNetBIOSを用いないため,NetBIOS名の名前解決が不要となります(図8)。このため,WINS(Windowsインターネット・ネーム・サービス)サーバーを構築する必要がありません。また,既にTCPレイヤーで名前を解決し,通信先を特定しているにもかかわらず,再度NetBIOSレイヤーで名前解決を行うという冗長さも解消されます。

図8●セッション確立時の処理シーケンスの違い
Direct Hosting of SMBでは,NetBIOS over TCP/IP(NBT)で行われていたNetBIOS名の名前解決がなくなる。WINS(Windows インターネット・ネーム・サービス)が不要になるほか,TCP/IPでのコネクション確立時に既に解決している名前を再度解決するという冗長さも解消されている。

 なお,最新のSamba 3.0系列はDirect Hosting of SMBに対応しています。また,Samba 2.2系列でも,Sambaのプロセスをデーモンとして起動せず,代わりにinetdやxinetdなどで445/tcpを待ち受ける形態にすることで Direct Hosting of SMBを利用する方法があります。

高橋 基信