RHEL9で作る自宅サーバ:ftpサーバの構築

ftpサーバRHEL9パソコン自宅サーバ

今回は、軽くftpサーバを構築してみます。

パッケージからインストール

サーバプログラムはvsftpdをパッケージからインストールします。

[root@ace ~]# dnf install vsftpd
サブスクリプション管理リポジトリーを更新しています。
メタデータの期限切れの最終確認: 3:07:01 前の 2024年02月07日 08時16分25秒 に実施 しました。
依存関係が解決しました。
================================================================================
 パッケージ
           Arch      バージョン       リポジトリー                        サイズ
================================================================================
インストール:
 vsftpd    x86_64    3.0.5-5.el9      rhel-9-for-x86_64-appstream-rpms    172 k

トランザクションの概要
================================================================================
インストール  1 パッケージ

ダウンロードサイズの合計: 172 k
インストール後のサイズ: 347 k
これでよろしいですか? [y/N]: y
:
省略
:
インストール済み:
  vsftpd-3.0.5-5.el9.x86_64

完了しました!
[root@ace ~]#

簡単ですね。

自分好みに設定

設定ファイルは/etc/vsftpd/vsftpd.confなので、それを直してみますよ。

[root@ace ~]# cp -p /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig
[root@ace ~]# vi /etc/vsftpd/vsftpd.conf
[root@ace ~]#
[root@ace ~]# diff /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.orig
12c12
< anonymous_enable=YES
---
> anonymous_enable=NO
36c36
< #dirmessage_enable=YES
---
> dirmessage_enable=YES
100c100
< chroot_local_user=YES
---
> #chroot_local_user=YES
127,148d126
<
< allow_writeable_chroot=YES
< anon_root=/var/ftp
< use_localtime=YES
< force_dot_files=YES
< reverse_lookup_enable=NO
<
< pasv_enable=YES
< pasv_min_port=20000
< pasv_max_port=20200
<
< #ssl_enable=YES
< #ssl_tlsv1_2=YES
< #ssl_tlsv1_1=YES
< #ssl_tlsv1=NO
< #ssl_sslv2=NO
< #ssl_sslv3=NO
< #rsa_cert_file=/etc/letsencrypt/live/zeke.ne.jp/fullchain.pem
< #rsa_private_key_file=/etc/letsencrypt/live/zeke.ne.jp/privkey.pem
< #force_local_logins_ssl=NO
< #force_local_data_ssl=NO
<
[root@ace ~]#

[root@ace ~]# touch /etc/vsftpd/chroot_list
[root@ace ~]#

設定ファイルを変更します。ポイントは

匿名ftpは有効に、ただし書き込みはできません。20世紀に書き込みできるようにしていたら、知らない人に動画の交換をされていたので。匿名ftpのホームディレクトリは/var/ftpになります。

一般ユーザはchrootを使って、自分のホームディレクトリ以外に移動できません。ホームディレクトリ内であれば、書き込みは可能です。.htaccessなど.で始まるファイル名も表示します。bindのときはchootを使いませんでしたが、今回はユーザがディレクトリを迷わないようにするためのものなので、利便性の向上ですね。

また、パッシブポートを20000~20200番に制限しています。これでファイヤーウォールの穴をあけることができます。

FTPS対応の対応のため、サーバ証明書を手に入れたらssl関係のコメントを外す予定です。
※暗号化していると、FirewallやNATに引っかかって(パケットの内容が読めないのでどのportを使ってデータ転送するかわからない)通信できないようです。コメントのままにして暗号化非対応とします。

自動起動設定

[root@ace ~]# systemctl enable vsftpd
Created symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service → /usr/lib/systemd/system/vsftpd.service.
[root@ace ~]# systemctl start vsftpd
[root@ace ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
     Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; preset: d>
     Active: active (running) since Wed 2024-02-07 11:55:26 JST; 2s ago
    Process: 2497 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exit>
   Main PID: 2498 (vsftpd)
      Tasks: 1 (limit: 23114)
     Memory: 712.0K
        CPU: 3ms
     CGroup: /system.slice/vsftpd.service
             mq2498 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf

 2月 07 11:55:26 ace.zeke.ne.jp systemd[1]: Starting Vsftpd ftp daemon...
 2月 07 11:55:26 ace.zeke.ne.jp systemd[1]: Started Vsftpd ftp daemon.
[root@ace ~]#

いつものように自動起動の設定とサーバの起動を行います。

ちゃんと上がっているようですね。

[root@ace ~]# cd /var/ftp/pub/
[root@ace ftp]# ls -l
合計 0
drwxr-xr-x 2 root root 6  5月  9  2023 pub
[root@ace ftp]# scp -pr ns.zeke.ne.jp:/home/ftp/pub .
:
省略
:
[root@ace ftp]#

現行のftpサーバからデータを移行しておきます。

動作確認。ちゃんと動いてるかな。

WindowsのWinSCPを使って、一般ユーザと匿名ユーザでログインできることを確認。一般ユーザはファイルを書き込めること、匿名ユーザはファイルを書き込めないことを確認しておきました。

Firewallの穴あけ

[root@ace ~]# firewall-cmd --zone=public --permanent --add-service=ftp
success
[root@ace ~]# firewall-cmd --zone=public --permanent --add-port=20/tcp
success
[root@ace ~]# firewall-cmd --zone=public --permanent --add-port=20000-20200/tcp
success
[root@ace ~]# firewall-cmd --reload
success
[root@ace ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: dns ftp irc ssh
  ports: 5500-5501/tcp 20/tcp 20000-20200/tcp
  protocols:
  forward: yes
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[root@ace ~]#

ftpサービスとしてfirewalldに設定すると、制御ポート(21番)だけでなく、データ転送ポート(任意の番号)も通信内容を覗き見て適当に開けてくれます。

データ転送用ポート20番、パッシブモードの時の20000-20200番ポートも開けています。

ftpでの暗号化通信は証明書がまだないので保留にして、ファイル転送はsshdによるsftpにすることにしました。

ルータの設定を行っていないので、まだインターネットからはアクセスできませんが、とりあえず設定完了です。

お勧めのKindle本です!

コメント