vsftpd構築メモ ポート変更含む

    • インストール
# yum install vsftpd
    • xinetd経由で起動できるようにする(以下xinetdからの起動の場合の説明)
// サービス停止
# service vsftpd stop
# chkconfig vsftpd off

// xinetd 設定をコピー
# cp -f /usr/share/doc/vsftpd-2.0.5/vsftpd.xinetd /etc/xinetd.d/vsftpd
# vi !$
// disable = no にする。

# cp -a /etc/vsftpd/vsftpd.conf{,.o}
# vi /etc/vsftpd/vsftpd.conf
// vsftpd.conf のスタンドアロンモードやめる。
listen=YES -> listen=NO
    • FTPポート変更(xinetdからの起動の場合)
# vi /etc/vsftpd/vsftpd.conf
// 20のポートを使わない
connect_from_port_20=YES -> connect_from_port_20=NO(行削除でも良い?)
(pasv_enable=YES は書かない状態デフォルトYESなの不要)
(listen_port=xxx はスタンドアロンモードのときのポート番号を指定するので不要)

// pasv データ転送ポート(20の代替)
pasv_min_port=xxxx
pasv_max_port=xxxx

// 俺ポートを定義する(追記)これがポート21の代わりになる ここがミソ!
# vi /etc/services
ftp_private     xxxx/tcp
ftp_private     xxxx/udp               fsp fspd

// 俺ポートにvsftpd起動設定を合わせる
# vi /etc/xinetd.d/vsftpd
service ftp -> service ftp_private

// 同時接続数
instances = 1

// xinetd 再起動
# /etc/init.d/xinetd restart

// iptables 設定
# vi /etc/sysconfig/iptables
// ftpの制御用(21の代替)、転送用(20の代替)のポートを許可する
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport xxxx -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport xxxx -j ACCEPT
# /etc/init.d/iptables restart
    • umaskを022に。同グループからも操作できるようにする。
(local_umask=022 サンプルと同じ)
    • サーバーアプリ名、バージョンを隠す。
// 適当な文字を入れておく(追記)
ftpd_banner=test server
    • FTP 専用ユーザを作る
# useradd -s /sbin/nologin xxxx
  • 特定のユーザーのみftpログインできるように(他はログインできない)ユーザ制限の設定
userlist_enable=YES
userlist_deny=NO
userlist_file=/etc/vsftpd/user_list

# vi /etc/vsftpd/user_list
許可したいユーザーを追加。デフォ設定とか必要なら削る。
chroot_local_user=YES (デフォルト:NO)
chroot_list_enable=YES (デフォルト:NO)

# touch /etc/vsftpd/chroot_list (空ファイルにする。chrootしないユーザー)
  • 匿名ユーザー(anonymous)の禁止
anonymous_enable=NO
  • ログ設定
// 詳しすぎ?
xferlog_std_format=NO
log_ftp_protocol=YES

// 日本時間にする
use_localtime=YES
  • 設定確認?の仕方
// ftpコマンドの引数にポート変更はないので
$ ftp 
> open localhost xxxx <- 変更したport

// telnet でやる
$ telnet localhost xxxx
  • 特定の時間のみアクセス可
# vi /etc/xinet.d/vsftpd (追記)
        access_times            = 17:00-23:59 0:00-4:00
// 24:00 は認識しなかったので日をまたぐときは xx:xx-23:59 0:00-xx:xx とする
  • TODO
    • 済)vsftpd xinetd で起動する
    • 済)FTPポート変更
    • 済)Standaloneモード NO
    • 済)umaskを022に
    • 済)ftpサーバーの名前バージョン出さない
    • 済)FTP 専用ユーザを作る
    • 済)特定のユーザーのみftpログインできるように(他はログインできない)
    • 。から始まるファイルを置けないように?
    • 。から始まるファイルを見えないように。
    • 済)chroot
    • 済)ログ設定
      • 済)時刻表示の変更
    • 済)匿名ユーザーanonymousの停止
    • 済)特定の時間のみアクセス可
    • 特定のドメイン?、IPのみアクセス可

@IT:セキュリティ用語事典 FTP PASV

通常FTPは制御用21番、データ用20番のポートに双方で接続し処理をすることで転送が行われる

要するに、
1. 何番ポートでFTPをサービスするか決める。
2. 決めたポート番号に対するサービス名を決めて、/etc/servicesに追加(または既存サービスの修正)を行う。
3. /etc/xinetd.d/vsftpdの"service FTP"の"FTP"の部分を2.で決めたサービス名に書き換え、xinetdを再起動する。
これでいけるはずです。

スーパーサーバーとは、ポート監視用のデーモンプログラムで、あるポートに対してアクセスがあると、設定ファイル (/etc/xinetd.d/ 等) を元にポートに対応したサービス (ftp 等) を起動します。この際、ポートとサービスの関係は、/etc/services によって導かれます。