【目的】

在日常工作中,我们经常需要在某服务器上开FTP(Server)服务。但就是这么简单的事情通常也会变得很复杂,原因如下:
1、需要开通FTP的服务器没有公网IP地址;(即不能直接访问到)
2、这样的服务器很多,可能是成百上千台;
3、所有的FTP账号必须为虚拟账号,不能为本地,而且需要集中存储。

这种情况很多,比如企业中通常需要给开发、测试人员相应的开发、测试环境,而这环境里面的机器通常只有有私网地址,开发人员需要通过FTP上传自己 的代码等。

【解决方案】

1、对于问题1(无公网地址),解决的方法其实很多,比如使用Iptables做端口映射,甚至使用VPN,但这都太复杂、维护成本高;更好的办法 是使用一台有公网(同时又有私网)的服务器做FTP代理,而这种代理只要开启即可,不需要为后面每台真正的FTP Server设置NAT。(这和iptables的方式不一样)
2、对于问题2,3只能使用虚拟账号,并将所有账号信息集中存储到某数据库中。
大体架构如下:

此架构假设:
* FTP代理服务器的IP地址为:8.8.8.8(公网)和192.168.1.10(私网)
* FTP Server使用pureftpd,地址为192.168.1.11
MySQL Server IP地址为192.168.1.15

在这种架构下,用户登陆FTP的流程如图所示:
1. 用户提交用户名和密码给FTP Proxy
2.FTP Proxy访问FTP Server
3.FTP Server访问MySQL Server进行用户名密码验证

【配置过程】

1. 配置FTP Proxy服务器-8.8.8.8
1.1 下载和安装FTP proxy:

wget ftp://ftp.ftpproxy.org/pub/ftp.proxy/ftpproxy-1.2.3.tgz
tar czvf ftpproxy-1.2.3.tgz
cd ftpproxy-1.2.3
make && make install

1.2 启动ftp.proxy

ftp.proxy -D 2121 -e -l -m -t 1800

参数说明如下:
1)-D 2121 指定端口为2121
2)-e 启用客户端服务器选择(非常重要),通常我们的ftp账号为ftpuser这种,那么使用此参数后,我们可 以访问后端的某台服务器,比如192.168.1.15,使用的账号名变成:ftpuser@192.168.1.15
3)-l Logging
4)-m monitor mode
5)-t 1800 超时时间

2.配置MySQL Server(192.168.1.15)

2.1 安装mysql:(假设还没安装)
yum install mysql-server
2.2 修改/etc/my.cnf:
bind-address=192.168.1.15
2.3 service mysqld start
2.4 修改mysql root密码:
mysqladmin -u root password rootpassword
2.5 创建pure-ftpd需要的数据库
mysql -u root -p rootpassword
执行如下SQL语句:

