我想路由网页浏览通过wlan0接口和其余通过eth1你能帮我一下吗iptables命令来实现这一点。以下是我的配置。谢谢 :)
编辑:这是关于桌面配置而不是 Web 服务器设置。基本上,我想使用其中一个连接浏览 Web,另一个连接用于其他所有操作。
ifconfig:
eth1 Link encap:Ethernet HWaddr 00:1d:09:59:80:70
inet addr:192.168.2.164 Bcast:192.168.2.255 Mask:255.255.255.0
inet6 addr: fe80::21d:9ff:fe59:8070/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:33 errors:0 dropped:0 overruns:0 frame:0
TX packets:41 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4771 (4.7 KB) TX bytes:7081 (7.0 KB)
Interrupt:17
wlan0 Link encap:Ethernet HWaddr 00:1c:bf:90:8a:6d
inet addr:192.168.1.70 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::21c:bfff:fe90:8a6d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:77 errors:0 dropped:0 overruns:0 frame:0
TX packets:102 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14256 (14.2 KB) TX bytes:14764 (14.7 KB)
路线:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.2.0 * 255.255.255.0 U 1 0 0 eth1
192.168.1.0 * 255.255.255.0 U 2 0 0 wlan0
link-local * 255.255.0.0 U 1000 0 0 wlan0
default adsl 0.0.0.0 UG 0 0 0 eth1
答案1
您无法使用 iptables 控制 Web 流量与其他类型的流量。为什么不能?确定哪些是或不是“Web”流量的唯一方法是使用哪个端口。我认为,Web 流量主要使用端口 80(用于 http)和 443(用于 https)。
要将网络流量路由到特定接口,您需要在高层执行以下操作。
您必须设置域名服务器 (DNS),以便域名指向您的路由器 IP 地址,然后设置您的路由器将端口 80 转发到 wlan0 地址即 192.168.1.70。
您还可以将您的 Web 服务器配置为仅专门监听 wlan0 接口,尽管在您正确地将所有 Web 端口路由到 wlan0 之后,这可能就没有必要了。
(我假设您必须有一个路由器,因为您提供的 IP 地址以 192.168 开头。因此,它们是本地网络地址,不能在 DNS 服务器中使用或通过 Web 访问。这意味着您必须有一个互联网可见的路由器,然后将端口转发到您想要的位置。)
此外,您说您希望“所有其他流量”都转到 eth1。其他流量是什么?如果您指的是电子邮件,那么您可以设置端口转发,让这些端口指向 eth1 接口。
事实上,您可能可以配置端口转发以将“所有其他端口”发送到 eth1。但是,这被认为非常不安全,可能会让黑客有机会进入您的服务器。一般做法是仅对您想要允许进入服务器的选定流量进行端口转发。
答案2
可以编写与端口号匹配的 iptables 规则,但我不建议这样做,因为 iptables 规则很容易出错。Tkane 可能指的是从其 LAN 发出的网页传出请求,而不是对面向公众的 Web 服务器的传入访问 - 在这种情况下,代理服务器可能是答案。根据我的经验,Squid 是用于此目的的绝佳软件包,也可用于执行可接受的使用政策。如果您选择这种方式,请不要忘记实施 Web 代理自动检测。另一方面,如果这是为了向互联网上的外部用户提供服务,那么在我看来,创建 DMZ 将是正确的方法。您可能仍想在 Web 服务器本身上编写一些简单的 iptables 规则,以丢弃除发往端口 80 和 443 之外的流量,但使用基于 Web 的管理界面在现成的路由器或防火墙上阻止不需要的流量可能更简单。
答案3
一些 iptables 规则如下:
-A MY_OUTPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A MY_OUTPUT -p tcp -m tcp --dport 443 -j ACCEPT
将阻止除网页浏览请求之外的任何内容离开您的 Linux 服务器,但正如已经指出的那样,您确实需要知道如何驱动 iptables,否则您可能会犯错误。
无论如何,Web 浏览请求大概来自 LAN 上的客户端 PC?也许您正在使用 Linux 服务器作为路由器/网关,否则它将如何拦截来自客户端 PC 的流量?如果是这样,我真的建议使用现成的路由器;例如,对于小型网络,标准 Netgear 设备将提供一个简单的基于 Web 的管理界面,您可以通过该界面实施防火墙规则,而暴露在互联网上而没有良好 iptables 专业知识的 Linux 服务器确实会自找麻烦。
答案4
你需要使用策略路由和防火墙标记为了实现这一点,因为您想要基于源 IP 地址和目标 IP 地址以外的其他内容进行路由。
首先,您需要设置一个单独的路由表,它将数据包从 wlan0 发送出去。
echo 1 wlan0 >> /etc/iproute2/rt_tables
ip route add 192.168.1.0/24 dev wlan0 table wlan0
ip route add default via 192.168.1.1 table wlan0
(第一个命令只需要运行一次。)
然后我们告诉路由引擎对标记为“1”的数据包使用这个新表。
ip rule add fwmark 1 lookup wlan0
最后,我们使用 iptables 来标记我们感兴趣的数据包。
iptables --table mangle --append PREROUTING --protocol tcp --dport http --jump MARK --set-mark 1
iptables --table mangle --append PREROUTING --protocol tcp --dport https --jump MARK --set-mark 1