AWS EC2(Amazon Linux2)でFTPサーバを構築する

今回はさくっとAWS EC2でFTPサーバお試し構築してみます。EC2は同一サブネットに２つデプロイして、１つをFTPサーバ、もう１つをクライアントとして設定し、FTPでファイル送受信を行う設定になります。

#前提
- 利用するインスタンスはFTPサーバはAmazon Linux2で、クライアント側はWindows Serverとし、FTPソフトウェアはWinSCPとする
- コマンド操作はRoot権限のあるユーザで実施する

#構築手順
①EC2をサーバ、クライアント用でそれぞれデプロイ
②サーバ側にvsftpdをインストールして、FTPユーザを作成
③vsftpdの設定ファイルをデフォルトから変更
④クライアント側でWinSCPをインストールし、接続

#実際にやってみた
まず①についてはほ他に詳しい記事がたくさんあるので割愛します。EC2をデプロイしてRoot権限のユーザに昇格したものとして以下進めます。
次の②のvfstpdのインストールですが以下でインストールします。

    #サーバ側にvsftpdをインストール
    yum -y install vsftpd
  

    #vsftpdサービス起動および自動起動されるように設定
    systemctl start vsftpd
    systemctl enable vsftpd
 
これでとりあえず、サーバ側で必要なパッケージは準備ＯＫです。
クライアント用のEC2も同じVPCにデプロイして、RDPできるところまで進めます

続いて③ですがvsftpdの設定コンフィグである/etc/vsftpd/vsftpd.confの中身をデフォルトから変更していきます。
※別にデフォルトのままでもFTP接続することは可能です。
    
    #/etc/vsftpd/vsftpd.confを修正
    vi /etc/vsftpd/vsftpd.conf

    ~~~以下抜粋~~~~
    1 # Example config file /etc/vsftpd/vsftpd.conf
    2 #
    3 # The default compiled in settings are fairly paranoid. This sample file
    4 # loosens things up a bit, to make the ftp daemon more usable.
    5 # Please see vsftpd.conf.5 for all compiled in defaults.
    6 #
    7 # READ THIS: This example file is NOT an exhaustive list of vsftpd options.
    8 # Please read the vsftpd.conf.5 manual page to get a full idea of vsftpd's
    9 # capabilities.
    10 #
    11 # Allow anonymous FTP? (Beware - allowed by default if you comment this out).
    12 anonymous_enable=YES　　→「No」に変更
    13 #
    14 # Uncomment this to allow local users to log in.
    15 # When SELinux is enforcing check for SE bool ftp_home_dir
    16 local_enable=YES 
    
12行目:anonymous_enable=YESは不特定ユーザのアクセス許可はセキュリティ上、よろしくないので「No」にします。
16行目:local_enable=Yesはローカルユーザ（/etc/passwdに記述されたユーザー）のアクセス許可なので「YES」のままでOKです。

    112 # When "listen" directive is enabled, vsftpd runs in standalone mode and
    113 # listens on IPv4 sockets. This directive cannot be used in conjunction
    114 # with the listen_ipv6 directive.
    115 listen=NO
    116 #
    117 # This directive enables listening on IPv6 sockets. By default, listening
    118 # on the IPv6 "any" address (::) will accept connections from both IPv6
    119 # and IPv4 clients. It is not necessary to listen on *both* IPv4 and IPv6
    120 # sockets. If you want that (perhaps because you want to listen on specific
    121 # addresses) then you must run two copies of vsftpd with two configuration
    122 # files.
    123 # Make sure, that one of the listen options is commented !!
    124 listen_ipv6=No
    125
    126 pam_service_name=vsftpd
    127 userlist_enable=YES　→「YES」だと userlist_file に記載しているユーザは接続拒否されるので「No」に変更
    128 tcp_wrappers=YES

115行目:listen=スタンドアロンでvsftpdを起動するかの設定で、デフォルトが[NO]なのでそのままでOKです。
124行目:listen_ipv6=IPv4ソケットの代わりにIPv6ソケットをリッスンする。 このオプションとlistenオプションは、同時に有効にすることができないがこれも「NO」でOKです。
127行目:userlist_enable=userlist_fileオプション（デフォルトは/etc/vsftpd.user_listファイル）で指定したファイルに含まれるユーザリストを元に、ログインの許可/拒否が決定されます。[YES]にすると/etc/vsftpd.user_listがブラックリストになり、ユーザを追記するとアクセス拒否されてしまうので、今回は[NO]に変更しておきます。
「userlist_enable=YES」のままでも、下に「userlist_deny=NO」を記述すれば同じ設定にできますので、そっちの方がわかりやすいかもしれませんね。

FTPにはアクティブモードとパッシブモードがありますが、デフォルトだと「パッシブモード」で設定されます。
明示的に記載する場合は「pasv_enable=YES」とします。

とりあえず最低限の変更は以上です。
次にFTPでアクセスするユーザをサーバ側で作成します。



    #ftpで利用するユーザを作成
    useradd ftp-user
    passwd ftp-user
    New-Passwd:任意のパスワード


続いて、etc/vsftpd.user_listに先ほど作成したユーザを追記してやります。

    vi etc/vsftpd.user_list

    ~~以下を追記~~
    ftp-user

またリストに既に記載されているユーザでもFTPサーバにアクセスできてしまうので、不要であれば削除しておきましょう。


最後に設定反映のためにvsftpdをサービス再起動させましょう。

    systemctl restart vsftpd

これでサーバ側の設定は完了です。
では④のクライアント側の設定に移ります。とっいてもEC2のログインして、WinSCPをインストールするだけなので手順は簡略化します。
とりあえず[窓の杜](https://forest.watch.impress.co.jp/library/software/winscp/)からインストールしておけばOKです。

クライアントのEC2でWinSCPを起動させると以下のような画面になるので、「ホスト名」にサーバのＩＰアドレスを、ユーザ名のところに「ftp-user」と設定したPWを入力します。
![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/04adf804-2acc-435c-1989-2f296622fb84.png)

こんな感じで接続できています！

![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/655033/2879420c-893f-b6f5-c2e2-2f2a5af2059c.png)





#参考にしたサイト
[【AWS】閉域網のEC2にFTPサーバーを構築]
(https://www.hanatare-papa.jp/entry/technology-aws-ftp-1#FTP%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%92%E8%A8%B1%E5%8F%AF%E3%81%99%E3%82%8B%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E6%8C%87%E5%AE%9A)
[【CentOS7】vsftpdでパッシブモードのFTPサーバーを設定する](https://www.chuken-engineer.com/entry/2019/06/06/091616)