CREATE DATABASE pureftpd;
USE pureftpd;
CREATE TABLE `users` (
`id` int(32) unsigned NOT NULL auto_increment,
`User` varchar(16) NOT NULL default ”,
`Password` varchar(64) NOT NULL default ”,
`Uid` varchar(11) NOT NULL default ‘-1′,
`Gid` varchar(11) NOT NULL default ‘-1′,
`Dir` varchar(128) NOT NULL default ”,
`QuotaSize` smallint(5) NOT NULL default ’0′,
`QuotaFiles` int(11) NOT NULL default ’0′,
`ULBandwidth` smallint(5) NOT NULL default ’0′,
`DLBandwidth` smallint(5) NOT NULL default ’0′,
`ULRatio` smallint(6) NOT NULL default ’0′,
`DLRatio` smallint(6) NOT NULL default ’0′,
`comment` tinytext NOT NULL,
`ipaccess` varchar(15) NOT NULL default ‘*’,
`status` enum(’0′,’1′) NOT NULL default ’0′,
`create_date` datetime NOT NULL default ’0000-00-00 00:00:00′,
`modify_date` datetime NOT NULL default ’0000-00-00 00:00:00′,
PRIMARY KEY (`id`,`User`),
UNIQUE KEY `User` (`User`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;

3. 在FTP Proxy服务器上(8.8.8.8)配置pureftpd PHP Manager:
3.1假设Apache2(没有安装自行安装吧)已经安装在/usr/local/apache2目录下,执行如下命令:

mkdir -p /usr/local/apache2/htdocs/ftp
cd /usr/local/apache2/htdocs/ftp
chown -R nobody:nobody /usr/local/apache2/htdocs/ftp
wget http://bbs.chinaunix.net/attachments/month_0701/pureftpd_php_manager_BbPy87OS0Gaj.zip
unzip pureftpd_php_manager_BbPy87OS0Gaj.zip
cp pureftpd-mysql.conf.sample pureftpd-mysql.conf

3.2修改pureftp.config.php(pureftp_php_manager连接mysqld的配置文件地址)
$PUREFTP_CONFIG_FILE = ‘/usr/local/apache2/htdocs/ftp/pureftpd-mysql.conf’;

3.3 修改/usr/local/apache2/htdocs/ftp/pureftpd-mysql.conf中相关信息:

MYSQLServer 192.168.1.15
MYSQLPort 3306
MYSQLSocket /var/lib/mysql/mysql.sock
MYSQLUser root
MYSQLPassword rootpassword
MYSQLDatabase pureftpd
MYSQLCrypt crypt(密码加密方式)

4. 配置FTP服务器-192.168.1.11(安装和配置pure-ftpd)
4.1 安装pure-ftpd(加入MySQL支持)

wget http://download.pureftpd.org/pub/pure-ftpd/releases/pure-ftpd-1.0.29.tar.bz2
tar jxvf pure-ftpd-1.0.29.tar.bz2
cd pure-ftpd-1.0.29
./configure –prefix=/usr/local/pureftpd –with-mysql –with-shadow –with-pam –with-paranoidmsg –with-welcomemsg –with-uploadscript –with-cookie –with-virtualchroot –with-virtualhosts –with-diraliases –with-quotas –with-sysquotas –with-ratios –with-ftpwho –with-throttling
make && make install
cd configuration-file
cp pure-config.pl /usr/local/pureftpd/bin/
chmod +x/usr/local/pureftpd/bin/pure-config.pl
mkdir -p /usr/local/pureftpd/etc
cp pure-ftpd.conf /usr/local/pureftpd/etc
cd ..
cp pureftpd* /usr/local/pureftpd/etc/

4.2 修改/usr/local/pureftpd/etc/pure-ftpd.conf:
MySQLConfigFile /usr/local/pureftpd/etc/pureftpd-mysql.conf

提示:如果FTP账号为nobody这种权限,UID(通常为99)小于1024,需要修改MinUID参数:

MinUID 98

否则出现错误:
Can’t login as [xxx] account disabled pureftpd

4.3. 修改/us/local/pureftpd/etc/pureftpd-mysql.conf:
和3.3内容完全一样。

4.4 启动pure-ftpd:
/usr/local/pureftpd/bin/pure-config.pl /usr/local/pureftpd/etc/pure-ftpd.conf

5.登陆Pureftpd PHP Manager页面创建FTP虚拟账号:
登陆http://8.8.8.8/ftp,创建账号:

如图创建的账号名为:testftp, 主目录为/opt/wwwroot还可以进行其他的设置,自己看图咯 :)

注意
1.此账号只是虚拟账号,并不存在于任何FTP Server上(/etc/passwd文件中),而是存储于MySQL中。
2. IP Access设置为*,表示可以访问任何FTP Server

6.测试登陆:
ftp 8.8.8.8 2121
Connected to 8.8.8.8.
220 server ready – login please
530 login first
530 login first
KERBEROS_V4 rejected as an authentication type
Name (8.8.8.8:root): testftp@192.168.1.11(要访问哪台,就加入@ip 后缀)
331 password required
Password:
230 login accepted
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

注意:如果FTP Server还有192.168.1.12等地址,也可以用testftp@192.168.1.12来登陆192.168.1.12这台FTP Server

一直在用这个,今天终于抽时间总结了下,标题貌似也不是很恰当,凑合著用吧,其他方面同志们挑错吧:)

作者:finalbsd

http://www.ha97.com/906.html

http://bbs.chinaunix.net/thread-1996271-1-1.html

