在上两篇文章中( 上、 中),介绍了ProFTPD 服务器的基本配置方法以及如何加固ProFTPD 服务器,下面继续介绍配置 安全的ProFTPD服务器的其他安全策略。
四、其他安全策略 1.隐藏ProFTPD服务器版本信息 通常软件的BUG信息是和特定版本相关的,因此版本号是***寻求最有价值的信息。隐藏ProFTPD版本号比较简单,修改配置文件:/etc/Proftpd.conf: 2.伪装ProFTPD服务器 Windows下的FTP服务多是Serv-U,可以把ProFTPD伪装为Serv-U,方法是修改配置文件proftpd.conf,添加如下内容: 这样从表面上看,服务器就是一个运行着Serv-U的Windows了。 以非root权限运行ProFTPD 。修改配置文件:/etc/Proftpd.conf: 4.监控ProFTPD服务器运行情况 通常新部署一个ProFTPD服务器之后需要进行一段时间的监控:记录FTP连接记录、谁连接到我的FTP服务器。Proftpd本身附带了几个命令可以使用。 (1) 记录FTP连接数 使用usr/local/bin/ftpcout命令,可以显示FTP服务器连接用户数量信息。 我们还可以使用watch命令配合使用,运行下面命令: (2) 查找谁与FTP服务器连接 使用usr/local/bin/ftpwho命令可以显示谁连接到FTP服务器。一个简单的输出如下: 5.修改配置文件服务器 ProFTPD使用的配置文件和Apache类似: (1)通过IP地址限制FTP访问 假设要允许主机名称myhost.domain.com访问FTP服务器,首先使用命令: (2)使用PAM作为ProFTPD授权用户的鉴别方法 ProFTPD可以加入嵌入式认证模块,成为PAM-aware的FTP服务器。PAM全称:Pluggable Authentication Module (嵌入式认证模块)。它最初有SUN公司开发;很快被Linux社区的接受,并且开发了更多的模块。其目标是提供一套可用于验证用户身份的函数库,从而将认证从应用程序开发中独立出来。Linux-PAM处理四种独立的(管理)工作。它们是: 认证管理; 帐号管理; 会话期间管理;和密码管理。 PAM工作方式: (1) 调用某个应用程序,以得到该程序的服务。
下面手工建立一个/etc/pam.d/ftp文件包括以下内容: %PAM-1.0 auth required /lib/security/pam_listfile.so item=user \ sense=deny file=/etc/ftpusers onerr=succeed auth required /lib/security/pam_stack.so service=system-auth auth required /lib/security/pam_shells.so account required /lib/security/pam_stack.so service=system-auth session required /lib/security/pam_stack.so service=system-auth 然后在配置文件/etc/Proftpd.conf加入两行: AuthPAMAuthoritative on AuthPAMConfig ftp 这样ProFTPD服务器会自动把/etc/pam.d/ftp配置用于用户授权。这样用户连接到ProFTPD服务器时都由PAM使用/etc/pam.d/ftp文件进行认证。 (3)对FTP用户使用chroot限制 Unix(以及类Unix)操作系统提供了一种功能,让用户在重新映射的根文件系统中执行进程。chroot(更改根目录)命令会将根(/)文件系统的重新映射转换成相对于当前根目录的指定目录,然后在新的根目录下执行指定的命令。ProFTPD服务器要限制普通FTP用户可以访问的目录,配置很简单,如果限制skate组的skate用户登录时不能切换到其他目录,修改配置文件加入一行: (4)限制FTP命令特权 *禁止一些用户创建和删除目录的特权 如果发现一些用户有威胁行为,可以把他放在一个特定组中(badusers)使用如下的配置: 如果要建立一个只能上载的FTP服务器,在主服务器或者虚拟主容器中使用如下配置:
(5)控制FTP命令缓冲区大小 许多***通过发送一个大尺寸的命令***FTP服务器,希望造成服务器缓冲区溢出。可以在使用CommandBufferSize命令可以限制客户端命令长度。通常设定为512。 (6)修改ProFTPD服务器使用端口 ProFTP如果使用Stand-alone模式,可以通过设置proftpd.conf来控制它。使用不同端口的设置也较为简单,只需在proftpd.conf中将“Port xx”改为需要的值即可。 一些用户通常访问ISP的FTP服务器时,会看到一些不应当的系统信息,因此隐藏这些信息是必要的,下面是一个配置: (8)简化配置文件 对于初学者来说看到大量的配置文件和注释时反到会感到不知所措。如果/etc/group 中定义了一个novices的组,希望组用户可以在 /ftp/download目录中上传和下载,可以如下配置proftpd.conf : 五、加密FTP服务器与客户端连接 传统的网络服务程序FTP在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,嗅探器非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的,就是很容易受到“中间服务器”(server-in-the-middle)这种方式的***。所谓“中间服务器”的***方式,就是“中间服务器”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间服务器”转手后做了手脚之后,就会出现很严重的问题。虽然近年来出现了很多种ftp的替代服务,例如ssh加密通道的sftp/scp,或使用IPSEC协议的×××通道等等,但是在大多数情况下,ftp的通用性和易用性使得它在很长一段时间内必然无法被完全取代。所以如同其他一系列古董服务(例如SMTP/HTTP)一样,近年来也出现了一些不需要对ftp协议自身做完全更改的协议扩展模块,能够良好的完成兼容性和功能扩展。ftp SSL/TLS Extension就是其中一种方式。 SSL/TLS协议,SSL(Secure SocketLayer)最早是netscape公司设计的用于HTTP协议加密的安全传输协议,SSL工作于TCP协议的传输层(TCP层)和应用程序之间。作为一个中间层,应用程序只要采用SSL提供的一套SSL套接字API来替换标准的Socket套接字,就可以把程序转换为SSL化的安全网络程序,在传输过程中将由SSL协议实现数据机密性和完整性的保证。SSL协议的当前版本为3.0,当SSL取得大规模成功后,IETF(www.ietf.org)将SSL作了标准化,规范为RFC2246,并将其称为TLS(TransportLayerSecurity)。从技术上讲,TLS1.0与SSL3.0的差别非常微小,SSL由于其历史应用的原因在当前的商业应用程序之中使用得更多一些。 1.首先配置文件
# mkdir /etc/ssl/certs 3.制作最高层认证中心 (Root CA) Private Key ( Public Key )
5. 接下来设定/usr/local/etc/proftpd.conf,主要是在最后加上以下有关TLS的设定 < IfModule mod_tls.c > 使用支持TSL技术的客户端连接FTP服务器。到此为止服务器端安装设置完毕,登陆服务器的客户端使用FlashFXP , FlashFXP由于安装使用的文章比较多,所以本文就不详细介绍了。其他支持TLS连接的客户端很多windows环境下的FileZilla、UltraFXP,Linux环境下的C-kermit 8.0(http://www.columbia.edu/kermit/ck80.html ),fireftp(firefox浏览器的ftp插件下载链接:http://releases.mozilla.org/pub/mozilla.org/extensions/fireftp/fireftp-0.94.2-fx.xpi )和lftp(http://lftp.yar.ru/ )。 lftp 是一个功能强大的下载工具,它支持访问文件的协议: ftp, ftps, http, https, hftp, fish.(其中ftps和https需要在编译的时候包含openssl库)。llftp的界面非常想一个shell: 有命令补全,历史记录,允许多个后台任务执行等功能,使用起来非常方便。它还有书签、排队、镜像、断点续传、多进程下载等功能。 命令行语法 如果在命令行中输入的站点名称,lftp将直接登录站点,如果在命令行不输入站点名称,则必须在进入到lftp界面后用open命令打开 。 更多可以支持TSL的FTP客户端查看列表:http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html 这样我们就成功的为FTP增添了TSL加密连接.而一个比较完整安全的FTP站点也配置完成了 。 |