我使用这个 iptables 配置它只是将 2121 的连接重定向到端口 21(用于以用户而不是 root 身份运行 ftp)
*nat
:PREROUTING ACCEPT [200:39210]
:INPUT ACCEPT [6:360]
:OUTPUT ACCEPT [21:1323]
:POSTROUTING ACCEPT [21:1323]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 2121 -j DNAT --to-destination 192.168.0.2:21
COMMIT
# Completed on Sun Jan 24 19:17:55 2016
# Generated by iptables-save v1.4.20 on Sun Jan 24 19:17:55 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [2996:188699]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2121 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -d 192.168.0.2/32 -i eth0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Sun Jan 24 19:17:55 2016
已启用 ip4 转发 此配置在两个虚拟机上运行良好:一个 slackware,一个 centos6 但我的装有 slackware 的主机不行。我可以检查什么?我忘了:服务器 ftp 在 chroot 上
答案1
终于找到了解决方案。ftp 在 chroot 上,并且是纯 ftpd,此行
Bind 10.2.2.1,2121
不要在 chroot 上工作,而是在 chroot 之外工作
这行
Bind *,2121
在 chroot 中完美运行
我使用这个防火墙脚本
iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 2121 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 2121 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -m tcp -p tcp --dport 21 -j REDIRECT --to-port 2121
iptables -t nat -A OUTPUT -s 192.168.0.0/24 -m tcp -p tcp -o lo --dport 21 -j REDIRECT --to-port 2121