【 新米エンジニアの忘備録 】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 番とする
→ なるべく工数を減らして、簡単に切り替える
忘備録
- セキュリティーグループに SFTP 用ポートを設定
- proftpd.conf を編集
- hostkey の権限を変更
- 設定反映
並行運用手順( 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