FTPのインストール
設定ファイルの編集
/etc/vsftpd.confの下記4行から「#」削除
・write_enable=YES 31行目
・ascii_upload_enable=YES 99行目
・ascii_download_enable=YES 100行目
・ftpd_banner=Welcome to blah FTP service. 103行目
サービス再起動・起動確認
接続確認
ユーザー名とパスワードを入力。230 Login Successfulと表示されたら成功。
220、331、230の数字は、FTPのレスポンスコードです。
レスポンスコードは、HTTPのステータスコードを同じで処理結果を番号で表しています。
220:サービス準備が整った事を表す。
331:ユーザー名OK、パスワード入力の要求を表す。
230:ユーザーログイン成功を表す。
(なぜ、番号の順番が昇順じゃないんだろう。。)
わざと間違えたら、530が返ってきた。
(なぜか、ftp>になってる。。)
抜けるときは、exitとbye。
FTPクライアントからFTPサーバーへアクセス
クライアントは、WinSCPソフトを使います。
ホストOSのwindowsから、ゲストOSのubuntuでアクセス。
起動後、各項目入力し、接続。
ホスト名は、FTPサーバーのIP
ユーザー名、パスワードもFTPサーバーのアカウント
接続ボタンをクリックすると、FTPサーバーを接続できますが
なぜかつながらない。。
設定・疎通確認
同じPC内ですが、疎通確認→問題なし。
ubuntuFWの設定確認。
FTPの制御用(TCP/21)とデータ用(TCP/22)もポート空いてる。
FTPクライアントソフトWinscpのログを確認した所、ログイン後にサーバー側からランダムポート番号が通知され、そのポート番号を使ってアクセスしようとしていることが分かった。(マーカー箇所)
クライアントへの通知ポート指定
/etc/vsftpd.confに、下図の2行を追記して保存。
これで通知されるポートが60000~60100になるはず。
winSCPのログ確認
192.168.230.129(FTPサーバー)に向けて、ポート60008で接続してます。
サーバー側から、クライアントへポート60008が通知されたことを表してます。
UbuntuのFWにポート番号追加
サーバーからクライアントへ通知するtcp60000~60100をFWで許可。
一番下に許可(ALLOW)で追加されました。
再度FTPサーバーへ接続
接続できました。
左がクライアント、右側がサーバーのディレクトリです。
ファイル転送
クライアントからサーバーのsampleディレクトリに、「1.png」ファイルを転送してみます。
転送は、ドラックアンドドロップで可能です。
lsコマンドで、確認。
FWでFTPポート削除
21番(制御用)を削除。
IpV6だけ消して、v4(上から4つ目消し忘れてました。。)
winSCPで再接続
制御用をブロックしたので、ログインすらできてないですね。
逆に、21許可、22削除してみました。
20は削除しても、アクセス・転送はできました。
理由は、パッシブモードでFTP通信を行ってるからですね。
(パッシブの場合、データ転送用のポート番号は、サーバーからランダムでクライアントへ通知される。
この記事の上部で、60000-60100で通知ポートを指定したのは
ランダムではなく、通知ポートを指定するため
アクティブモードで動作
下図のチェックボタンを外せば、アクティブモードで動きます。
アクティブモードの場合は、サーバーからクライアントに接続要求を行います。