作者 主題: ping包经过iptables表链出现问题  (閱讀 3599 次)

0 會員 與 1 訪客 正在閱讀本文。

stone_long

  • 懷疑的國中生
  • **
  • 文章數: 37
    • 檢視個人資料
ping包经过iptables表链出现问题
« 於: 2006-07-11 14:14 »
各位前辈:
    最近在读Oskar Andreasson先生的《Iptables Tutorial 1.2.0》,觉得获益颇多。在读 "14.6. rc.test-iptables.txt" 这部分时我想实际测试一下,就将这个脚本download下来并在一台linux(redhat9.0,Kernel 2.4.20-8 on an i686)机器(其名字为 Lab01)执行之,然后我在另一台linux机器(其名字为Firewall,与Lab01在同一个局域网内)上执行命令 "ping -c 1 Lab01"。接下来我在 Lab01上仔细查看文件 /var/log/messages,根据"6. Traversing of tables and chains"部分所讲,我期待在/var/log/messages中看到由上述ping命令产生的icmp包按照下面的次序穿过iptables:
mangle(PREROUTING)->nat(PREROUTING)->mangle(INPUT)->filter(INPUT) (icmp-type 为"echo request"的数据包),
mangle(OUTPUT)->nat(OUTPUT)->filter(OUTPUT)->mangle(POSTROUTING)->nat(POSTROUTING) (icmp-type为 "echo reply"的数据包)。
    但是事实上我在/var/log/messages中看到上述ping命令产生的icmp包是按照下面的次序穿过iptables的:
mangle(PREROUTING)->nat(PREROUTING)->mangle(INPUT)->filter(INPUT) (icmp-type 为"echo request"的数据包),
mangle(OUTPUT)->filter(OUTPUT)->mangle(POSTROUTING) (根本没有经过nat(OUTPUT)&nat(POSTROUTING)两个链。) (icmp-type为 "echo reply"的数据包).  
      这应该如何解释?

      后来我又做了另外一个测试;在这个测试中Lab01作为一个路由器工作,测试网络拓扑图如下:
               PC----Lab01----Firewall。
      在Firewll上执行命令"ping -c 1 PC"后我仔细查看 Lab01的/var/log/messages文件,同样,根据"6. Traversing of tables and chains"部分所讲,我期待在/var/log/messages中看到由上述ping命令产生的icmp包按照下面的次序穿过iptables:
mangle(PREROUTING)->nat(PREROUTING)->mangle(FORWARD)->filter(FORWARD)->mangle(POSTROUTING)->nat(POSTROUTING) (icmp-type 为"echo request"的数据包),
mangle(PREROUTING)->nat(PREROUTING)->mangle(FORWARD)->filter(FORWARD)->mangle(POSTROUTING)->nat(POSTROUTING) (icmp-type为 "echo reply"的数据包).
      但是事实上我在/var/log/messages中看到上述ping命令产生的icmp包是按照下面的次序穿过iptables的:
mangle(PREROUTING)->nat(PREROUTING)->mangle(FORWARD)->filter(FORWARD)->mangle(POSTROUTING)->nat(POSTROUTING) (icmp-type 为"echo request"的数据包),
mangle(PREROUTING)->mangle(FORWARD)->filter(FORWARD)->mangle(POSTROUTING) (根本没有经过nat(PREROUTING)&nat(POSTROUTING)两个链。) (icmp-type为 "echo reply"的数据包).  
      这应该如何解释?

      我确信自己已经正确执行了脚本rc.test-iptables.txt,我确信自己在查看Lab01上的文件/var/log/messages时没有看错。

      期待各位前辈不吝赐教,谢谢。

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17472
    • 檢視個人資料
    • http://www.study-area.org
ping包经过iptables表链出现问题
« 回覆 #1 於: 2006-07-11 16:44 »
那, 你在你認為懷疑的 chain 裡面, 加個 DROP 來看看是否有效?
記得要將規則放在前面去.

如果還是沒影響, 那可能是被視回應連線了. 不過, 這部份我不很确定.

有時, 書本用的版本, 跟實際用的版本, 會有些許細微的差異.

stone_long

  • 懷疑的國中生
  • **
  • 文章數: 37
    • 檢視個人資料
ping包经过iptables表链出现问题
« 回覆 #2 於: 2006-07-12 10:25 »
非常感谢netman大哥的提醒。
    为着这个问题我给Oskar Andreasson先生(《Iptables Tutorial 1.2.0》的作者)发了一封邮件,将问题描述给他向他请教。今天早上我收到了Oskar Andreasson先生的回复,他这样解释:

“problem is that the return packet is considered ESTABLISHED by     conntrack since it has already seen the original packet, and hence it will not enter the NAT hooks in the kernel.”

      我还是不太理解,为什么一个处于ESTABLISHED状态的return packet不会经过内核中的NAT hooks呢?