利用proftpd的mod_proxy模块实现ftp的反向代理

张姚石
2023-12-01

公司内部有多个研发部门,每个研发部门都需要利用ftp来上传代码,但是外网地址只有一个,一开始我们采用的是利用haproxy加上代理主动端口来实现ftp的反向代理,但是这个方法有一个缺陷就是需要开放大量的主动端口,这样对于服务器的安全性就不是很好,后来找到proftpd的mod_proxy模块具备了类似于nginx的反向代理功能。我这里采用的是基于每个用户的反向代理,这要求每台ftp服务器都配置不同的用户。

1.安装依赖

我用的是centos7.5的环境,可能有一些包默认就已经安装了,所以我安装的依赖就只有下面这些。
yum install -y gcc openssl openssl-devel sqlite sqlite-devel unzip wget
cd /data/tools/
2.下载proftpd
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.6.tar.gz

3.下载mod_proxy模块
wget https://github.com/Castaglia/proftpd-mod_proxy/archive/master.zip

4.解压proftpd
tar -zxf proftpd-1.3.6.tar.gz
ln -s /data/tools/proftpd-1.3.6 /usr/local/proftpd

5.解压mod_proxy模块
cd /data/tools/proftpd-1.3.6 && unzip /data/tools/master.zip -d .

6.将mod_proxy模块移动到contrib目录
mv proftpd-mod_proxy-master/ contrib/mod_proxy

7.编译proftpd并加载mod_proxy模块
./configure --prefix=/usr/local/proftpd/ --with-includes=/usr/include/openssl:/usr/include:/usr/local/src/proftpd-1.3.6/contrib:/usr/local/src/proftpd-1.3.6/contrib/mod_proxy/include --with-libraries=/usr/lib/ssl:/usr/lib/x86_64-linux-

gnu/:/usr/local/src/proftpd-1.3.6/contrib/mod_proxy/lib --enable-openssl --with-modules=mod_sql:mod_sql_sqlite:mod_tls:mod_sftp:mod_proxy --enable-dso

8.安装proftpd
make && make install

9.配置proftpd反向代理
在原生的配置文件中添加如下配置


<IfModule mod_proxy.c>
  ProxyEngine on
  ProxyLog /var/log/proftpd/proxy.log
  ProxyTables /var/ftp/proxy

  ProxyRole reverse
  ProxyReverseConnectPolicy PerUser

    # We need to provide a pool of backend servers as a fallback
  ProxyReverseServers ftp://192.168.83.128:2121 ftp://192.168.83.129:2121 ftp://192.168.83.131:2121 ftp://192.168.83.132:2121

    # Look up per-user backend servers from user-specific JSON files
  ProxyReverseServers file:/var/ftp/proxy/backends/%U.json
</IfModule>

10.配置json文件
因为我们的反向代理策略是基于用户的,所以每台设备的用户名要不一致
在json文件的指定目录下创建以用户名为名字的json文件
例如:
vim /var/ftp/proxy/backends/test128.json
["ftp://192.168.83.128:2121"]

11.后端服务器配置

安装步骤同上

因为我这个是做测试用的,所以只修改了以下这些地方。具体的参数自己去关网上面查看http://www.proftpd.org/

<Anonymous ~test128>
  User                          test128
  Group                         test128

  # We want clients to be able to login with "anonymous" as well as "ftp"
  UserAlias                     anonymous ftp

  # Limit the maximum number of anonymous logins
  MaxClients                    10

  # We want 'welcome.msg' displayed at login, and '.message' displayed
  # in each newly chdired directory.
  DisplayLogin                  welcome.msg
  DisplayChdir                  .message

  # Limit WRITE everywhere in the anonymous chroot
  <Limit WRITE>
    AllowAll
  </Limit>

转载于:https://www.cnblogs.com/zxy860320/p/9815616.html

 类似资料: