linux – iptables将本地连接重定向到远程系统/端口

前端之家收集整理的这篇文章主要介绍了linux – iptables将本地连接重定向到远程系统/端口前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用SSH将 Windows机器本地端口3389转发到某个任意端口(在非特权区域)上的redhat服务器我已经在防火墙后面保护,然后将redhat服务器上的非特权端口转发到用户远程桌面上.基本上创建一个高度专门化的VPN,它只处理一项任务:使用我可以控制的加密隧道将用户带到防火墙后面的系统.

我知道几年前这可以使用命令:

iptables -A OUTPUT -t nat --dport ${LOCAL UNPRIV PORT} \
           -j DNAT ${ANOTHER SYSTEM}:${REMOTE PORT}

但是根据我的阅读,看起来该功能已被删除,我在/ var / log / messages中收到了消息

kernel: NAT: no longer support implicit source local NAT

我发现资源表明从内核2.6.X – 2.6.10,有一种方法可以在内核中使用IP_NF_NAT_LOCAL启用它,但显然在更新的内核中它已被删除.我已经尝试转发所有本地流量,因此它将进入PREROUTING链,并且取得了有限的成功,这只是一个坏主意,因为那时我必须打开服务器上的非特权端口,以便我可以将其反馈到eth0接口.我确信我有更多时间可以找到某种奇怪的kludge或解决方法,但我宁愿不要那么多地破解我的防火墙脚本.似乎必须有一个更简单的方法来做到这一点,我没有看到.社区可以提供的任何帮助或指导都会非常有帮助!提前致谢

解决方法

我不完全确定我是否理解,但我认为你只是在错误的链条中. :-)当我第一次使用iptables时,我也很困惑.但转发本地端口${LOCAL UNPRIV PORT}的方法如下:
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport ${LOCAL UNPRIV PORT} 
     -j DNAT --to ${ANOTHER SYSTEM}:${REMOTE PORT}

它是语义问题和netfilter工作方式的混合:在过去,转发本地端口涉及到转发的盒子的连接,以及到目的地的第二个连接. Iptables一步到位.因此,而不是两个连接 – 您将流量转发到该端口直接到达目的地. Netfilter执行所有健全性检查和簿记:只有属于有效连接的数据包才会被NAT,因此可以转发.

启用DNAT不允许转发任何数据包.您还必须添加规则:

$IPT -N INET-PRIV
$IPT -A FORWARD -i eth0 -o eth1 -j INET-PRIV
$IPT -A FORWARD -j DROP

$IPT -A INET-PRIV -p tcp -d ${ANOTHER SYSTEM} --dport ${REMOTE PORT} -j ACCEPT

$IPT -A INET-PRIV -j DROP

而且你必须启用转发.

echo "1" > /proc/sys/net/ipv4/ip_forward

Pro iptables:每个连接使用更安全,更灵活,更少的内存和cpu

Contra iptables:从内部机器转发连接到内部机器(将其反馈到eth0)对iptables没有意义(当然你总是可以直接连接),本地生成的转发流量不起作用(端口转发守护进程可能有所帮助 – 但通常没有意义)

确切地说,这可能是问题:您尝试在非路由器上使用NAT,因此您应该使用转发守护程序或完全跳过此额外端口转发并执行:

ssh -L 1234:${ANOTHER SYSTEM}:${REMOTE PORT} special-vpn-Box

在special-vpn-Box上,您只能使用iptables允许来自路由器和传出连接的传入连接到${ANOTHER SYSTEM}:${REMOTE PORT}.这样,special-vpn-Box用户只能访问${ANOTHER SYSTEM}:${REMOTE PORT},如果不受信任,将无法执行任何其他操作.

猜你在找的Linux相关文章