编辑于 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`
可以根据所需的性能添加任何额外的逻辑。