この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。
今回、FTPの学習のためEC2(Linux)を使ってFTPサーバーを構築しました
FTPとは
FTPとはファイル転送プロトコルのこと。FTPとは「File Transfer Protocol」のことであり、ファイルを転送するための通信規格です。クライアントとサーバ間で、ファイルのアップロードやダウンロードを行うときに使われるプロトコルです。
例えば、Webサイトを公開する際には、画像やテキストなどの「ファイル」をFTPでサーバに転送する必要があります。ファイル転送はFTPソフトを活用し、FTPサーバに接続することで実現します。FTPが使うのは20番と21番のポートです。2つのポートを使用できるため細かな制御が可能で、大きなデータの転送に適しています。
1.セキュリティグループ作成
まずはじめに、EC2インスタンスに設定するセキュリティグループを作成します
下記の設定値で設定します
※ 60001-60010 は任意で設定してください
| タイプ | プロトコル | ポート範囲 | ソース |
|---|---|---|---|
| カスタムTCP | TCP | 60001-60010 | 0.0.0.0/0 |
| SSH | TCP | 22 | 0.0.0.0/0 |
| カスタムTCP | TCP | 21 | 0.0.0.0/0 |

2.EC2インスタンスの作成
サーバーとなるEC2インスタンスを作成します
下記の設定値で設定します
| 項目 | 値 |
|---|---|
| 名前とタグ | 任意で設定 |
| マシンイメージ | Amazon Linux2 |
| インスタンスタイプ | t2.micro |
| キーペア | 任意で設定 |
| セキュリティグループ | 既存のセキュリティグループを選択する(先ほど作成したものを選択) |
その他デフォルトで設定しました


3.FTPをインストール
インスタンスにSSH接続し、FTPをインストールしていきます

- FTPサーバ用のソフト【vsftpd】をインストールします
sudo yum install vsftpd -y

- vsftpd.config ファイルを編集して、環境に必要な変数を変更します
sudo vim /etc/vsftpd/vfstpd.conf
下記の設定値に変更します
キーボード I で 挿入モードにし変更していきます
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=NO
xferlog_std_format=YES
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
pam_service_name=vsftpd
userlist_enable=YES
userlist_file=/etc/vsftpd/user_list
userlist_deny=NO
listen_port=21
pasv_enable=YES
pasv_min_port=60001
pasv_max_port=60010
pasv_addr_resolve=NO
※ ポート21はFTPのデフォルトポートです。ポートをカスタマイズするには、listen_portを使用したいポートに変更し、connect_from_port_20をNOに設定します。

キーボードEscでノーマルモードに戻り:wqで保存します
4.FTPユーザーを追加
- FTPユーザーを追加します
sudo adduser --home /home/ftp-user ftp-user
ftp-userを任意のユーザー名で作成します
- ユーザーのパスワードを作成します
パスワードを任意で設定します
sudo passwd ftp_user
- ファイルの所有権を変更します
【/home/ftp-user】ファイルの所有権を変更します。【ftp_user】をファイルの所有者にします。
sudo chown ftp-user:ftp-user -R /home/ftp-user/

- 新しいユーザーを【vsftpd user_list】に追加し、【-a】フラグを使用してファイルに追加します
sudo echo "ftp-user" | sudo tee -a /etc/vsftpd/user_list

- vsftpd サービスを再起動します
sudo systemctl restart vsftpd
5.FTP サーバーに接続
今回はWinSCPを使ってFTPサーバーにログインします
| 項目 | 値 |
|---|---|
| 転送プロトコル | FTP |
| ホスト名 | EC2インスタンスのパブリックDNS名を入力 |
| ポート番号 | 21 |
| ユーザー名 | 作成したユーザー名を入力 |
| パスワード | 設定したパスワードを入力 |

↓
ログインできました

まとめ
今回、FTPサーバー構築をしましたがvsftpd.configファイルの設定、FTPユーザの追加などの設定ミスで接続できず、何度も確認し修正して接続までたどりつきました。今後はサーバーを構築する際はファイル設定などに特に気を使って構築していきたいと思います。


