首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用 ProFTPD + mod_proxy 搭建 FTP/S 代理服务器

使用 ProFTPD + mod_proxy 搭建 FTP/S 代理服务器

作者头像
YaoQi
发布2025-07-14 19:17:49
发布2025-07-14 19:17:49
12600
代码可运行
举报
运行总次数:0
代码可运行

本篇文章介绍下 ProFTPD 配合 mod_proxy 模块部署 FTP/S 应用层代理服务器,实现正向代理和反向代理。

介绍

可以达到的目的:

  • 为不支持FTPS的FTP服务器添加ProFTPD的FTPS支持(通过mod_tls)
  • 为不支持FTPS的FTP客户端添加ProFTPD的FTPS支持
  • 为不支持IPv6的FTP客户端/服务器添加ProFTPD对IPv6的支持
  • 为不提供这种通用日志记录的FTP服务器添加ProFTPD的日志记录功能(TransferLog、ExtendedLog等)
  • 对于没有此类功能的FTP服务器,使用ProFTPD的监控功能(例如mod_snmp)

也就是支持各种协议的组合代理: client --- FTPS ---> proxy --- FTP ---> server client --- FTP ---> proxy --- FTPS ---> server client --- FTPS ---> proxy --- FTPS ---> server client --- FTP ---> proxy --- FTP ---> server

当使用mod_proxy进行代理时,所有数据传输(例如文件上传/下载、目录列表等)都通过mod_proxy; 数据传输不会直接发生在“前端”客户端和“后端”服务器之间。这使得客户端完全不知道后端服务器的网络结构; 这在反向代理时尤为重要,这意味着客户端将mod_proxy视为真正的FTP服务器。

编译

在官网 http://www.proftpd.org/ 下载最新的软件包,解压:

代码语言:javascript
代码运行次数:0
运行
复制
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.9rc3.tar.gz
tar xzf proftpd-1.3.9rc3.tar.gz

在github下载mod_proxy模块:

代码语言:javascript
代码运行次数:0
运行
复制
cd proftpd-1.3.9rc3/contrib
wget https://github.com/Castaglia/proftpd-mod_proxy/archive/refs/tags/v0.9.4.tar.gz
tar zxf v0.9.4.tar.gz
mv proftpd-mod_proxy-0.9.4 mod_proxy
cd ..

配置:

代码语言:javascript
代码运行次数:0
运行
复制
./configure --enable-nls \
--enable-openssl \
--with-modules=mod_proxy:mod_tls

然后

代码语言:javascript
代码运行次数:0
运行
复制
make

配置文件

首先按前篇文章《使用 ProFTPD 搭建FTP/S 服务器》配置 FTP 或者 FTPS 服务器。 然后在配置中增加如下的代理配置,此时用户验证将会由被代理的服务器完成。 可以放到“主服务器配置” 或 <VirtualHost>, <Global>标签中。

正向代理 需要由客户端告诉代理服务器最终要访问谁

代码语言:javascript
代码运行次数:0
运行
复制
<IfModule mod_proxy.c>
    ProxyEngine on  # 启用代理功能
    ProxySourceAddress 1.2.3.4 # 配置连接后端服务器时使用的IP,用于多网卡多IP设备
    ProxyTables /var/ftp/proxy # 指定数据库文件的路径,用于负载均衡等
    ProxyLog /var/log/proftpd/proxy.log # 代理模块的日志文件

    ProxyRole forward      # 正向代理,客户端指定要代理谁
    ProxyForwardMethod user@host # 代理模式, user@host 代表客户端把代理后要访问的最终服务器用@追加到用户名后边

    <Class forward-proxy>
        # Allow clients from this class to use FTP forward proxying
        From 0.0.0.0/0  # 默认只代理私网客户端,在此配置可以代理公网IP客户端
        ProxyForwardEnabled on
    </Class>

    # 正则表达式,配置允许代理的服务器地址格式,限制代理的服务器域名,
    # [NC] 不是乱码,意为不区分大小写
    ProxyForwardTo ^storage\.proxy\.net\:21$ [NC]
</IfModule>

反向代理 代理服务器已经配好被代理的服务器,对客户端透明。

代码语言:javascript
代码运行次数:0
运行
复制
<IfModule mod_proxy.c>
    ProxyEngine on 
    ProxyTables /var/ftp/proxy
    ProxyLog /var/log/proftpd/proxy.log
    
    ProxyRole reverse  # 开启反向代理
    ProxyReverseConnectPolicy RoundRobin # 反向代理连接策略,详见文档
    ProxyReverseServers "ftps://storage.xxxx.yyy:21" "ftps://storage1.xxxx.yyy:21"
</IfModule>

参考:https://htmlpreview.github.io/?https://github.com/Castaglia/proftpd-mod_proxy/blob/master/mod_proxy.html

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-02-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漫跑的小兔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 编译
  • 配置文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档