【初心者向け】vsftpdで安全なFTPサーバーを構築する全手順(CentOS/Rocky Linux対応)

Linux

導入

このブログのキャッチコピーは「未来の自分のための技術メモ、時々あなたのためのヒント。」ですが、今回はサーバーを構築する上で、未来の自分も、そしてあなたも必ず通る道の一つ、「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 restartiptablesを再起動してください。

Step 4: vsftpdサービスを起動する

最後に、設定した内容を反映させるためにvsftpdを起動し、サーバーを再起動しても自動で立ち上がるように設定します。

# vsftpdサービスを起動
sudo systemctl start vsftpd

# OS起動時に自動で起動するように設定
sudo systemctl enable vsftpd

まとめ

今回は、vsftpdを使った基本的なFTPサーバーの構築手順をご紹介しました。

特に、

  • 匿名ログインは必ず禁止する
  • chroot設定でユーザーの行動範囲を制限する
  • ファイアウォールで必要なポートだけを開ける

という3点を押さえておけば、安全なFTPサーバー運用の第一歩としては万全です。

この記事が、あなたのサーバー構築の「ヒント」になれば幸いです。

コメント

タイトルとURLをコピーしました