Linux slackware,我已经将 ftp 服务器与非特权用户一起运行端口 2121。想要将所有数据包从 21 重定向到 2121,以便我的 ftp 可以作为标准使用,而无需指定端口。
telnet host 2121 OK
telnet host 21 NO!
ncftp host NO!
我用这个简单的规则
iptables -A PREROUTING -p tcp --dport 21 -j REDIRECT --to-port 2121
并 modprobe 这些模块
modprobe nf_conntrack_ftp
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
接口为 br0,并且 ip_forward 已启用
为啥不起作用?
答案1
找到解决方案我使用这些规则
#!/bin/sh
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -X
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 2121 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp --dport 21 -j REDIRECT --to-ports 2121
iptables -t nat -I OUTPUT -p tcp -o lo --dport 21 -j REDIRECT --to-ports 2121
并且运行完美。
另一个防火墙配置可以是这样的
*nat
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i br0 -p tcp --dport 2121 -j DNAT --to-destination 192.168.0.2:21
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2121 -j ACCEPT
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -i br0 -m state --state NEW -m tcp -p tcp -d 192.168.0.2 --dport 21 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT