LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: lyjjr

看我简释iptables防火墙!

[复制链接]
发表于 2005-1-11 22:54:35 | 显示全部楼层
“我觉得INTERNET返回数据应该有一个pppo的PREROUTING的”,但我在记录中没有看到,比如:
192.168.0.4$ telnet www.mysql.com 80
Jan 8 14:15:18 Chowroc last message repeated 2 times
Jan 8 14:15:30 Chowroc kernel: PREROUTING_i_eth0: IN=eth0 OUT= MAC=00:50:fc:5e:01:b3:00:0c:29:43:33:c0:08:00 SRC=192.168.0.4 DST=213.115.162.82 LEN=60 TOS=0x10 PREC=0x00 TTL=64 ID=26127 DF PROTO=TCP SPT=1027 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jan 8 14:15:30 Chowroc kernel: FORWARD_i_eth0: IN=eth0 OUT=ppp0 SRC=192.168.0.4 DST=213.115.162.82 LEN=60 TOS=0x10 PREC=0x00 TTL=63 ID=26127 DF PROTO=TCP SPT=1027 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jan 8 14:15:30 Chowroc kernel: FORWARD_o_ppp0: IN=eth0 OUT=ppp0 SRC=192.168.0.4 DST=213.115.162.82 LEN=60 TOS=0x10 PREC=0x00 TTL=63 ID=26127 DF PROTO=TCP SPT=1027 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jan 8 14:15:30 Chowroc kernel: POSTROUTING_o_ppp0: IN= OUT=ppp0 SRC=192.168.0.4 DST=213.115.162.82 LEN=60 TOS=0x10 PREC=0x00 TTL=63 ID=26127 DF PROTO=TCP SPT=1027 DPT=80 WINDOW=5840 RES=0x00 SYN URGP=0
Jan 8 14:15:31 Chowroc kernel: FORWARD_o_eth0: IN=ppp0 OUT=eth0 SRC=213.115.162.82 DST=192.168.0.4 LEN=60 TOS=0x10 PREC=0x60 TTL=46 ID=0 DF PROTO=TCP SPT=80 DPT=1027 WINDOW=5752 RES=0x00 ACK SYN URGP=0
Jan 8 14:15:31 Chowroc kernel: FORWARD_i_ppp0: IN=ppp0 OUT=eth0 SRC=213.115.162.82 DST=192.168.0.4 LEN=60 TOS=0x10 PREC=0x60 TTL=46 ID=0 DF PROTO=TCP SPT=80 DPT=1027 WINDOW=5752 RES=0x00 ACK SYN URGP=0
Jan 8 14:15:31 Chowroc kernel: FORWARD_i_eth0: IN=eth0 OUT=ppp0 SRC=192.168.0.4 DST=213.115.162.82 LEN=52 TOS=0x10 PREC=0x00 TTL=63 ID=26128 DF PROTO=TCP SPT=1027 DPT=80 WINDOW=5840 RES=0x00 ACK URGP=0
Jan 8 14:15:31 Chowroc kernel: FORWARD_o_ppp0: IN=eth0 OUT=ppp0 SRC=192.168.0.4 DST=213.115.162.82 LEN=52 TOS=0x10 PREC=0x00 TTL=63 ID=26128 DF PROTO=TCP SPT=1027 DPT=80 WINDOW=5840 RES=0x00 ACK URGP=0
Jan 8 14:15:35 Chowroc kernel: FORWARD_o_eth0: IN=ppp0 OUT=eth0 SRC=213.115.162.82 DST=192.168.0.4 LEN=60 TOS=0x10 PREC=0x60 TTL=46 ID=0 DF PROTO=TCP SPT=80 DPT=1027 WINDOW=5752 RES=0x00 ACK SYN URGP=0
Jan 8 14:15:35 Chowroc kernel: FORWARD_i_ppp0: IN=ppp0 OUT=eth0 SRC=213.115.162.82 DST=192.168.0.4 LEN=60 TOS=0x10 PREC=0x60 TTL=46 ID=0 DF PROTO=TCP SPT=80 DPT=1027 WINDOW=5752 RES=0x00 ACK SYN URGP=0
Jan 8 14:15:35 Chowroc kernel: FORWARD_i_eth0: IN=eth0 OUT=ppp0 SRC=192.168.0.4 DST=213.115.162.82 LEN=64 TOS=0x10 PREC=0x00 TTL=63 ID=26129 DF PROTO=TCP SPT=1027 DPT=80 WINDOW=5840 RES=0x00 ACK URGP=0
Jan 8 14:15:35 Chowroc kernel: FORWARD_o_ppp0: IN=eth0 OUT=ppp0 SRC=192.168.0.4 DST=213.115.162.82 LEN=64 TOS=0x10 PREC=0x00 TTL=63 ID=26129 DF PROTO=TCP SPT=1027 DPT=80 WINDOW=5840 RES=0x00 ACK URGP=0

网关是192.168.0.11。

对于返回的数据,我觉得不能简单的用你说的替代方法吧。因为据我所知,使用ppp0时,ppp0 是2063端口,eth0 是1027端口(从上面的记录中也可以看到SPT、DPT=1027等),当目的端口是2063的数据包从 Internet 返回时,Linux(内核)知道要将该包重新传递到 eth0,并将其发送到原始客户机。

如果是两块网卡,那么 eth1 应该不会是象 ppp0 那样监听 2063 端口吧?

谢谢。
发表于 2005-2-2 16:10:00 | 显示全部楼层
多谢了
总算找到一编我能看懂的文章
好直观啊
多谢了
真的
我就是看这种不用想只要能看到就行了
回复 支持 反对

