我们有一个 Java 进程,其中包含一个我想在 RHEL5 机器上运行的嵌入式 FTP 服务器。我不想以 root 身份运行该进程,也不希望客户端在建立连接时必须指定端口。似乎我应该能够将 vsftpd 配置为侦听备用端口(例如 20000),然后配置 ipchains 将端口 21 上的所有流量转发到 20000。我认为我特别需要:
- 配置 vsftpd 监听 20000 端口
- 配置
ip_conntrack_ftp
将流量从端口 21 转发到 20000
所以我最初的问题是这看起来是一种合理的方法吗?
为了完成第 1 步,我修改了我的 vsftpd.conf 以具有以下行:
listen_port=20000
然后我可以重新启动 vsftpd 并通过执行以下操作来验证它是否正在侦听 20000:
> ftp tstweb1 20000
Connected to tstweb1.pulseenergy.com.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (tstweb1:cclark):
我继续登录没有问题。步骤 1 完成。
至于第 2 步,我没有看到加载的模块:
> /sbin/lsmod | grep ftp
>
所以我尝试用正确的端口转发信息加载它:
> /sbin/modprobe ip_conntrack_ftp ports=21,20000
我验证它已经加载:
> /sbin/lsmod | grep ftp
ip_conntrack_ftp 41489 0
ip_conntrack 91109 3 ip_conntrack_ftp,iptable_nat,ip_nat
但是当我尝试使用它时,连接被拒绝:
> ftp tstweb1
ftp: connect: Connection refused
我知道 FTP 是一个复杂的协议,具有主动和被动模式以及多个端口上的通信,但我的印象是该ip_conntrack_ftp
模块会为我隐藏很多内容。我还需要编写一些特定的 iptables 规则吗?
我认为您正在寻找的是 REDIRECT:
你需要使用passive-ftp。