中堅プログラマーの備忘録

忘れっぽくなってきたので備忘録として・・・

FTPとは?アクティブモード?パッシブモード?勉強して理解する

なんとなく理解していたFTPについて、初心にもどって勉強してみました。

1.概要

FTPとは【File Transfer Protocol】の略で
ファイル転送の約束事という意味になります。
ファイル転送するときはこういう方法でやりましょう、みたいなことです。

現状は【サーバー】と【クライアント】の間でファイルのやり取りをしたいときに
FTPを選択するのが一般的となっています。

2.通信方法について

では実際にどのようにやり取りをするのかについて考えます。
FTPは2本のコネクションを確立し、データのやり取りを行います。
この2本のコネクションですが

①コントロールコネクション(PI:プロトコルインタプリタ)
②データコネクション(DTP:データ転送プロセス)

に分けられており、実際にデータのやり取りをするのは
【データコネクション】になります。
【コントロールコネクション】は何をするのかというと
ユーザー認証や、ファイル転送方法などの命令や応答などに使われます。

更にFTPには
①アクティブモード
②パッシブモード(PASVモード)
の2つのモードがあります。
これらの違いについては図解で見てみます。

f:id:tsu--kun:20190710170843p:plain

【アクティブモード】は【サーバー】から【クライアント】に対し
【データコネクション】を確立するのに対し
【パッシブモード】は【クライアント】から【サーバー】に
【データコネクション】を確立します。

これは用途によって使い分けする必要があります。
セキュリティーの観点から考えてみると
【サーバー】から見た場合は【アクティブモード】がよくて
【クライアント】からみた場合は【パッシブモード】がいいでしょう。
これは【ファイアーウォール】が関係しているからで
ポート開放に関わってきます。
空ける穴は少ない方がいいのは当然なので
システム構成によって使い分ける必要が出てくるでしょう。

3.セキュリティーについて

FTPはセキュリティーが弱いです。
通信の全てが暗号化されておらず、標的にされる可能性は非常に高いです。
ではFTPなんて使えないじゃないか。。。と言いたくなりますが
暗号化された通信のFTPってのが存在します。

【FTPS】、【SFTP】、【SCP】

この3つについて詳しく見てみます。

①FTPS

【FTPS】とは【File Tranfer Protocol over SSL/TLS】の略で
ファイル転送の約束事を【SSL/TLS】を利用してやりましょう、みたいなことです。
【SSL/TLS】は何かというと
【共通鍵暗号方式】と【公開鍵暗号方式】の両方を用いてデータを暗号化する技術になります。

【http】と【https】みたいなものと考えるとわかりやすいかと思います。

②SFTP

【SFTP】とは【SSH File Tranfer Protocol】の略で
ファイル転送の約束事を【SSH】を利用してやりましょう、みたいなことです。
【SSH】とは何かというと
リモートでサーバーと通信するためのプロトコルで、
ここでやり取りされる情報の全てが暗号化されることになります。
パスワード認証方式と公開鍵認証方式があります。
Linuxでは【OpenSSH】などが標準でインストールされているので、Linuxサーバーを構築したことがある人は
身に覚えがあるのではないでしょうか。

③SCP

【SCP】とは【Secure Copy Protocol】の略で
【SFTP】と同じでSSHで暗号化されたファイル転送方式になります。
名前にもあるとおり単純にコピーであり、
【SFTP】にあるような、豊富なコマンドはありません。
ですが高速であるとのこと。(実際に使ったことがないので・・・)


時間が許す限りまとめてみましたが、じっくり考えてみるといろいろと難しいですね。
なんとなくわかってるくらいでもプログラミングは出来ますが
実際にどのように動いているのか?と考えてみると
次回からはもうちょっと頭を使って【FTP】を組んでみようと思いました。