Firewallと親和性の高いTFTPサーバを作った


Firewallと親和性の高いTFTPサーバを作った

TFTP プロトコルは、最初のクライアント→サーバの「書込/読込要求」のみ 69/udp へ通信で、その後のデータのやり取りのパケットは、highポート間通信となっている。

今回、.NET4で作り直したtftpサーバは、dataportをserverポートと同一にする事で、データ交換のパケットも 69/udpで通信する事もできる。

元々、VB6&VC6++(ATL-COM)で作っていたものを、.NET2 で作り直した事を忘れて .NET4 で作り直した。

sTFTPnet のインストール

  1. .NET4で作り直したtftpサーバからダウンロードする。
  2. lzh形式を解凍する。
  3. 実行する。
  4. 以上

sTFTPnet の使い方

通常は、CUI なプログラムで動作させることができる

CUI プログラムなので、コマンドプロンプトで引数無しに実行すれば usageがでる。

C:\>sTFTPnet.exe
sTFTPnet.exe ver 3.0.0.0
                            created by [email protected]

      Compiled ver.v4.0.30319
           Run ver.v4.0.30319(Win64)
sTFTPnet.exe [options]
  -Path <<publicpath>>
  -ServerHost <<serverbind>>
  -ServerPort <<serverport>>(Default=69/udp)
  -DataPort <<dataPort>> (0: efemeral(default)
  -Timeout <<sec>>(>3)(Default=30)
  -Registry
  -Install
  -Uninstall
  -Service

必須のオプションは、「-path」で指定する公開ディレクトリ。

  • ServerHost の既定値は「0.0.0.0」と「0::0」(IPv4/v6 の任意のアドレス)で待機するようになる
  • ServerPort の既定値は「69」
  • DataPort の既定値は「0」。エフェメラルポートなので、任意の highポート
  • Timeout は通信での相手の返事待ち時間。既定値は30秒

通常の使い方

とりあえず「-path」だけ指定すれば、一般的な TFTPサーバ(データはhigh⇔highで通信する)のようにふるまう。

一応「ServerPort」は69以外にできるけど、一般的な TFTPクライアントが接続先として69以外を指定できないので、あまり意味はないかもしれない。

「Timeout」の既定値の「30秒」は少し長すぎるかもしれないので、そう思ったら指定してくれ

Firewallと親和性を高める

「-dataport 69」とすると、データ通信も 69/udp で通信するようになるので、Firewall と親和性が高くなると思う。

つまり、high⇔low(69/udp) は開いている可能性はそれなりにあるが、high⇔high間は、ほとんど開いていないだろう。
このモードの場合は、Firewallでhigh⇔low(69/udp)だけ開ければ TFTP が使えるようになる。

Firewallと親和性を高める2

「dataport」を「0」と「ServerPort」以外にすると、データ通信は、そのポート固定となるので、
「serverPort」と「dataPort」の通信をFirewallで開けてあげれば、Firewall越しに通信できる。

Firewallと親和性を高める2(イメージ)

この図で「highB」を「69」以外で固定するイメージ

レジストリ

「-Registry」で、設定をレジストリ「HKLM\Software\sTFTPnet」から読むようにできる。

または、NT サービスとして動作する場合は、レジストリからのみ設定は読まれる

NTサービスとして動作させる

高い権限で以下を実行すると、NT サービスとして登録される。

sTFTPnet.exe -install

NTサービスとして動作する場合、設定はレジストリ「HKLM\Software\sTFTPnet」から読まれる。
同梱しているstftp.regを参考にレジストリに設定を記述すること

  • 手動
  • アカウントは「Network Service」

なので、以下は「Network Service」でアクセス出来るように権限変更が必要

  • sTFTPnet.exe 本体
  • 公開ディレクトリ
  • 設定が保存されているレジストリ「HKLM\Software\sTFTPnet」以下

NTサービスとして動作する際のログ

イベントログ(Application)に出力する

GUI ラッパー

GUI ラッパー「sTFTPnetGUI.exe」も同梱した。

使用条件

当然ですけど、悪用厳禁ですよ。