使用道具 举报

发表于 2005-2-2 20:01:22 | 显示全部楼层
局域网内原有一台www服务器,记为A,ip地址为192.168.0.3,在A上有几个网站,几个域名分别别解析到A,如bbs.XXX.com,oa.XXX.com,现局域网内新增了一台www服务器,记为B,ip地址为192.168.0.4,要把域名doc.XXX.com解析到B该如何做?

谢谢!
回复 支持 反对

使用道具 举报

发表于 2005-2-3 09:58:51 | 显示全部楼层
uppppppppp!
回复 支持 反对

使用道具 举报

发表于 2007-6-23 19:41:40 | 显示全部楼层

两块网卡iptable数据包的流向

Post by Chowroc
对,我知道,-i 只能与 PREROUTING 配合,-o 只能与 POSTROUTING 配合。POSTROUTING 还可以与 -s IP/MASK 配合:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
or:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

我写的测试脚本,用 LOG 选项记录到 /var/log/message 中:

  1. #!/bin/bash

  2. iptables -F

  3. /sbin/modprobe ipt_MASQUERADE
  4. /sbin/modprobe iptable_nat
  5. /sbin/modprobe ipt_LOG
  6. /sbin/modprobe ip_conntrack

  7. # iptables -P INPUT -j ACCEPT
  8. # iptables -P FORWARD -j ACCEPT
  9. # iptables -P OUTPUT -j ACCEPT

  10. iptables -t nat -A PREROUTING -i eth0 -j LOG --log-level 0 --log-prefix "PREROUTING_i_eth0: "
  11. # iptables -t nat -A PREROUTING -o eth0 -j LOG --log-prefix "PREROUTING_o_eth0: "
  12. iptables -A FORWARD -i eth0 -j LOG --log-level 0 --log-prefix "FORWARD_i_eth0: "
  13. iptables -A FORWARD -o eth0 -j LOG --log-level 0 --log-prefix "FORWARD_o_eth0: "
  14. # iptables -t nat -A POSTROUTING -i eth0 -j LOG --log-prefix "POSTROUTING_i_eth0: "
  15. iptables -t nat -A POSTROUTING -o eth0 -j LOG --log-level 0 --log-prefix "POSTROUTING_o_eth0: "

  16. iptables -t nat -A PREROUTING -i ppp0 -j LOG --log-level 0 --log-prefix "PREROUTING_i_ppp0: "
  17. # iptables -t nat -A PREROUTING -o ppp0 -j LOG --log-prefix "PREROUTING_0_ppp0: "
  18. iptables -A FORWARD -i ppp0 -j LOG --log-level 0 --log-prefix "FORWARD_i_ppp0: "
  19. iptables -A FORWARD -o ppp0 -j LOG --log-level 0 --log-prefix "FORWARD_o_ppp0: "
  20. # iptables -t nat -A POSTROUTING -i ppp0 -j LOG --log-prefix "POSTROUTING_i_ppp0: "
  21. iptables -t nat -A POSTROUTING -o ppp0 -j LOG --log-level 0 --log-prefix "POSTROUTING_o_ppp0: "
  22. iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
  23. echo 1 > /proc/sys/net/ipv4/ip_forward

  24. iptables -A INPUT -j ACCEPT
  25. iptables -A FORWARD -j ACCEPT
  26. iptables -A OUTPUT -j ACCEPT
复制代码


通过查看 message 文件中的记录,我的结论是,使用 eth0 + ppp0 的 ADSL 共享上网,内网请求 Internet 服务,经过:
LAN ---> eth0(PREROUTING) ---> 路由算法 ---> eth0(FORWARD) --->  ppp0(FORWARD) ---> ppp0(POSTROUTING: NAT) ---> Internet
没有eth0(POSTROUTING) 和 ppp0(PREROUTING) 的环节。

而 Internet 服务返回的数据,只经过 eth0(FORWARD) 和 ppp0(FORWARDE)──我通过看到的记录只能得出这样的结论。

我不知道两块网卡共享上网的情况,以及使用两块网卡进行 ADSL 共享上网的情况,故有此问。

不知那位兄台能帮助测一测?作为一种研究和学习。

谢谢。


**************************************************************
最近研究两块网卡iptable中的数据包流程,有些地方感到迷惑(其实就是数据包的具体流程不确定)。经过我几次尝试以后,得到了和兄台一样的结论“LAN ---> eth0(PREROUTING) ---> 路由算法 ---> eth0(FORWARD) --->  ppp0(FORWARD) ---> ppp0(POSTROUTING: NAT) ---> Internet
没有eth0(POSTROUTING) 和 ppp0(PREROUTING) 的环节”

我的实验环境是RHEL AS 4 ,eth1是内网网卡,eth0是公网网卡。

下面是步骤:

1 设置 :-A PREROUTING -i eth1 -j DROP
   现象 :客户端不能上网。
  结论 : 数据包走(肯定走,因为是第一次嘛)内网eth1的PREROUTING链,设置DROP后就被DROP掉了。
2 设置 :-A POSTROUTING -o eth1 -j DROP
   现象 : 客户端依然能上网,没有受到影响。
  结论 :数据包没有走内网eth1的POSTROUTING链。
3 设置 : -A PREROUTING -i eth0 -j DROP
   现象 :客户端仍然能上网,没有受到影响。
  结论 :数据包没有走外网eth0的 PREROUTING 链。

由此得到结论,和楼主的一致。但我开始没有做log,所以看到这个结果心里很是疑惑,不过看到楼主的结论和我的一样。总算对两块网卡中iptables数据包流向有点明白了。呵呵。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表