ProFTPdの構築メモ

・インストール
  使用した環境はVineLinux 3.2 ProFTPd 1.2.10-0vl1.1 BA8000Pro
  特に問題なし。最近のLinuxは楽でいい。
    注意するべきは、最小構成を選んでおかないとX11だのSquidだのといらないものまで入ってきてしまうことくらいか。
  HDDが少ない(6GB)ので、Samba経由でWindowsPCに繋がっている大容量ストレージに接続、そこをFTPルートにしてしまうことに。
    #追記 現在HTTP,FTP,SMTP,POP3,DHCP(LOCAL),NTP(LOCAL),SMB(LOCAL),HTTHOSTが動いています。それらのメモはまた今度。
  proftpd samba samba-client ntp smartmontools iptablesをaptでインストール
  aptでアップグレードして、/etc/lilo.confの書き換え

・ネットワークの設定
  とりあえずIPを固定する。
    # ifconfig eth0 192.168.1.**
    # route add default gw 192.168.1.1 dev eth0
  これらの設定を起動時に行うには、以下のファイルを編集
     /etc/sysconfig/network-scripts/ifcfg-eth0
    -BOOTPROTO=dhcp
    +BOOTPROTO=static
    IPADDR=192.168.1.**
    GATEWAY=192.168.1.1
     /etc/sysconfig/static-routes
    +any net default gw 192.168.1.1 dev eth0
     /etc/sysconfig/network
    -HOSTNAME=localhost.localdomain
    +HOSTNAME=HOSTNAME
  ここら辺で一度再起動
  ここから先はSSHで作業

・Sambaの設定
  Sambaサーバ側でクォータ・アクセス許可を設定しておく
  /etc/samba/smb.confを編集
    workgroupとserver stringを変更
    hosts allowは当然かけておく
    load printersはNoに
  /etc/fstabに以下の行を追加
    //{Sambaサーバ}/{共有名} /{FTPルート} smbfs rw,username={ユーザー名},password={パスワード},iocharset=shift-jis,codepage=cp932 0 0
  ここでiocharsetをshift-jisにしておくとクライアントからSJISで使える
  マウント
    # mount /{FTPルート}
    $ ls /{FTPルート} でファイルが見えればOK

・ProFTPdの設定
  とりあえずProFTPdを入れる
    # apt-get install proftpd
  /etc/proftpd.confに次のエントリを追加
    UseReverseDNS off
    IdentLookups off
    DefaultRoot /{FTPルート}
    ListOptions "-a"
    PassivePorts 4000 4029
    MasqueradeAddress {グローバルIPまたはDDNS名}
  <Anonymous>セクションに次のエントリを追加
    <Limit LOGIN>
      DenyAll
    </Limit>
  <Directory>セクションに次のエントリを追加
    AllowOverwrite on
    AllowRetrieveRestart on
    AllowStoreRestart on
  また、ログオン時のメッセージを隠したければ
    DefaultServer offに変更
  ログを取るなら、/var/log/proftpd/を作成した上で次のエントリを追加
    LogFormat allinfo "%t : %u (%a [%h]) : [%s], %T, %m (%f)"
    LogFormat write "%t : %u : %F (%a)"
    LogFormat read "%t : %u : %F (%a)"
    LogFormat auth "%t : %u (%a [%h])"
    
    ExtendedLog /var/log/proftpd/all.log ALL allinfo
    ExtendedLog /var/log/proftpd/write.log WRITE write
    ExtendedLog /var/log/proftpd/read.log READ read
    ExtendedLog /var/log/proftpd/auth.log AUTH auth

・動かしてみる
    # service proftpd start
  LAN内からはローカルIPじゃないと繋がらないので注意。
  ルータの中からグローバルIP指定してつなごうとしてもルータの制限で出来ないようです(iptablesの設定で何とかなる)
  ftpコマンドまたはFFFTPなどでログインして、特に問題がなければ、後は好みで設定を変える

・iptablesの設定
  ポートフォーワード・ファイアウォールをつける。
  設定のコマンドの実行回数が多いので、シェルスクリプトにまとめる。
  eth0がWAN、eth1がLAN ルータからDMZでぶら下がっている状態。そこからさらに数台のクライアントがぶら下がっている。
  Sambaは外側のルータで止めてある。それ以外は全てサーバにフォーワーディングがかかっている。
    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -F
    iptables -t nat -F
    iptables -X
      #設定の初期化
    iptbales -P INPUT DROP
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      #基本的に入ってくるパケットは落とす。
    iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
    iptables -P OUTPUT ACCEPT
    iptables -A OUTPUT -p udp -j ACCEPT
    iptables -P FORWARD DROP
    iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
      #ポートフォーワーディングもかけない。
    iptables -A INPUT -p tcp --dport 22 -j ACCEPT #SSH
    iptables -A INPUT -p udp --sport 53 -j ACCEPT #DNS
    iptables -A INPUT -p udp -i eth1 --dport 123 -j ACCEPT #NTP
    iptables -A INPUT -p udp -i eth1 --sport 68 --dport 67 -j ACCEPT #DDNS
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT #HTTP
    iptables -A INPUT -p tcp --dport 21 -j ACCEPT #FTP
    iptables -A INPUT -p tcp --dport 4000:4029 -j ACCEPT #FTPDATA(PASV)
      #他に空けたいポートも同じ要領で。
    iptables -t nat -A POSTROUTING -o eth0 -s $LOCALIP_MASK -j MASQUERADE
      #静的マスカレード これしないとeth1経由で外に出られない
    iptables -t nat -A PREROUTING -p tcp -i eth0 --dport $HTTHOST_PORT -j DNAT --to $HTTHOST_SERVER:$HTTHOST_PORT
    iptables -A FORWARD -p tcp --dport $HTTHOST_PORT -j ACCEPT
      #HTTHOSTのためにフォーワーディングをかける
    iptables -t nat -A PREROUTING -p tci -i eth1 -d $GLOBAL_IP -j DNAT --to $SERVER_IP
      #LANの内側からグローバルIPでサーバを見えるようにする(セキュリティ上好ましくないかも?)
    iptables -A OUTPUT -o eth0 -d 192.168.0.0/16 -j DROP
      #ローカルIPが外に流れないように 172.16.0.0/12などでもやっておく
    iptables -N LOGGING
    iptables -A LOGGING -p tcp --sport 137:139 -j DROP
    iptables -A LOGGING -p udp --sport 137:138 -j DROP
    iptables -A LOGGING -j LOG --log-level warning --log-prefix "DROP:" -m limit --limit 1/s
    iptables -A LOGGING -j DROP
    iptables -A INPUT -j LOGGING
    iptables -A FORWARD -j LOGGING
      #ログの設定。
  iptablesの設定は再起動すると消えるので、/etc/rc.localあたりに書き加えておく。

・その他の設定
  ntpd,smartd,smb,proftpdをchkconfigで自動起動デーモンに追加しておく
  ついでに、gpm,kudzu,murasakiは必要ないので止めてしまう
  .vimrcにset nobackupを追加
  /etc/bashrcにalias ls='ls -F --show-control-chars'を追加
  /etc/ssh/sshd_configにAllowUser {作業用ユーザ}を追加

・注意点
  この記述はあくまで管理人の環境で構築したときの備忘録です。
  他の環境では適用できないかもしれませんし、間違いもあるかと思います。
  参考にする際は自己責任でどうぞ。