Linux的IPTables /路由问题

编辑1/3/10 22:00格林尼治标准时间 – 重写了一些后,进一步调查

我看了IPtables已经有一段时间了,我似乎比以前更糟,因为我似乎无法让我的networking服务器在线。 以下是我在运行访问networking的DHCP服务器的网关服务器上的防火墙规则。 networking服务器位于我的networking中的静态IP(192.168.0.98,默认端口)。

当我使用Nmap或GRC.com时,我看到端口80在网关服务器上是打开的,但是当我浏览到它时(通过公共URL http://www.houseofhawkins.com ),它总是失败并且出现连接错误。 nmap无法连接并找出Web服务器是什么)。

我可以映射networking服务器,并通过我的networking内的相同的IP浏览到它。 我相信这是我的IPTable规则,不让它通过。

在内部,我可以路由所有的请求。 每台机器都可以浏览到该网站,交通运作良好。 我可以MSTSC / ssh内部所有的networking服务器,他们可以连接到networking。

IPTABLE:

**编辑 – 增加了新的防火墙规则2/3/10 **

#!/bin/sh iptables="/sbin/iptables" modprobe="/sbin/modprobe" depmod="/sbin/depmod" EXTIF="eth2" INTIF="eth1" load () { $depmod -a $modprobe ip_tables $modprobe ip_conntrack $modprobe ip_conntrack_ftp $modprobe ip_conntrack_irc $modprobe iptable_nat $modprobe ip_nat_ftp echo "enable forwarding.." echo "1" > /proc/sys/net/ipv4/ip_forward echo "enable dynamic addr" echo "1" > /proc/sys/net/ipv4/ip_dynaddr # start firewall # default policies $iptables -P INPUT DROP $iptables -F INPUT $iptables -P OUTPUT DROP $iptables -F OUTPUT $iptables -P FORWARD DROP $iptables -F FORWARD $iptables -t nat -F #echo " Opening loopback interface for socket based services." $iptables -A INPUT -i lo -j ACCEPT $iptables -A OUTPUT -o lo -j ACCEPT #echo " Allow all connections OUT and only existing and related ones IN" $iptables -A INPUT -i $INTIF -j ACCEPT $iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $iptables -A OUTPUT -o $EXTIF -j ACCEPT $iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT $iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT $iptables -A FORWARD -j LOG --log-level 7 --log-prefix "Dropped by firewall: " $iptables -A INPUT -j LOG --log-level 7 --log-prefix "Dropped by firewall: " $iptables -A OUTPUT -j LOG --log-level 7 --log-prefix "Dropped by firewall: " #echo " Enabling SNAT (MASQUERADE) functionality on $EXTIF" $iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE $iptables -A INPUT -i $INTIF -j ACCEPT $iptables -A OUTPUT -o $INTIF -j ACCEPT #echo " Allowing packets with ICMP data (ie ping)." $iptables -A INPUT -p icmp -j ACCEPT $iptables -A OUTPUT -p icmp -j ACCEPT $iptables -A INPUT -p udp -i $INTIF --dport 67 -m state --state NEW -j ACCEPT #echo " Port 137 is for NetBIOS." $iptables -A INPUT -i $INTIF -p udp --dport 137 -j ACCEPT $iptables -A OUTPUT -o $INTIF -p udp --dport 137 -j ACCEPT #echo " Opening port 53 for DNS queries." $iptables -A INPUT -p udp -i $EXTIF --sport 53 -j ACCEPT #echo " opening Apache webserver" $iptables -A PREROUTING -t nat -i $EXTIF -p tcp --dport 80 -j DNAT --to 192.168.0.96:80 $iptables -A FORWARD -p tcp -m state --state NEW -d 192.168.0.96 --dport 80 -j ACCEPT } flush () { echo "flushing rules..." $iptables -P FORWARD ACCEPT $iptables -F INPUT $iptables -P INPUT ACCEPT echo "rules flushed" } case "$1" in start|restart) flush load ;; stop) flush ;; *) echo "usage: start|stop|restart." ;; esac exit 0 

路线信息:

 Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 5e0412a6.bb.sky * 255.255.255.255 UH 0 0 0 eth2 192.168.0.0 * 255.255.255.0 U 0 0 0 eth1 default 5e0412a6.bb.sky 0.0.0.0 UG 100 0 0 eth2 

使用ifconfig:

 eth1 Link encap:Ethernet HWaddr 00:22:b0:cf:4a:1c inet addr:192.168.0.1 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::222:b0ff:fecf:4a1c/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:79023 errors:0 dropped:0 overruns:0 frame:0 TX packets:57786 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:11580918 (11.5 MB) TX bytes:22872030 (22.8 MB) Interrupt:17 Base address:0x2b00 eth2 Link encap:Ethernet HWaddr 00:0c:f1:7c:45:5b inet addr:94.4.18.166 Bcast:94.4.18.166 Mask:255.255.255.255 inet6 addr: fe80::20c:f1ff:fe7c:455b/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:57038 errors:0 dropped:0 overruns:0 frame:0 TX packets:34532 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:21631721 (21.6 MB) TX bytes:7685444 (7.6 MB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:16 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1517 (1.5 KB) TX bytes:1517 (1.5 KB) 

编辑

好,所以我会尽量扩大我的基础设施:

我以前曾经使用Sky宽带调制解调器路由器进行设置,并使用它的networking接口将networking端口转发到networking服务器。 networking看起来像这样:

布局图形

我现在已经用dlink调制解调器取代了天空调制解调器,该调制解调器将IP提供给现在执行DHCP的网关服务器。 看起来像:

布局图形

互联网连接是带有dynamicIP的标准宽带连接(使用zoneedit.com保持更新)。

我已经在每个Web服务器(一个Ubuntu Apache服务器和一个WS2008 IIS7)上尝试过。

我认为,我的IPTable规则也必须有一个问题,因为它可以路由到我的win7框,它具有默认的IIS7页面,并且当我将所有端口80转发给它时不会显示。

我会非常感谢任何帮助。

谢谢

乔恩

请详细描述您的所有服务器物理连接,包括以太网电缆路由和任何交换机configuration。

通过网关使用networking地址转换可能会遇到问题,因为它以菊花链forms链接到路由器。 什么样的路由器? 什么样的互联网连接? 你能直接把你的网关连接到互联网吗? 它应该是主路由器。

无论如何,我们应该能够隔离与网关和Web服务器的通信问题的原因。

您的Web服务器上是否有防火墙规则? 请确认并确定。

你的Web服务器上的路由表和接口列表是什么样的?

启用日志logging以便于debugging:

 $iptables -A INPUT -j LOG --log-level 7 --log-prefix "Dropped by firewall: " $iptables -A OUTPUT -j LOG -log-level 7 --log-prefix "Dropped by firewall: " 

编辑1

感谢您的更新和图表。 好东西。 我不确定我是否理解IIS和Apache服务器之间的性能差异。 都可以通过端口80上的网关联系?

你有没有添加日志logging? 这将有所帮助。

今晚晚些时候我会再详细的回顾一下。

编辑2

哦,这听起来像DNAT不起作用。 以前,它看起来像你在你的网关和你的Web服务器之间进行内部通信时遇到了麻烦。

尝试更换:

$iptables -A PREROUTING -t nat -i $EXTIF -p tcp --dport 80 -j DNAT --to 192.168.0.98:80 $iptables -A FORWARD -p tcp -m state --state NEW -d 192.168.0.98 --dport 80 -j ACCEPT

附:

$iptables -A PREROUTING -t nat -p tcp -d 94.4.18.166 --dport 80 -j DNAT --to-destination 192.168.0.98:80

编辑3

编写脚本。 例如:

 EXTIP=`/sbin/ifconfig $EXTINT | grep 'inet addr' |awk '{print $2}' | sed 's/addr://g'` $iptables -A PREROUTING -t nat -p tcp -d $EXTIP --dport 80 -j DNAT --to-destination 192.168.0.98:80` 

任何额外的逻辑可以基于任何期望的性能来添加。