大规模集群FTP代理(基于lvs的vsftpd网络负载均衡方案部署(PASV))的更多相关文章

  1. 解决 RabbitMQ 集群 Channel shutdown: connection error 错误(HAProxy 负载均衡)

    相关文章:搭建 RabbitMQ Server 高可用集群 具体错误信息: 2018-05-04 11:21:48.116 ERROR 60848 --- [.168.0.202:8001] o.s. ...

  2. service几种访问类型(集群外负载均衡访问LoadBalancer , 集群内访问ClusterIP,VPC内网负载均衡LoadBalancer ,集群外访问NodePort)

    一.集群外访问(负载均衡) kind: ServiceapiVersion: v1spec: ports: - protocol: TCP port: 4341 targetPort: 8080 no ...

  3. 1.rabbitmq 集群版安装及使用nginx进行四层负载均衡设置

    1.安装erlang 需要注意erlang的版本是否满足rabbitmq的需求 这里用到的版本是:Erlang 19.0.4   RabbitMQ 3.6.15 wget http://www.rab ...

  4. LVS : Linux Virtual Server 负载均衡,集群,高并发,robust

    1 LVS : Linux Virtual Server http://www.linuxvirtualserver.org/ http://www.linuxvirtualserver.org/zh ...

  5. 集群高可用之lvs

    集群: 随着互联网的发展,大量的客户端的请求,服务器的负载越来越大,单台服务器的负载有限,会导致服务器响应客户端请求的时间越长,甚至产生拒绝服务的情况.目前网站是24小时不间断提供网络服务,仅采用单点 ...

  6. 配置LVS + Keepalived高可用负载均衡集群之图文教程

    负载均衡系统可以选用LVS方案,而为避免Director Server单点故障引起系统崩溃,我们可以选用LVS+Keepalived组合保证高可用性.  重点:每个节点时间都同步哈! C++代码 [r ...

  7. Heartbeat+LVS构建高可用负载均衡集群

    1.heartbeat简介: Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里 ...

  8. 负载均衡集群企业级应用实战—LVS

    一.负载均衡集群介绍 1.集群 ① 集群(cluster)技术是一种较新的技术,通过集群技术,可以在付出较低成本的情况下获得在性能.可靠性.灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技 ...

  9. 项目实战:负载均衡集群企业级应用实战—LVS详解

    目录 一.负载均衡集群介绍 二.lvs 的介绍 三.LVS负载均衡四种工作模式 1.NAT工作模式 2.DR工作模式 3.TUN工作模式 4.full-nat 工作模式 5.四者的区别 四.LVS i ...

随机推荐

  1. smartassembly 使用指南

    原文 http://www.cnblogs.com/hsapphire/archive/2010/09/21/1832758.html smartassembly 提供了一种用于优化和混淆你的 .ne ...

  2. Linux2.6内核 -- 结构的初始化

          Linux 内核中用到了大量的结构体,在编码规范中也给出了结构体初始化的规则,这篇文章中有对其的解释:http://blog.csdn.net/dlutbrucezhang/article ...

  3. ssh添加公钥

    ssh-keygen生成公钥存储在文件: ~/.ssh/id_rsa.pub 如果ssh-add -l命令后没有一串长的字符串, 把私钥密钥对的ID(fingerPrint)加入ssh的认证代理ssh ...

  4. Spring使用小结2

    之前做过不少spring想过知识点内容的摘录, Spring框架的特点.模块组成.优缺点 spring相关的bean管理想过知识点及依赖注入方式 今天说下近端时间中项目中遇到的相关印象比较深的知识点 ...

  5. 方案:抵御 不明SSL证书导致的 中间人攻击

    基于SSL数字证书的中间人攻击已经不是一个新技术了,但是我发现很多人并不清楚这种威胁,甚至感觉无所谓,我相信他们是由于短暂的无知蒙蔽了双眼,希望这篇文章可以让更多的人知道这种攻击方式,并清除这种网络威 ...

  6. mysql 中 LIMIT的简单用法

    mysql--语法: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset --举例: select * from table l ...

  7. CF 584B Kolya and Tanya

    题目大意:3n个人围着一张桌子,给每个人发钱,可以使1块.2块.3块,第i个人的金额为Ai.若存在第个人使得Ai + Ai+n + Ai+2n != 6,则该分配方案满足条件,求所有的满足条件的方案数 ...

  8. 精确覆盖DLX算法模板

    代码 struct DLX { int n,id; int L[maxn],R[maxn],U[maxn],D[maxn]; ]; ) //传列长 { n=nn; ;i<=n;i++) U[i] ...

  9. Direct3D 纹理映射

    纹理映射是将2D的图片映射到一个3D物体上面,物体上漂亮图案被称为纹理贴图, 一个表面可以支持多张贴图等等,下面简单介绍下纹理贴图 纹理贴图UV: 贴图是一个个像素点组成,每一个像素点都由一个坐标最后 ...

  10. 图的最小生成树(Prim、Kruskal)

    理论: Prim: 基本思想:假设G=(V,E)是连通的,TE是G上最小生成树中边的集合.算法从U={u0}(u0∈V).TE={}开始.重复执行下列操作: 在所有u∈U,v∈V-U的边(u,v)∈E ...