導入
このブログのキャッチコピーは「未来の自分のための技術メモ、時々あなたのためのヒント。」ですが、今回はサーバーを構築する上で、未来の自分も、そしてあなたも必ず通る道の一つ、「FTPサーバーの構築」に関するヒントです。
自前のWebサーバーにファイルをアップロードしたり、チームでファイルを共有したりする際に、FTP(File Transfer Protocol)は今でも非常に便利な手段です。
この記事では、Linuxで定番のFTPサーバーソフト「vsftpd (very secure FTP daemon)」を使って、セキュリティを考慮した基本的なFTPサーバーを構築する手順を、初心者の方にも分かりやすく解説します。
なぜ「vsftpd」を使うのか?
FTPサーバーソフトはいくつか種類がありますが、vsftpd
はその名の通り「とても安全であること」を目標に開発されており、多くのLinuxディストリビューションで標準的に採用されている、非常に信頼性の高いソフトウェアです。
構築の4ステップ
手順は大きく分けて4つです。一つずつ見ていきましょう。
Step 1: vsftpdをインストールする
まずは、yum
(またはdnf
)コマンドを使って、vsftpdをサーバーにインストールします。
sudo yum install vsftpd
Step 2: vsftpdの基本設定を行う
次に、設定ファイル/etc/vsftpd/vsftpd.conf
を編集して、サーバーの挙動を安全なものに変更します。
最低限、以下の設定を行いましょう。
# 誰でもログインできる「匿名ログイン」を禁止します
anonymous_enable=NO
# Linuxシステムに存在するユーザーアカウントでのログインを許可します
local_enable=YES
# ファイルのアップロードや名前の変更など、書き込み操作を許可します
write_enable=YES
# ユーザーを自分のホームディレクトリより上に移動させないようにします(セキュリティ上非常に重要!)
chroot_local_user=YES
allow_writeable_chroot=YES
# 日本のタイムゾーンを使用します
use_localtime=YES
# 後述するファイアウォール設定のために、データ転送に使うポート番号の範囲を固定します
pasv_enable=YES
pasv_min_port=21000
pasv_max_port=21010
特に重要なのがchroot_local_user=YES
です。これを設定すると、FTPでログインしたユーザーは自分のホームディレクトリが世界の全てであるかのように見え、/etc
などの重要なシステムディレクトリにアクセスできなくなります。これを「chroot監獄」と呼んだりします。
Step 3: ファイアウォールの「壁」に穴を開ける
サーバーは通常、不正なアクセスを防ぐためにファイアウォールという「壁」で守られています。FTPで接続できるように、この壁にFTP専用の通用口を開けてあげる必要があります。
CentOS 7 / Rocky Linux 9 など、firewalld
を使っている場合:
# FTP接続用のポート(21番)を開けます
sudo firewall-cmd --add-service=ftp --permanent
# データ転送用のポート範囲(先ほど設定したもの)を開けます
sudo firewall-cmd --add-port=21000-21010/tcp --permanent
# ファイアウォールの設定を再読み込みします
sudo firewall-cmd --reload
CentOS 6 など、古いiptablesを使っている場合:
/etc/sysconfig/iptablesというファイルに、以下の2行を追記します。
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21000:21010 -j ACCEPT
その後、sudo service iptables restart
でiptables
を再起動してください。
Step 4: vsftpdサービスを起動する
最後に、設定した内容を反映させるためにvsftpdを起動し、サーバーを再起動しても自動で立ち上がるように設定します。
# vsftpdサービスを起動
sudo systemctl start vsftpd
# OS起動時に自動で起動するように設定
sudo systemctl enable vsftpd
まとめ
今回は、vsftpdを使った基本的なFTPサーバーの構築手順をご紹介しました。
特に、
- 匿名ログインは必ず禁止する
chroot
設定でユーザーの行動範囲を制限する- ファイアウォールで必要なポートだけを開ける
という3点を押さえておけば、安全なFTPサーバー運用の第一歩としては万全です。
この記事が、あなたのサーバー構築の「ヒント」になれば幸いです。
コメント