小技プログラミング

CentOSにvsftpdでFTPサーバーを構築

CentOSにvsftpdをインストールしてFTPサーバー構築する手順です。

1.vsftpdインストール

# yum install vsftpd

2.設定ファイル編集

# vi /etc/vsftpd/vsftpd.conf

今回は以下の内容で設定します。

○タイムスタンプ時間を日本時間に設定
use_localtime=YES

○デフォルトでホームディレクトリより上層へのアクセスを禁止
chroot_local_user=YES

○ホームディレクトリより上層へのアクセスを許可するユーザリストの有効化
chroot_list_enable=YES

○ホームディレクトリより上層へのアクセスを許可するユーザリストの指定
chroot_list_file=/etc/vsftpd/chroot_list

○ドットから始まるファイルの表示設定
force_dot_files=YES

○ディレクトリごと削除できるように設定
ls_recurse_enable=YES

○パッシブモードの利用設定(データ転送用Port設定)
pasv_enable=YES
pasv_min_port=4096
pasv_max_port=4127

○anonymous(匿名)接続を禁止
anonymous_enable=NO
anon_upload_enable=NO

○ログ設定
xferlog_enable = YES
xferlog_file=/var/log/xferlog
xferlog_std_format=YES

○FTPディレクトリ名を指定
local_root=ftp

3.ユーザリストファイルの作成

対象ユーザがいない場合でもchroot_listファイルを空の状態で作成します。

# touch /etc/vsftpd/chroot_list

4.FTP用アカウント作成

ユーザ作成

# useradd ftpuser
# passwd ftpuser
# New UNIX password: パスワード入力
# Retype new UNIX password: パスワード入力

FTP用ディレクトリ作成

# mkdir /home/ftpuser/ftp
chown ftpuser:ftpuser /home/ftpuser/ftp
chmod 700 /home/ftpuser/ftp

5.iptables設定

FTPはコマンド転送とデータ転送が別々のコネクションで行われます。
サーバ接続時のポートが別々になるという事です。
iptablesでFTPコマンド用、データ転送用Portの許可設定をします。

# iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 4096:4127 -j ACCEPT

6.サービスの開始・起動設定

# /etc/rc.d/init.d/vsftpd start
chkconfig vsftpd on

設定作業は以上です。
FFFTPなどでパッシブモード接続して、動作確認を行って完了です。

※ip_conntrack_ftpのロード

ip_conntrack_ftpはデータコネクションやパッシブモードの対応を自動で行ってくれるようです。
iptablesでip_conntrack_ftpモジュールがロードされるようにします。
IPマスカレードをしている場合は、ip_nat_ftp モジュールもロードします。

まずはip_conntrack_ftpとip_nat_ftpモジュールがロードされているか確認します。
以下のようにモジュールが表示されていれば問題ありません。

# lsmod |grep ftp
-------------------------------------------------------
ip_nat_ftp 36545 0
ip_conntrack_ftp 41361 1 ip_nat_ftp
-------------------------------------------------------

モジュールが読み込まれていない場合は、iptales起動時に読み込まれるようiptables-configに設定します。

# vi /etc/sysconfig/iptables-config

IPTABLES_MODULES 設定を以下の内容に変更します。

IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp ip_nat_ftp"

iptablesを再起動します。

# /etc/rc.d/init.d/iptables restart

モジュールが読み込まれているか確認します。

# lsmod |grep ftp
-------------------------------------------------------
ip_nat_ftp 36545 0
ip_conntrack_ftp 41361 1 ip_nat_ftp
-------------------------------------------------------

ip_conntrack_ftpとip_nat_ftpが表示されていたら設定完了です。
後は実際にFTP接続してファイルリストの取得が可能か確認します。