我们有一个Java进程,其中包含一个embedded式FTP服务器,我想在RHEL5机器上运行。 我不想以root身份运行进程,我不希望客户端在build立连接时必须指定端口。 看来我应该能够configurationvsftpd监听另一个端口(例如20000),然后configurationipchains将端口21上的所有stream量转发到20000.我想具体我需要:
ip_conntrack_ftp将端口21的stream量转发到20000 所以我最初的问题是这似乎是一个合理的方法?
为了完成第一步,我修改了我的vsftpd.conf文件,使其具有以下行:
listen_port=20000
然后,我可以重新启动vsftpd,并通过执行以下操作validation它是否正在侦听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):
我继续login没有问题。 第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:
iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 21 -j REDIRECT --to-port 20000
你需要使用passive-ftp。