Iptables

Linux IPTables / 路由問題

  • March 8, 2010

編輯 1/3/10 22:00 GMT - 在進一步調查後重寫了一些

自從我查看 IPtables 以來已經有一段時間了,我似乎比以前更糟,因為我似乎無法讓我的網路伺服器線上。下面是我在執行 dhcp 伺服器訪問網路的網關伺服器上的防火牆規則。網路伺服器位於我的網路中,使用靜態 IP(192.168.0.98,預設埠)。

當我使用 Nmap 或 GRC.com 時,我看到網關伺服器上的埠 80 是打開的,但是當我瀏覽到它時,(通過公共 URL。http ://www.houseofhawkins.com)它總是失敗並出現連接錯誤,( nmap 也無法連接並找出 Web 伺服器是什麼)。

我可以通過網路中的相同 IP 映射網路伺服器並瀏覽到它。我相信是我的 IPTable 規則沒有讓它通過。

在內部,我可以路由我的所有請求。每台機器都可以瀏覽網站,流量也很好。我可以在內部通過 MSTSC / ssh 連接到所有網路伺服器,它們反過來可以連接到網路。

平板電腦:

**編輯 - 添加了新的防火牆規則 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

如果配置:

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)

編輯

好的,根據要求,我將嘗試擴展我的基礎架構:

我之前使用執行 DHCP 的 Sky 寬頻調製解調器路由器設置它,並使用它的 Web 界面將 Web 埠轉發到 Web 伺服器。網路看起來像這樣:

佈局圖形

我現在已經用 dlink 調製解調器替換了天空調製解調器,它將 IP 提供給現在執行 DHCP 的網關伺服器。看起來像:

佈局圖形

網際網路連接是具有動態 IP 的標準寬頻連接(使用 zoneedit.com 保持更新)。

我在每台網路伺服器(一台 Ubuntu Apache 伺服器和一台 WS2008 IIS7)上都試過了。

我認為我的 IPTable 規則也一定有問題,因為它可以路由到我的 win7 框,該框具有預設的 IIS7 頁面,並且當我將所有埠 80 轉發給它時不會顯示。

對於這方面的任何幫助,我將不勝感激。

謝謝

喬恩

請詳細描述所有伺服器的物理連接方式,包括乙太網電纜路由和任何交換機配置。

您可能在通過網關使用網路地址轉換時遇到問題,因為它以菊花鏈方式連接到路由器。什麼樣的路由器?什麼樣的網際網路連接?您可以將網關直接連接到 Internet 嗎?它應該是主路由器。

無論如何,我們應該能夠隔離與您的網關和 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`

可以根據任何所需的性能添加任何額外的邏輯。

引用自:https://serverfault.com/questions/117704