我想将网关(内部 IP:192.168.4.4)上的访问从外部端口 1965 转发到局域网内的 FTP 服务器(192.168.4.2)
换句话说,有人通过 FTP 访问我的网关:1965将被重定向至192.168.4.2:21
我以前使用较旧的 Linux 内核做过这个,并且成功了。
似乎自 4.9 内核以来,情况发生了变化,我无法更新我的 iptables 脚本。
IP 转发和nf 连接跟踪已启用:
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
我的 iptables 配置(由 iptables-save 生成,带有计数器)
我主要改变了生的在 4.1 内核中,伪装 FTP 并不需要这些。
我明白了,现在你必须使用 CT 助手。
为了便于阅读,我删除了所有日志规则以及与 ftp 无关的规则(samba、ssh、...)
生的
预路由
[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
纳特
预路由
[20:1128] -A PREROUTING -i wan -p tcp -m tcp --dport 1965 -j DNAT --to-destination 192.168.4.2:21
路由后
[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
筛选
输入
[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
向前
[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
感谢您的阅读。