クラウドVPSにおけるVSFTPDによるFTPサーバー構築と設定

インフラ環境の準備

クラウドプロバイダのコンソールにアクセスし、仮想サーバー(軽量アプリケーションサーバーまたはVPS)をプロビジョニングします。FTP接続に使用するドメイン名は、必要に応じて別途取得しサーバーに紐付けてください。

VSFTPDのインストールとサービス状態確認

システムのパッケージキャッシュを更新した上で、FTPサーバーソフトウェアであるVSFTPDをインストールします。

sudo apt update && sudo apt install vsftpd -y

インストールが完了すればデーモンは自動起動します。以下のコマンドを実行し、21ポートが正常にLISTEN状態にあるか確認してください。

sudo ss -tuln | grep :21

出力に該当ポートが表示されない場合は、システムサービスを手動で起動します。

sudo systemctl start vsftpd

FTP専用アカウントとディレクトリ構成

セキュリティ分離の観点から、FTP接続に使用する専用ユーザを作成し、ホームディレクトリを制限します。

まず、FTPデータ格納用のベースパスを生成します。

sudo mkdir -p /srv/ftp_storage

専用アカウントを追加します。初期状態ではログインシェルを標準のbashとして設定します。

sudo useradd -d /srv/ftp_storage -s /bin/bash ftp_user

パスワードを定義し、PAM設定ファイルを削除します(VSFTPDの独自認証フローと競合する可能性があるため)。

sudo passwd ftp_user
sudo rm -f /etc/pam.d/vsftpd

SSHや端末からの直接ログインを拒否するため、ログインシェルを `/usr/sbin/nologin` に変更します。

sudo usermod -s /usr/sbin/nologin ftp_user

設定ファイルの調整

設定ファイル `/etc/vsftpd.conf` を編集します。既存設定をバックアップしたのち、以下のパラメータ群を適用してください。

# TCP接続の制御
listen=YES
listen_ipv6=NO

# ユーザ制限とセキュリティ基盤
chroot_local_user=YES
allow_writeable_chroot=YES
seccomp_sandbox=NO

# 許可リストによるアクセス管理
userlist_deny=NO
userlist_enable=YES
userlist_file=/etc/vsftpd.allowed_list

# ファイル書き込み制御
write_enable=YES

# パッシブモード(データ接続用)
pasv_enable=YES
pasv_min_port=49000
pasv_max_port=49010
pasv_address=YOUR_PUBLIC_IP
pasv_addr_resolve=YES
pasv_promiscuous=YES

※ `pasv_address` には、クラウドコンソールで確認したサーバーのグローバルIPアドレスを記述してください。

許可リスト登録とファイル権限付与

設定で指定した `vsftpd.allowed_list` ファイルを作成し、先ほど作成したアカウントを登録します。

echo "ftp_user" | sudo tee /etc/vsftpd.allowed_list > /dev/null
sudo chmod 644 /etc/vsftpd.allowed_list

FTPデータディレクトリの所有権を移動し、公開用サブフォルダを作成して書き込み権限を付与します。

sudo chown ftp_user:ftp_user /srv/ftp_storage
sudo chmod 755 /srv/ftp_storage
sudo mkdir /srv/ftp_storage/upload_area
sudo chmod 777 /srv/ftp_storage/upload_area

設定を反映させるため、VSFTPDサービスを一時的に再起動します。

sudo systemctl restart vsftpd

ネットワークファイアウォールと接続検証

クラウドプロバイダのセキュリティグループまたはコンソール設定にて、TCP 21番ポートおよび設定したパッシブポート範囲(49000-49010)のインバウンド許可ルールを追加してください。準備が整ったら、FileZillaやWinSCPなどのFTPクライアントから認証接続を試行します。

接続障害の事例と対応策

不可ルート化アドレスの返却エラー

クライアントが「サーバーから返されたIPアドレスがルーティングできない」と報告する場合、リスニング設定が競合している可能性があります。以下の設定を確認し、IPv6リスニングを無効化してください。

listen=YES
listen_ipv6=NO

パッシブモード接続時のセキュリティ拒否(425エラー)

ディレクトリリスト取得時に `425 Security: Bad IP connecting` が発生する場合は、IP検証処理が厳格になっているためです。以下のパラメータが設定ファイルに正記されているか確認し、サービス再起動後に再テストしてください。

pasv_promiscuous=YES

タグ: vsftpd linux FTP クラウドインフラ ネットワーク設定

7月13日 21:53 投稿