Skip to content

🔄 FTPポートの変更と確認手順

概要

本プロジェクト要件やネットワーク環境の都合により、FTPサーバーの待受ポート(デフォルト: 21)を変更する必要が生じた場合の手順です。 Dockerコンテナのポートマッピングを変更するだけでなく、アプリケーション(vsftpd)の設定変更と再ビルドが必要です。

変更手順

ポートを 21 から 2121 に変更する場合を例にします。

1. 設定ファイルの修正 (vsftpd.conf)

srcs/requirements/bonus/ftp/conf/vsftpd.conf に以下の行を追加・変更します。 vsftpdはデフォルトでポート21で待機するため、明示的にポートを指定する必要があります。

ini
# 追加
listen_port=2121

2. Dockerfileの修正

srcs/requirements/bonus/ftp/DockerfileEXPOSE 指示句を更新します。 これはドキュメントとしての意味合いが強いですが、明確にするために変更します。

dockerfile
# 変更前
EXPOSE 21 21100-21110

# 変更後
EXPOSE 2121 21100-21110

3. Docker Composeの修正

srcs/docker-compose.yml のポートマッピングを変更します。

yaml
  ftp:
    # ...
    ports:
      - "2121:2121"         # ホスト側:コンテナ側 を両方変更
      - "21100-21110:21100-21110"

4. 再ビルドと起動

設定変更を反映させるため、FTPコンテナを再ビルドします。

bash
make down
make all
# または
docker compose -f srcs/docker-compose.yml up -d --build ftp

5. ファイアウォール設定の更新

ポートを変更した場合、UFW(ファイアウォール)でも新しいポートを許可する必要があります。

bash
# 新しいポートを許可
sudo ufw allow 2121/tcp

```bash
# (必要であれば) 古いポートを削除
# sudo ufw delete allow 21/tcp

6. (重要) VMのポートフォワーディング設定

VirtualBoxやUTMなどの仮想マシンを使用している場合、VM側のポートフォワーディング設定も変更が必要です。

  • UTM / VirtualBoxの設定画面:
    • 以前: Host 21 (or 2121) -> Guest 21
    • 今後: Host 2121 -> Guest 2121
    • ※ ゲストOS側のポートが 2121 に変わったため、転送先も 2121 に合わせる必要があります。これを忘れると、「接続拒否 (Connection Refused)」になります。

✅ 動作確認方法(ポート変更後)

ポート変更後は、接続コマンドやクライアント設定でポート番号を明示する必要があります。 確認は、ホストOS(あなたのPC) または ゲストOS(VM内) のどちらからでも可能ですが、外部からのアクセスを確認するために ホストOS から行うのが一般的です。

パッシブモード(Passive Mode)について

FTPには「アクティブ」と「パッシブ」の2つのモードがあります。

  • アクティブモード: サーバーからクライアントへデータ接続を行おうとします(ファイアウォールにブロックされやすい)。
  • パッシブモード (-p): クライアントからサーバーへ接続しに行きます。DockerやNAT環境ではこちらが必須です。 ※ Docker Infrastructureでは、このためのポート範囲として 21100-21110 を開放しています。

コマンドライン (ftp)

-P オプション(大文字)でポートを指定します。また、パッシブモード(-p 小文字)も併用します。

bash
ftp -p -P 2121 localhost

成功時の出力例:

text
Connected to localhost.
220 (vsFTPd 3.0.5)
Name (localhost:username): ...

Connected to ... と表示されれば、新しいポートでListenしていることが確認できます。

トラブルシューティング

エラー: ftp: Can't lookup 'example.com:2121': Name or service not known これは、指定したドメイン名(ホスト名)がそのPC上で解決できていない(IPアドレスに変換できない)ことを意味します。

  • localhost または 127.0.0.1 を使用してください。
  • どうしてもドメイン名を使いたい場合は、/etc/hosts127.0.0.1 local.dev のような設定がされているか確認してください。

FileZilla (GUI)

  1. ホスト: localhost (または local.dev)
  2. ユーザー: FTPユーザー名
  3. パスワード: 設定したパスワード
  4. ポート: 2121 (ここが重要)

これで接続できれば、ポート変更は成功です。

7. 実践デモ:FTPでのファイル操作とWeb確認

ポート変更の確認だけでなく、実際にファイル転送が機能していることをデモする方法です。

  1. FTPで接続:

    bash
    ftp -p -P 2121 localhost
  2. ファイルの作成 (put): ローカルでテストファイルを作成し、アップロードします。

    bash
    # (事前に別ターミナルで作成しておく)
    echo "Hello from FTP!" > ftp_test.txt
    
    # (FTPプロンプト内で)
    put ftp_test.txt
  3. Webブラウザで確認: アップロードしたファイルはWordPressのドキュメントルート (/var/www/html) に配置されるため、ブラウザから直接アクセスできます。

  4. ファイルの削除 (delete): FTPでファイルを削除し、Webから消えることを確認します。

    bash
    # (FTPプロンプト内で)
    delete ftp_test.txt
    • 再度URLにアクセスすると、404 Not Found(またはWordPressの404ページ)になるはずです。 ※ Nginxの設定により、存在しないファイルへのアクセスはWordPress (index.php) に転送されます。そのため、ブラウザ上では「WordPressのテーマが提供する404ページ(トップページに似ている場合があります)」が表示されることがありますが、正常な動作です。

これが「FTPサーバーがWebサーバーのボリュームと正しく連携していること」の証明になります。

Released under the MIT License.