使用Proftpd搭建多功能FTP服务器(一)

  理论描述

  Linux系统中,有不少实现FTP服务器的软件套件。但是,大部分都是基于Linux系统用户。。这一方面,没必要,ftp用户能上传下载文件即可;另一方面,不安全,ftp用户一旦采用弱密码,则会大大降低系统安全性。

  根据我们的需求,我们的FTP服务器需要满足以下特点:

  匿名登录

  FTP的Passive传输模式

  UTF-8编码,对客户端推送语言编码

  虚拟用户,用户磁盘空间限额

  FTPS安全传输

  根据以上需求,我们采用了proftpd这款软件。它不但能优雅的完成上述功能,还能有更多的强大功能等待我们发现。

  proftpd服务器完全使用编译的方式安装软件,使用一个配置文件来配置服务。proftpd支持使用mysql数据库存储用户信息。然而,在满足我们需要的情况下,为了保持系统简洁性,我们采用文件存储用户信息。

  proftpd软件短小精悍,官方鸟语文档丰富,可读性非常好。

  操作步骤

  获取软件包

  搭建系统时,官方最新的稳定版本是1.3.xx,从下面地址下载源代码包:

  ftp://ftp.proftpd.org/distrib/source/

  下载后,解压。

  tar xvfproftpd-1.3.xx.tar.gz

  安装软件

  这里采用编译的形式安装

  ./configure–with-modules=mod_quotatab:mod_quotatab_file:mod_ban:mod_tls:\

  mod_rewrite:mod_ifsession–enable-ctrls –enable-nls

  –with-modules//编译时包括选项:

  mod_quotatab  //启用 quota用户磁盘限额

  mod_quotatab_file  //采用基于文件的quotatab

  mod_ban //启动动态黑名单,防止密码猜测,DDOS攻击

  mod_tls  //启用tls,实现功能FTPS

  mod_rewrite  //启用重写,可实现用户上传内容自动改名

  mod_ifsession  //启用会话判断,可判断会话,对用户IP设置规则。

  –enable-ctrls  //启用访问控制,可设置ACL

  –enable-nls  //启用语言探测,解决中文乱码。

  make

  //默认安装到/usr/local/ ,需要root权限

  makeinstall

  编译安装完成后,我们看一下,安装后的文件分布:

  [root@ftp ~]# cd /usr/local

  [root@ftp local]# ls -R

  ./bin:

  ftpasswd  ftpcount ftpdctl  ftpmail  ftpquota ftptop  ftpwho  prxs

  ./etc:

  conf.d    proftpd.conf    (部分输出)

  ./etc/conf.d:

  ban.tab     ftpd.group   ftpquota.limittab  mod_ban.conf    mod_tls.conf      proftpd-key.pem

  cacert.pem  ftpd.passwd ftpquota.tallytab mod_quota.conf proftpd-cert.pem whitelist

  配置主配置文件

  接下来,讲解配置文件。下面的配置文件只是一个实例,并不通用。使用者根据自身情况酌情修改,

  在开始配置proftpd配置文件之前,请确保已经正确配置了,proftpd需要的文件,目录,文件池等必要条件。

  # This isa basic ProFTPD configuration file . rename it to

  #'proftpd.conf' for actual use.  Itestablishes a single server

  # and asingle anonymous login.  It assumes thatyou have a user/group

  #"nobody" and "ftp" for normal operation and anon.

  #————————————————————————–

  # mainconfigure for

  #                          ftp.xiyang-liu.com

  #                                                 by xiyang-liu

  #————————————————————————–

  ##配置管理员邮箱地址,实际没什么用,服务器相当安全,至今没给我发过邮件

  ServerAdmin                        xiyangliu1987@gmail.com

  ##配置服务器名,实践说明在设置了服务器伪装后,不提示服务器名。

  ServerName"Xiyang-liu.comFTP Server"

  ## 配置服务器伪装,这里我们伪装proftpd成Server-U服务器。

  ServerIdent   on    "Serv-UFTP Server v6.4 for WinSock ready…"

  ##设置服务器运行模式,独立服务,或者被监管

  ServerType                         standalone

  #ServerType                        inetd

  ##设置为默认服务器

  DefaultServer                      on

  ##设置服务器进程运行使用的用户

  User                               nobody

  ##设置服务器进程运行使用的组

  Group                             nobody

  ##设置关闭IPv6支持

  UseIPv6                           off

  ##设置服务器接受请求的端口

  Port21

  ##设置被动模式使用的端口范围

  PassivePorts6000065535

  ##设置用户上传文件的权限掩码

  Umask022

  ##设置用户被chroot锁定到的各自的Home目录

  DefaultRoot~

  ##关闭欢迎信息显示

  DeferWelcome                       off

  ##如果显示欢迎信息,则指定显示的文件

  DisplayLogin                       welcome.msg

  ##指定切换文件夹时,显示的欢迎信息

  DisplayChdir.message

  #

  #

  ##登录超时时间,从出现输入用户名的提示符到断开连接的时间

  TimeoutLogin1200

  ##空闲超时,无操作超时

  TimeoutIdle600

  ##不传输超时,数据连接建立,但是没有数据传输

  TimeoutNoTransfer900

  ##延迟超时,从数据连接建立到有数据传输最大延迟时间

  TimeoutStalled3600

  ##不使用DNS反查询

  UseReverseDNS                     off

  ##上传时,允许覆盖已有的文件

  AllowOverwrite                    yes

  ##不使用RFC 1413协议反查用户信息,加快FTP访问速度

  IdentLookups                       off

  ## 开启delay引擎,更安全。

  ##        为什么这么说呢Proftpd在接受用户请求的时候,会查询用户列表,以确

  ##定是否有这个用户。如果有,还会查询黑名单列表,访问控制列表。这些查询都需要

  ##时间。所以,不同情况(服务器存在账户和不存在账户)下,从输入用户名到出现密

  ##码提示符之间的时间会有一个时间差值。这个时间很短,凭人无法感觉,但是计算机

  ##可以识别,通过对这个时间差进行分析,可以试探那些Proftpd上存在哪些用户,不

  ##存在哪些用户。

  ##   开启delay引擎,会均衡这个时间段。无论输入的用户存不存在,从用户名输入到

  ##弹出密码提示符的时间间隔都是一样的!

  DelayEngine                        on

  ##指定日志格式

  LogFormatdefault"%h%l %u %t \"%r\" %s %b"

  LogFormat                          auth    "%v [%P] %h %t \"%r\" %s"

  LogFormat                          write   "%h %l %u %t \"%r\" %s%b"

  TransferLog/usr/local/var/proftpd/log/transfer.log

  ExtendedLog/usr/local/var/proftpd/log/access.log WRITE,READ write

  ExtendedLog/usr/local/var/proftpd/log/auth.log AUTHauth

  #

  #

  ##如果存在lang模块

  <<>IfModule mod_lang.c>

  ##开启lang引擎

  LangEngine on

  ##默认语言英文

  LangDefaulten_US

  ##使用强制utf8编码

  UseEncoding on

  ##制定语言模块位置

  LangPath/usr/local/share/locale/

  <<>/IfModule>

  #

  ##如果存在facts模块

  .c>

  ##关闭FactsAdvertise,提高兼容性。

  FactsAdvertise off

  <IfModule>

  #

  ##限制特定操作

  <<>LimitSITE_CHMOD,SITE_CHGRP>

  ##阻止所有用户使用更改权限 更改组命令

  DenyAll

  <<>/Limit>

  #

  ##设置虚拟用户

  ##指定虚拟用户的passwd和group文件,格式和系统文件一样

  AuthUserFile                       /usr/local/etc/conf.d/ftpd.passwd

  AuthGroupFile/usr/local/etc/conf.d/ftpd.group

  #这里->这里 之间是约束说明。

  ##创建虚拟用户的时候制定home目录,应该是下面目录的子目录。

  # homedir/ftp_pool/home/

  ##虚拟用户统一使用nobody的UID和GID

  ###问:为什么不使用不同的UID和GID那样不是更安全吗

  ###答:也可以使用不同的UID和GID,但是那样太费事。使用不同UID和GID。首先,

  ##要判断和系统UID和GID是不是有冲突;其次,要每次创建用户需要找一个没用过的

  ##UID和GID;再次,得给新创建的用户赋予权限;最后,灾难恢复太麻烦。

  # useridnobody

  # groupidnobody

  #这里->这里 之间是约束说明。

  #

  #

  #设置匿名用户资源

  <<>Anonymous/ftp_pool/pub/>

  ##匿名用户使用的用户和组

  User             ftp

  Group            ftp

  ##用户别名

  UserAlias                 anonymous ftp

  ##不要求合法的shell

  RequireValidShellno

  MaxClients50

  ##限制匿名用户登录的位置

  <<>Limit LOGIN>

  ##限制顺序为先允许 再阻止

  OrderAllow,Deny

  ##允许内网用户登录匿名目录

  Allow10.0.0.0/8

  Allow172.16.0.0/12

  Allow192.168.0.0/16

  ##阻止所有其他用户

  Deny ALL

  <<>/Limit>

  #

  ##配置upload目录权限

  #限制写

  Order Allow,Deny

  ##只允许技术部上传

  Allow 10.1.5.0/24

  ##阻止其他所有用户

  Deny ALL

  <<>/Limit>

  <Directory>

  ##配置匿名用户权限

  <<>Limit WRITE>

  ##阻止所用户的写权限

  DenyAll组织所有

  <<>/Limit>

  <Anonymous>

 

上一篇:安卓防火墙 PS DroidWall

下一篇:批量修改远程linux服务器密码