【 新米エンジニアの忘備録 】proftpd を使用して、FTP → SFTP に変更する方法

はじめに

変更方法の前に簡単に.....
proftpd (Professional FTP Daemon)」とは、
FTP サーバソフトウェアの1つで FTP 接続( FTPプロトコルを利用したファイル転送 )を使用する際に利用します。
ただ、 FTP プロトコルは平文で暗号化されていないため、セキュリティ上のリスクが発生します。
今回は、proftpd を使用して FTP(平文)→ SFTP (暗号化)に変更してみました!

前提

環境

クラウド:AWS
FTPサーバーソフトウェア:proftpd
proftpd のバージョン:1.3.8b
ポート:21番(FTP)

*proftpd のバージョンによっては、SFTP をサポートしていない場合があるため要注意

参照 )
① ProFTPD 公式ドキュメント
http://www.proftpd.org/docs/
② ProFTPD モジュール:mod_sftp
http://www.proftpd.org/docs/contrib/mod_sftp.html

条件

① FTPサーバーソフトウェアは、既存の proftpd を使用する
② 既存のユーザー名およびパスワードを使用する形で SFTP 通信に切り替えたい
③ SFTP 用のポートは、8022 番とする

→ なるべく工数を減らして、簡単に切り替える

忘備録

  1. セキュリティーグループに SFTP 用ポートを設定
  2. proftpd.conf を編集
  3. hostkey の権限を変更
  4. 設定反映

並行運用手順( FTP + SFTP )

1. セキュリティーグループに SFTP 用ポートを設定
→ 対象の IP に対して、SFTP 用のポート(8022)を許可する

2. proftpd.conf を編集
2.1.  対象ファイルのバックアップを取得

cp -ip /etc/proftpd.conf /etc/proftpd.conf_$(date +"%Y%m%d")

差分確認:

diff /etc/proftpd.conf /etc/proftpd.conf_$(date +"%Y%m%d")

2.2 SFTP の設定を追記
→ 最下行に下記の記述を追記
追記内容:

LoadModule mod_sftp.c # SFTP モジュールの読み込み

<IfModule mod_sftp.c>
  <VirtualHost 0.0.0.0>
    SFTPEngine on                # SFTP エンジンを有効化
    SFTPLog /var/log/sftp.log    # ログファイルを指定
    DefaultRoot ~                # デフォルトのルートを指定

    # バーチャルユーザーの設定
    AuthUserFile /etc/ftppasswd  # 認証に使用するユーザー情報が記載されたファイルのパスを指定
    AuthGroupFile /etc/ftpgroup  # 認証に使用するグループ情報が記載されたファイルのパスを指定
    AuthOrder mod_auth_file.c    # 認証の順序を指定

    Port 8022 # SFTP 用のポートを指定

    # hostkey を sshd から流用
    SFTPHostKey /etc/ssh/ssh_host_rsa_key # SFTP 用のホストキーを指定
  </VirtualHost>
</IfModule>

3. hostkey の権限を変更

chmod 600 /etc/ssh/ssh_host_rsa_key

→ /etc/ssh/ssh_host_rsa_key の権限が 600 になっていることを確認

4. 設定反映
4.1 シンタックスチェック

proftpd -t

4.2 ポートを確認

netstat -lntp

想定結果:

tcp6 0 0 :::21 :::* LISTEN PID/proftpd

4.3 プロセスの確認

ps auuxf | grep proftpd

想定結果:

nobody 1140 0.0 0.1 52348 39724 ? SLs 2024 8:28 proftpd: (accepting connections)

4.4. ステータスを確認

systemctl status proftpd

4.5. proftpd を再起動

systemctl restart proftpd

4.6 ポートを確認

netstat -lntp

想定結果:

tcp6 0 0 :::8022 :::* LISTEN PID/proftpd

5. 接続確認
→ winscp 等のツールで FTP および SFTP 接続が可能なこと、編集・削除・アップロード等も可能か確認する

・FTP

転送プロトコル FTP
ホスト名 対象ホストの IP
ポート番号 21
ユーザ名 対象の FTP ユーザー名
パスワード 対象の FTP ユーザーのパスワード

・SFTP

転送プロトコル SFTP
ホスト名 対象ホストの IP
ポート番号 8022
ユーザ名 対象の FTP ユーザー名
パスワード 対象の FTP ユーザーのパスワード

▶ FTP、および SFTP の両方で接続が可能!

 

問題点

セキュリティ上の観点から FTP 通信を廃止する場合は、
FTP 通信を LIMIT で制限およびセキュリティグループの該当ポートの IP 許可を削除することで、対応可能です。
ただ、ポートの LISTEN 状態をクローズすることはできませんでした.....
(まあ、FTP接続は不可能なので見なかったことにしたい)

 
# FTP 
<Limit LOGIN>
    DenyAll # FTP接続を拒否 
</Limit>

LoadModule mod_sftp.c # SFTP モジュールの読み込み 

# SFTP
<IfModule mod_sftp.c>
  <VirtualHost 0.0.0.0>
    <Limit LOGIN>
    AllowAll # SFTP接続を許可 
    </Limit>

    SFTPEngine on               # SFTP エンジンを有効化 
    SFTPLog /var/log/sftp.log   # ログファイルを指定 
    DefaultRoot ~               # デフォルトのルートを指定 

    # バーチャルユーザーの設定 
    AuthUserFile /etc/ftppasswd # 認証に使用するユーザー情報が記載されたファイルのパスを指定 
    AuthGroupFile /etc/ftpgroup # 認証に使用するグループ情報が記載されたファイルのパスを指定 
    AuthOrder mod_auth_file.c   # 認証の順序を指定 
    Port 8022                   # SFTP 用のポートを指定 

    # hostkey を sshd から流用 
    SFTPHostKey /etc/ssh/ssh_host_rsa_key # SFTP 用のホストキーを指定 

  </VirtualHost>
</IfModule> 

※ FTP 通信を廃止した際も、winscp 等のツールを使用し、想定通りに接続が制限されているか確認しましょう!

さいごに

意外に簡単に FTP から SFTP 通信に切り替えることができました🙌
併用運用も可能ですので、暗号化に切り替える前に SFTP 通信の接続に問題がないか確認できるのもうれしいですね。
FTP 通信のセキュリティ面を気にされている場合は、ぜひお試しくださいませ。
最後まで読んでいただき、ありがとうございました‼

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
1
読み込み中...
1 票, 平均: 1.00 / 11
14
X facebook はてなブックマーク pocket

この記事をかいた人

About the author

ひよこ

2024 度入社の新卒エンジニアです。
文系・未経験・システムソリューション部