Linux IPTables/路由问题

Linux IPTables/路由问题

编辑于 2010 年 1 月 3 日 22:00 GMT - 经过进一步调查后重写了部分内容

我已经很久没看过 IPtables 了,现在似乎比以前更糟糕了,因为我似乎无法让我的 Web 服务器上线。下面是我在网关服务器上的防火墙规则,该服务器运行访问网络的 dhcp 服务器。Web 服务器位于我的网络内的静态 IP(192.168.0.98,默认端口)。

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

我可以通过 nmap 来访问网络服务器,并且可以通过网络内的相同 IP 顺利浏览。我相信是我的 IPTable 规则不让它通过。

在内部,我可以路由所有请求。每台机器都可以浏览网站,流量运行正常。我可以在内部通过 MSTSC / ssh 连接到所有 Web 服务器,然后它们就可以连接到 Web。

IP表:

**编辑 - 添加了新的防火墙规则 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 (i.e. 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 宽带调制解调器路由器进行设置,该路由器具有 DHCP 功能,我使用它的 Web 界面将 Web 端口转发到 Web 服务器。网络看起来是这样的:

布局图

我现在已将 Sky 调制解调器替换为 Dlink 调制解调器,该调制解调器将 IP 提供给现在执行 DHCP 的网关服务器。它看起来像:

布局图

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

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

我认为我的 IPTable 规则也一定存在问题,因为它可以路由到具有默认 IIS7 页面的 win7 机器,而当我将所有端口 80 转发给它时该页面不会显示。

我将非常感激任何能帮助我的人们。

谢谢

乔恩

答案1

请详细描述所有服务器的物理连接方式,包括以太网电缆布线和任何交换机配置。

您可能无法通过网关使用网络地址转换,因为它以菊花链方式连接到路由器。什么样的路由器?什么样的互联网连接?您可以将网关直接连接到互联网吗?它应该是主路由器。

无论如何,我们应该能够找出网关和 Web 服务器之间通信问题的原因。

您的 Web 服务器上是否有任何防火墙规则?请验证并确保无误。

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

启用日志记录以便于调试:

$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 上的网关联系吗?

您添加了日志记录语句吗?那会有帮助的。

我将在今晚晚些时候再次详细回顾所有内容。

编辑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`

可以根据所需的性能添加任何额外的逻辑。

相关内容