我想我只需要对一些 iptables 规则进行健全性检查。(剧透警告这并不好。)
基本问题。我们有一个 Squid 代理服务器,它正在干扰各种互联网资源。我在远程,想更新代理服务器上的 IPTable 规则,以便流量永远不会真正到达代理服务。这是一个临时修复,我正在将网络迁移到实际的网络硬件。
因此目标是将所有非 SSH 流量从本地网络(enp5s0 10.90.30.1/16)路由到具有接口(enp4s0 192.168.165.1/24)的“路由器”(192.168.165.1/24)
iptables -t nat -A PREROUTING -p tcp --dport 22 -d 10.90.30.1 -j INPUT
iptables -t nat -A PREROUTING -p tcp --dport 80 -d 10.90.30.1 -j INPUT
iptables -t nat -A PREROUTING -i enp5s0 -d 10.90.30.1 -j DNAT --to 192.168.165.1
iptables -t nat -A PREROUTING -i enp4s0 -d 192.168.165.151 -j DNAT --to 10.90.30.1
iptables -A INPUT -tcp --dport 22 -d 10.90.30.1 -j ACCEPT
iptables -A Foward -i enp5s0 -d 10.90.30.1 --dport 22 accept
iptables -t nat -A POSTROUTING -o enp4s0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp5s0 -j MASQUERADE
我非常感谢大家的帮助。我认为自己对 Iptables 的了解足以设置基本的防火墙。但是高级路由是我从未做过的事情。
多少 NAT 才算太多 NAT?这么多 NAT。
答案1
因此,透明代理之所以有效,是因为上层协议包含有关连接位置的信息。在 HTTP 中,它是标Host
头;在 TLS 中,它是 SNI 标头。
但是,当您在第 3 层(路由器运行的地方)重定向数据包时,接收重写数据包的路由器不知道如何处理它。目的地被列为路由器的 IP,路由器可能没有在目标端口上监听。如果它恰好在监听,它会将数据包传递给正在监听的任何软件,而不是转发它。
因此,您尝试实现的目标可能无法实现,因为路由器不知道如何处理流量。
答案2
您可能可以使用 iptables 标记数据包,然后为这些标记的数据包设置特定的路由表。下面是其工作原理的一个示例:
# IPv4 address of proxy
PROXYIP4=192.168.1.45
# IPv6 address of proxy
PROXYIP6=fd48:2b50:6a95:a6db::73:7175:6964
# interface facing clients & clients to be squidified
CLIENTIFACE=br-lan
CLIENTIP=smart-tv.lan
# arbitrary mark used to route packets by the firewall. May be anything from 1 to 64.
FWMARK=8
# chain (should be OUTPUT on client and PREROUTING on router)
CHAIN=PREROUTING
# routing table id
TABLEID=252
# permit Squid box out to the Internet
#iptables -t mangle -A $CHAIN -p tcp --dport 80 -s $PROXYIP4 -j ACCEPT
#ip6tables -t mangle -A $CHAIN -p tcp --dport 80 -s $PROXYIP6 -j ACCEPT
# mark everything else on port 80 to be routed to the Squid box
iptables -t mangle -A $CHAIN -p tcp -s $CLIENTIP -m multiport --dports 80,443 -j MARK --set-mark $FWMARK
ip6tables -t mangle -A $CHAIN -p tcp -s $CLIENTIP -m multiport --dports 80,443 -j MARK --set-mark $FWMARK
# NP: Ensure that traffic from inside the network is allowed to loop back inside again.
iptables -t filter -A FORWARD -i $CLIENTIFACE -o $CLIENTIFACE -p tcp --dport 80 -j ACCEPT
ip6tables -t filter -A FORWARD -i $CLIENTIFACE -o $CLIENTIFACE -p tcp --dport 80 -j ACCEPT
ip rule add fwmark $FWMARK table $TABLEID
ip route add default via $PROXYIP4 table $TABLEID
ip -6 rule add fwmark $FWMARK table $TABLEID
ip -6 route add default via $PROXYIP6 table $TABLEID
如果不进行修改,它不适用于您,因为它实际上起到了相反的作用——将流量重定向到 Squid 代理。(可能我也从一些教程中了解到了这一点。)我的观点是证明您可以为标记的包应用不同的路由表,我认为这也是您需要做的。