AB Lab

abgata20000 blog.

FTPサーバーの設定

参考サイト

FTPサーバー導入の経緯

最近は、GitもしくはSFTPでのファイルのやりとりが多く、

普段、FTPってあんまり使わないのでFTPサーバーをインストールしていなかったのだが、

クライアント様のサーバーでFTPを利用したいとの事だったので設定した。

折角なので、備忘録として記載しておくことに

vsftpd のインストール

1
2
3
4
5
sudo yum -y install vsftpd

sudo service vsftpd start

sudo chkconfig vsftpd on

で、後はポート開放して完了。

結構あっさりですね。

ただ、このまま使うにはあまりにも無防備すぎるのと、

今回のクライアント様のご要望は、SSL通信での利用を想定との事だったため、もう少し設定する。

一般設定

1
sudo vim /etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
anonymous_enable=NO
# Anonymous FTP接続の禁止。

local_enable=YES
# ローカルユーザのログインを許可。

write_enable=YES
# 書き込み(Upload)許可。公開専用の場合はNOにすると書き込み禁止にできる。

local_umask=022
# ローカルユーザのumask値。

listen_port=10021
# FTP制御チャンネルの接続待ち受けポートの指定。
# デフォルトポートの利用には抵抗がある

connect_from_port_20=NO
# Activeモード時のデータコネクションポートの指定。
# 今回はpasv接続にするのでNO。

nopriv_user=ftp
# vsftpが利用する非特権ユーザ名の指定を ftp に指定。

chroot_local_user=YES
# ローカルユーザの操作範囲を自身のホームディレクトリ内のみに行動を制限(chroot)する。

chroot_list_enable=NO
# 「chroot_local_user=YES」とした場合にchrootしない例外ユーザを許可しないに指定。
# YESにした場合「chroot_list_file=/etc/vsftpd.chroot_list」を登録

ftpd_banner=Welcome to blah FTP service.
# クライアントソフト名が表示されるのを変更

SSL関係設定

1
sudo vim /etc/vsftpd/vsftpd.conf
/etc/vsftpd/vsftpd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
rsa_cert_file=/etc/ssl/certs/vsftp.pem
# vsftpd用の証明書ファイルの指定。SSL証明書の発行方法は省略

rsa_private_key_file=/etc/ssl/certs/vsftp.key
# vsftpd用の秘密鍵ファイル

rsa_cert_file=/etc/ssl/certs/ftp.pem
# vsftpd用の証明書ファイルの指定。SSL証明書の発行方法は省略

use_localtime=YES
# 時刻の扱いをローカルタイムにする。

userlist_enable=YES
# ユーザリストによる規制をかける。

userlist_deny=YES
# ユーザリストをログイン不可ユーザの一覧とする。(NOだとログイン可のユーザ一覧になる)

userlist_file=/etc/ftpusers
# ユーザリストの指定。

pasv_min_port=30000
# Pasv接続で外部からのコネクション利用を許可するポート範囲の最小値。

pasv_max_port=30100
# Pasv接続で外部からのコネクション利用を許可するポート範囲の最大値。

ssl_enable=YES
# SSL接続の有効化

ssl_tlsv1=YES
# vsftpd はSSLのプロトコルとして、SSL v2(ssl_sslv2)、SSL v3(ssl_sslv3)、TLS v1(ssl_tlsv1)の3種類をサポートしているが、デフォルトはTLS v1であり、多くの場合、この設定で問題ないのでデフォルトのままとする。

force_local_logins_ssl=YES
# 制御チャンネル(ログイン等)でSSL接続しか許可しない。

force_local_data_ssl=YES
# データチャンネルでSSL接続しか許可しない。

再起動で反映

1
sudo service vsftpd restart

FTPS接続の種類

【FTP over SSL には Explicit、Implicitの2種類がある】

違いはコネクションを張る際にクライアントが明示的にSSL化を要求するか、暗黙でSSL化するか。

Explicit

Conntct直後にSSLに切り替える要求をクライアントから明示的に送信する(ここは平文)。

この際にポートは平文時と同じポート21等を使う(参考:RFC2228)。 その後Login及びデータはSSL化される。

従来の平文運用との併用は比較的し易そう。別途SSL用にポートも使わないので。

ただしSSL切り替えのオーバーヘッドが少しあるが余程のトラフィックがなければ気にならない程度だとは思う。

Implicit

Conntct直後以降クライアント/サーバは自動的に暗黙でSSL化する。 この際ポート990などのSSL用に設けたポートを使う。

SSLでしか接続させない仕様。

ポート990はクライアント/サーバの設定次第なので変更できるだろうが、このポートを使って従来の平文接続はできないのが大きな違いか。

いずれの場合もデータのセキュアさには差は無いと思う。