0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-01-14

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

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

TFTP シーケンス

今回、.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 active@window.goukaku.com

      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 が使えるようになる。

こんな感じで、high⇔69/udpが開いているだけで通信できるようになる

Firewallと親和性を高める2

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

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

この図で「highB」を「69」以外で固定するイメージ
TFTP シーケンス

レジストリ

「-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」も同梱した。

sTFTPnetGUI.exeの画面

使用条件

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?