我想从我的网关(内部IP:192.168.4.4)从外部端口1965访问我的局域网内的FTP服务器(192.168.4.2)
所以换句话说,有人用FTP访问我的网关:1965将被redirect到192.168.4.2:21
我在过去使用较老的linux内核做了这个,并且工作。
看来,从4.9内核,事情已经改变,我不能设法更新我的iptables脚本。
ip转发和nf conntracking被启用:
net.ipv4.ip_forward = 1 net.netfilter.nf_conntrack_helper = 1
并加载需要的模块:
nf_nat_ftp 16384 0 nf_conntrack_ftp 20480 3 nf_nat_ftp nf_nat 24576 5 xt_nat,nf_nat_redirect,nf_nat_ftp,nf_nat_masquerade_ipv4,nf_nat_ipv4 nf_conntrack 94208 9 nf_conntrack_ftp,nf_conntrack_ipv4,xt_helper,nf_nat_ftp,xt_CT,nf_nat_masquerade_ipv4,xt_conntrack,nf_nat_ipv4,nf_nat iptable_raw 16384 1 iptable_nat 16384 1 nf_nat_ipv4 16384 1 iptable_nat iptable_filter 16384 1 ip_tables 28672 3 iptable_filter,iptable_raw,iptable_nat
我已经做了大部分的改变,在4.1内核中不需要伪装FTP。
我明白,现在你必须使用CT助手。
为了可读性,我已经削减了所有的日志logging规则,以及所有与ftp(samba,ssh,…)无关的规则。
生的
PREROUTING [21:1052] -A PREROUTING -p tcp -m tcp --dport 21 -j CT --helper ftp [20:1128] -A PREROUTING -p tcp -m tcp --dport 1965 -j CT --helper ftp
NAT
PREROUTING [20:1128] -A PREROUTING -i wan -p tcp -m tcp --dport 1965 -j DNAT --to-destination 192.168.4.2:21
POSTROUTING [0:0] -A POSTROUTING -s 192.168.0.0/16 -o wan -j MASQUERADE [22:1248] -A POSTROUTING -d 192.168.4.2/32 -j SNAT --to-source 192.168.4.4
过滤
INPUT [564393:501714526] -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT [0:0] -A INPUT -m helper --helper ftp -j ACCEPT [0:0] -A INPUT -p tcp -m tcp --dport 1965 -j ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
FORWARD [0:0] -A FORWARD -p tcp -m tcp --sport 20 --dport 1965 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT [20:1128] -A FORWARD -d 192.168.4.2/32 -i wan -p tcp -m tcp --dport 21 -j ACCEPT [0:0] -A FORWARD -p tcp -m tcp --dport 21 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT [0:0] -A FORWARD -p tcp -m tcp --sport 20 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
感谢您的阅读。