TFTP による些細な転送、パート 3: 使用法

4月 27, 2021
admin

前回の記事では、TFTP を紹介し、なぜそれを使用したいのかを説明し、さまざまな設定オプションについて見てきました。 今度は、いくつかのファイルを移動してみましょう。

テスト 1、2、3

サーバーをテストするには、接続するためのクライアントが明らかに必要です。 ありがたいことに、非常に簡単にインストールできます。

# apt-get install tftp

Red Hat 派生製品では、次のようにクライアントのインストールを管理します。

# yum install tftp

以下のようなコマンドを使用してサーバーの IP アドレスを検索すると、どこからでも TFTP サーバーに接続できます (TCP Wrappers 設定または IPtables ルールによると、当然ながらそうなる)。

# ip a

一度IPアドレスがわかれば、接続はとても簡単です。 クライアントからサーバにこのように接続できます:

# tftp 10.10.10.10

これで接続されたはずです。 (うまくいかない場合は、ファイアウォールを確認するか、TFTPのサーバーのIPアドレスのポート69に「telnet」してください)。

tftp> statusConnected to 192.168.0.9.Mode: netascii Verbose: off Tracing: offRexmt-interval: 5 seconds, Max-timeout: 25 seconds

この時点で、私はこのコマンドをタイプして冗長出力を使用することを好みます:

tftp> verbose

バイナリまたはプレーンテキストファイルをダウンロードするために、プレーンテキストをタイプすることを選択することができます。

tftp> ascii

または、バイナリを正しくダウンロードするように強制することもできます:

tftp> binary

ダウンロードするコンテンツを与えるために、次のように簡単なテキスト ファイルを作成しました:

# echo hello > HERE_I_AM

これは、HERE_I_AM ファイルに「こんにちは」の文字が含まれているということを意味します。 それからそのファイルをデフォルトのTFTPディレクトリに移動しました。このディレクトリは以前メイン設定ファイルの /etc/inetd.conf で使用されているのを見たことがあります。

これは単なるプレーン テキスト ファイルなので、バイナリ モードを有効にする必要はほとんどなく、すでに verbose と書いてあるので、あとは単にファイルを転送するだけです。 単純に、受信は「get」、配置は「put」です。 私のサンプルファイルHERE_I_AMは次のように取得できます。

tftp> get HERE_I_AMgetting from 192.168.0.9:HERE_I_AM to HERE_I_AM Received 7 bytes in 0.1 seconds 

上記の例では、そのモードが有効になっているときに冗長出力を提供しています。 バイナリーモードではなく、単なる「netascii」モードを使っていることなど、有用な情報を得ることができます。 さらに、何バイトがどれくらいの速さで転送されたかを見ることができます。 この場合、データは7バイトの大きさで、1秒間に半キロバイト(またはそれ以上)、10分の1秒を要しました。

tftp> get HERE_I_AMReceived 7 bytes in 0.0 seconds

TFTP サーバーのポート番号を難読化する必要がある場合、/etc/services ファイルを編集した後、次のようにクライアント ソフトウェアと接続する必要があります。 この構文で実現できます:

# get one.txt two.txt three.txt four.txt five.txt

問題が発生した場合、いくつかのトラブルシューティングのオプションを検討することができます。 例えば、ブロードキャストストームによってネットワークリンクが飽和していたり、挙動不審なデバイスによってネットワークがおかしくなっている可能性があります。 しかし、タイムアウトを調整することができることを学ぶことは喜ばしいことです。

tftp> rexmt 10

これは、パケットごとの再送信タイムアウトを10秒に設定しています。

トランザクション全体の合計転送タイムアウトを設定するには、次のように設定を調整します。

tftp> tracePacket tracing on.

さて、各転送は以下のように非常にノイズが多いように見えますが、これはトラブルシューティングに役立つはずです:

tftp> get HERE_I_AMsent RRQ <file=HERE_I_AM, mode=netascii>received DATA <block=1, 512 bytes> sent ACK <block=1> received DATA <block=2, 512 bytes>sent ACK <block=2> received DATA <block=3, 512 bytes>

上記の情報から、どの時点で転送が失敗したか、おそらく動作パターンを見出すことができるはずです。

ちなみに、TFTP クライアント プロンプトを終了する場合は、「q」キーを押せば十分です。

このセクションでは、TFTP サーバーを構成し、そこからファイルを受信する方法について見てきました。 前述のように、このソフトウェアで実験する場合、そして特に実稼働環境に導入する場合は、ポート 69 を外部からファイアウォールすることをお勧めします。

IPtables または TCP Wrappers を使用して、少数のマシンからしかアクセスできないようにサーバーをロックダウンすることをお勧めします。 古い技術ではありますが、TFTP は間違いなく今でもツールボックスの中にある便利なツールであり、起動時にワークステーションやサーバーに設定を渡すためだけに有用であると切り捨てるべきではありません。

Systemd

ちなみに、最近の systemd システムで TFTP サーバーを起動および停止 (または設定変更後に再起動) するには、必要に応じて “stop” を “restart” または “start” に置き換えるこのコマンドを実行できます。

# systemctl stop openbsd-inetd

古いシステムでは、ほとんどの場合これらのコマンドのうちの一つで十分であることを思い出す必要はないでしょう。

# /etc/init.d/openbsd-inetd start# service openbsd-inetd restart

単に openbsd-inetd をお使いのディストリビューションに適した inetd または xinetd スクリプトの名前に変更するだけです。 このコマンドは最新の systemd バージョンでも動作しますが、結果として得られるファイルリストをよく見る必要があります。

EOF

もしあなたが自分の手で人生を歩み、インターネット上で TFTP を提供することに決めたなら、一言警告を申し上げておきましょう。 NAT です。 ネットワーク アドレス変換がリモート接続に関与している場合、TFTP 転送が UDP を使用するという事実のために、苦労することがあります。 これを動作させるには、NATルーターが少し高度なプロキシとして動作する必要があります。 有名なセキュリティソフトウェアであるpfSenseは、明らかにそれを支援することができます。

ここまで、TFTPの機能のいくつかを見てきました。 明らかに、優れた TFTP がわずかな構成で迅速かつ効果的に使用できる便利なツールである場合、特定の状況があります。 このような場合、sFTP および標準 FTP がより適切であるかもしれません。 しかし、これらのパッケージを探す前に、必要な機能がTFTPのツールキットの中にあるかどうか、ざっと調べてみてほしい。 意外な発見があるかもしれません。 結局のところ、今日私たちが使用しているツールの多くは、TFTP が登場した時代に由来しています。

Chris Binnie は、20 年の Linux 経験を持つ技術コンサルタントで、Linux Magazine と Admin Magazine のライターでもあります。 彼の新しい本「Linux Server Security: Hack and Defend」では、高度な攻撃を仕掛け、サーバーを見えなくし、複雑なパスワードを解読する方法を教えてくれます。

Read previous articles:

Trivial Transfers with TFTP, Part 1.以前の記事を読む。

TFTP による自明な転送 (パート 2): 設定

:なぜそれを使用するのか?

コメントを残す

メールアドレスが公開されることはありません。