配置chkconfig脚本

Proftpd的init.d脚本位于Proftpd源代码安装包contrib/dist/rpm目录,复制并改名到/etc/init.d/proftpd即可。

contrib/dist/rpm/proftpd.init.d

注意:源代码里面的安装包由于路径问题,无法执行,实际操作,请修改相应部分。

------------------------/etc/init.d/proftpd---------------------------------
#!/bin/sh
#

# Startupscript for ProFTPD
#
#chkconfig: - 85 15
#description: ProFTPD is an enhanced FTP server with a focus towards \
#              simplicity, security, and ease ofconfiguration. \
#              It features a very Apache-likeconfiguration syntax, \
#              and a highly customizable serverinfrastructure, \
#              including support for multiple'virtual' FTP servers, \
#              anonymous FTP, andpermission-based directory visibility.
#processname: proftpd
# config:/usr/local/etc/proftpd.conf
# pidfile:/usr/local/var/proftpd.pid

### BEGININIT INFO
#Provides: proftpd ftpserver
#Required-Start: $local_fs $network $named $remote_fs
#Required-Stop: $local_fs $network $named $remote_fs
#Default-Stop: 0 1 6
#Short-Description: ProFTPd FTP Server
#Description: ProFTPd is an enhanced FTP server with a focus towards
#       simplicity, security, and ease ofconfiguration.
#       It features a very Apache-likeconfiguration syntax,
#       and a highly customizable serverinfrastructure,
#       including support for multiple 'virtual'FTP servers,
#       anonymous FTP, and permission-baseddirectory visibility.
### ENDINIT INFO

# Sourcefunction library.
./etc/rc.d/init.d/functions

# Sourcenetworking configuration.
./etc/sysconfig/network

# SourceProFTPD configuration.
PROFTPD_OPTIONS=""
if[-f /etc/sysconfig/proftpd ];then
./etc/sysconfig/proftpd
fi

# Checkthat networking is enabled.
[ ${NETWORKING}="no"]&&exit1

# Makesure the binary is present.
##修改sbin/proftpd路径
[-x /usr/local/sbin/proftpd ]||exit5
##添加下面一行
PATH=$PATH:/usr/local/sbin:/usr/local/bin/
RETVAL=0
prog="proftpd"

start(){
         echo -n $"Starting$prog: "
         daemon proftpd $PROFTPD_OPTIONS 2>/dev/null
         RETVAL=$?
         echo
##修改lock/proftpd路径
[ $RETVAL -eq 0]&& touch /usr/local/var/lock/proftpd
}

stop(){
         echo -n $"Shuttingdown $prog: "
         killproc proftpd
         RETVAL=$?
         echo
##修改lock/proftpd路径
[ $RETVAL -eq 0]&& rm -f /usr/local/var/lock/proftpd
}

# See howwe were called.
case"$1"in
         start)
                 start
;;
         stop)
                 stop
;;
         status)
                 status proftpd
                 RETVAL=$?
;;
         restart)
                 stop
                 start
;;
try-restart|condrestart)
##修改lock/proftpd路径
if[-f /usr/local/var/lock/proftpd ];then
                          stop
                          start
fi
;;
         reload|force-reload|reread)
                 echo -n $"Re-reading$prog configuration: "
                 killproc proftpd -HUP
                 RETVAL=$?
                 echo
;;
         suspend)
                 hash ftpshut >/dev/null2>&1
if[ $?=0];then
if[ $# -gt 1 ];then
                                   shift
                                   echo -n "Suspendingwith '$*'"
                                   ftpshut "$@"
                                   RETVAL=$?
else
                                   echo -n "SuspendingNOW"
                                   ftpshut now "Maintenancein progress"
                                   RETVAL=$?
fi
else
                          echo -n "Noway to suspend"
                          RETVAL=1
fi
                 echo
;;
         resume)
if[-f /etc/shutmsg ];then
                          echo -n "Allowingsessions again"
                          rm -f /etc/shutmsg
else
                          echo -n "Wasnot suspended"
                          RETVAL=2
fi
                 echo
;;
*)
                 echo -n "Usage:$prog 
start|stop|restart|try-restart|reload|status|reread|resume"
                 hash ftpshut
if[ $?=1];then
                          echo '}'
else
                          echo '|suspend}'
                          echo 'suspendaccepts additional arguments, which are passed to ftpshut(8)'
fi
exit2
esac

exit $RETVAL

然后执行命令添加并启用Proftpd服务

chkconfig --addproftpd
chkconfigproftpd on
serviceproftpd start

配置日志

由于Linux本身出于安全考虑,限制用户可操作的文件的大小。每个程序都只能操作大小不超过2G的文件。使用者可以选择修改Linux的ulimit信息。增大这个大小,或取消限制。但是,作者建议,还是乖一点,做个日志归档。

proftpd开发者为我们写好了RedHat发行版中使用的logrotate配置文件,位于contrib/dist/rpm/目录中,复制到/etc/logrotate.d/目录中并改名即可。

contrib/dist/rpm/proftpd.logrotate

同样,要根据实际情况修改路径信息。修改过的文件如下

#修改路径
/usr/local/var/proftpd/log/*.log/var/log/xferlog {
    compress
    missingok
    notifempty
    sharedscripts
    postrotate
        #修改路径
        test -f /usr/local/var/lock/proftpd&& /usr/bin/killall -HUP proftpd || :
    endscript
}

配置xinetd (可

如果使用xinetd管理proftpd,则需要配置这部分内容,否则可以跳过不看。但话说回来,看看也没什么坏处,哈哈~

在服务器负载不很重的情况下,为了节省服务器资源。往往使用xinetd管理proftpd服务。使用xinetd也能加强服务器的安全,可以有效阻止DDOS攻击。

首先修改proftpd.conf文件ServerType部分的standalone为inetd,其次,检查xinetd是否安装,没安装就安装先。

yum install xinetd -y

安装好xinetd后,复制配置文件contrib/dist/rpm/xinetd到/etc/xinetd.d/目录并改名为proftpd。文件内容照常修改如下

# default:off
#description: The ProFTPD FTP server 
serviceftp
{
        flags           = REUSE
        socket_type     = stream
        wait            =no
        user            = root
#修改下面一行
        server          =/usr/local/sbin/in.proftpd  
#添加下面一行
        server_args      =-c /etc/proftpd.conf 
#注释掉下面两行
#log_on_success  += DURATION
#log_on_failure  += USERID
        nice            =10
        disable         =no
}

最后说明一下,使用xinetd管理proftpd时,语言模块工作不正常,有可能是一个bug。最好使用standalone模式吧。

配置防火

需要开放20,21,60000-65535端口。

-A INPUT -m state --state NEW -mmultiport -p tcp --dport 20,21-d 10.1.10.168-j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 60000:65535-d 10.1.10.168-j ACCEPT

结合网络管理员,配置nat地址映射,配置防火墙区域间策略允许20,21端口通过。在支持ASPF的防火墙上设置域间启用detect ftp,其他防火墙设置相应策略以支持ftp的被动传输模式。