サイトアイコン 協栄情報ブログ

NLB経由でPrivateSubnetのFTPサーバーに接続

 

FTP通信とは

File Transfer Protocol

ネットワーク上のクライアントとサーバー間でファイルを転送するための通信プロトコル
 

アクティブモード、パッシブモードとは

こちらの記事がわかりやすかったです。

まず、FTP接続はふたつのコネクションを組み合わせて使用する

  FTPサーバーにログインする際の利用者認証、

  クライアントとサーバー間のコマンドやレスポンスのやり取りに使用して、

  データコネクションを確立する

  接続が確立されてからセッション終了まで維持される

  ポート21を使用

  実際のファイルを転送するために使用

  ファイル転送時のみ接続され、転送完了後に切断

  デフォルトでポート20を使用(パッシブモードでは動的ポート)

FTPにおけるアクティブモードとパッシブモードは、データ転送時のクライアントとサーバー間の接続確立方法の違いを指す。

アクティブモード

パッシブモード

近年はファイアウォールの制限を避けやすいパッシブモードが一般的です。

実際のモードの選択は、FTPクライアントが接続時に決定します。

サーバーはどちらのモードでも対応できるように設定を行います。

  1. アクティブモードのサポート
connect_from_port_20=YES/NO #ポート20の使用設定 デフォルトYES
port_enable=YES #アクティブモードを有効化 デフォルトYES
  1. パッシブモードのサポート
pasv_enable=YES #パッシブモードを有効化 デフォルトYES
pasv_min_port=60001 #パッシブポートの範囲指定
pasv_max_port=60003

今回はFileZillaからパッシブモードで接続します。

 

構成図


・FTPサーバは、vsftpdを使用
 vsftpd(Very Secure FTP Daemon):
 Unix系システムで広く使用されているFTPサーバーソフトウェアのこと

 
 

1.VPC環境の準備

VPC、サブネット、インターネットゲートウェイ、NATゲートウェイ、ルートテーブルの作成
 
 
 

2.NLBの作成

1.セキュリティグループ作成

タイプ プロトコル ポート範囲 ソース
カスタムTCP TCP 60001-60003 外部から接続してくるユーザのグローバルIPアドレス
カスタムTCP TCP 21 外部から接続してくるユーザのグローバルIPアドレス

 

2.リスナーの追加

制御ポート:21(TCP)
データ転送用ポート:60001(TCP)
データ転送用ポート:60002(TCP)
データ転送用ポート:60003(TCP)
 

3.ターゲットグループの追加

2.で設定したリスナーに対して、バックエンドのEC2に繋ぐようにそれぞれターゲットグループを作成する。

※データ転送用ポートはデータ転送時以外は非アクティブなため、
データ転送ポート用ターゲットグループ作成時は、HealthCheck項目のportをOverride選択して21にする。
 

 

3.FTPサーバーの構築

1. セキュリティグループ作成

タイプ プロトコル ポート範囲 ソース
カスタムTCP TCP 60001-60003 NLBのSG
カスタムTCP TCP 21 NLBのSG

 

2. EC2インスタンスの作成

項目
名前とタグ 任意で設定
マシンイメージ Amazon Linux2023
インスタンスタイプ t2.micro
キーペア 任意で設定
セキュリティグループ 既存のセキュリティグループを選択する(先ほど作成したものを選択)

その他はデフォルトで設定
 

3. FTPサーバーのインストール

①EC2インスタンスにSSM接続をする。

FTPサーバ用のソフト【vsftpd】をインストール

sudo yum install vsftpd -y 
sudo systemctl enable vsftpd.service
sudo systemctl start vsftpd.service

②vsftpd.config ファイルを編集する

sudo vi /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022

xferlog_enable=YES
xferlog_std_format=YES

listen=YES
listen_ipv6=NO

pasv_enable=YES
pasv_min_port=60001
pasv_max_port=60003
pasv_addr_resolve=YES
pasv_address=<NLB DNSホスト名 or NLBのAレコードを設定したホスト名>
pasv_promiscuous=NO

tcp_wrappers=NO
pam_service_name=vsftpd
userlist_enable=YES
userlist_deny=NO

 

初心者ならではの視点を大切にしているので各行詳しく説明します:

anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022

local_umask=022 の設定でもファイルのアップロードは可能

これを理解するために重要なポイントは:

  1. write_enable=YES によって、FTPでのアップロード自体は許可されている
  2. local_umask は、アップロード後のファイルのパーミッションを決定する

つまり:

xferlog_enable=YES
xferlog_std_format=YES
listen=YES
listen_ipv6=NO
pasv_enable=YES
pasv_min_port=60001
pasv_max_port=60003
pasv_addr_resolve=YES
pasv_address=<NLB DNSホスト名 or NLBのAレコードを設定したホスト名>
pasv_promiscuous=NO
tcp_wrappers=NO

  TCP Wrappersは、特定のIPアドレスやホスト名からのアクセスを許可/拒否するための制御機能。

  現在ではファイアウォールでこれらの制御を行うのが一般的

pam_service_name=vsftpd

簡単に言えば、「FTPサーバーにログインする時の認証方法を決めるための設定」

userlist_enable=YES
userlist_deny=NO

4.FTPユーザーを追加

①ユーザーの作成

sudo adduser --home /home/ftp-user ftp-user

今回はユーザー名をftp-userとした。

②ユーザーのパスワードを任意で設定する

sudo passwd ftp-user

③ホームディレクトリの所有権を変更する

sudo chown ftp-user:ftp-user -R /home/ftp-user/

これにより、このユーザーがホームディレクトリ内のすべてのファイルとサブディレクトリに対して読み書きができるようになる。

④ホームディレクトリのパーミッション設定

sudo chmod 750 /home/ftp-user/

セキュリティのために、他のユーザーからのアクセスを制限

⑤user_listへの追加

sudo echo "ftp-user" | sudo tee -a /etc/vsftpd/user_list

⑥最後にvsftpdサービスを再起動

sudo systemctl restart vsftpd

 

 

4.FTPサーバーに接続

今回は FileZilla を使ってFTPサーバーにログインする。

項目
プロトコル FTP
ホスト NLBのパブリックDNS名を入力
ポート番号 21
ユーザー名 作成したユーザー名を入力
パスワード 設定したパスワードを入力

→ FileZilla 3.68.1 で稼働確認できました。
 

 

参考

https://miyashimo-studio.jp/blog/detail/filezilla-how-to-use/

https://qiita.com/kce119/items/49608562aecacd45e5bb

https://cloud5.jp/mk-ftp/

モバイルバージョンを終了