分享

关于 iptables 和 tc 的限速理解-01

gefieder 发表于 2015-4-28 09:20:55 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 0 14100
问题导读:
1、什么是iptables?
2、iptables对于包的过滤顺序是如何的?
3、什么是数据包?




关于 iptablesiptables 是包过滤软件,包过滤的顺序如下:
untitled.png

每一个包都会匹配 rule 策略,而每一个 rule 策略会有一个 action,触发了其中一个 rule 就不会触发另外一个 rule,但如果要触发的 rule 放在最后面,那么可以想象,包过滤的效率就会大大降低,所以设计策略的时候要尽量将常用的策略放在最前面,策略的顺序可以通过不断的调整 -A 和 -I 策略,甚至还有 return 的动作,设计 iptables 的人真的很厉害。
这是 iptables 内部的 table 表和 chain 链,可以理解为 iptables 是一个大网,table 就是小网,里面的 chain 就是他的网线,当数据包经过这个小网的时候必然会触碰这些网线,这样“看不顺眼”的数据包就会被拦住。鸟哥的图画的真好。这里需要理解的是数据包的流行会分 2 个地方,就是进入本机或者不进入本机,进入本机的包就会走 input 的 chain 链,不进入本机的包就会去 FORWARD,什么是进入或者不进入呢?
举个例子就是这是一台路由器服务器,服务器上面假设了 web 服务器,然后这个路由器负责的内部网络还有一台数据库服务器,不过这台服务器是独立于路由器的另外一台机器,不过上网也是要经过路由器,那么一个外网用户访问这个 web 服务器和访问数据库服务器的行为就是进入本机和不进入本机的行为,因为 web 服务器是跟路由器在同一台机器上的,所以要进入本机,因为数据库服务器是另外一台机器上的,所以不进入本机。解释得好渣,还是看鸟哥吧。鸟哥乃神人。回归主题,看下图的结构,可以看出如果我们要在 iptables 上操刀的话可以在任何表上操刀,例如可以在 PREROUTING,FORWARD,POSTROUTING 表上做限速是完全没有问题的,前提是要注意不能冲突,每个表都有各自的作用。所以一般来说,要写 iptables 策略的时候都要跟着这个图来笔画一下,这样才能知道有没有写错。
filter (過濾器):主要跟進入 Linux 本機的封包有關,這個是預設的 table 喔!INPUT:主要與想要進入我們 Linux 本機的封包有關;OUTPUT:主要與我們 Linux 本機所要送出的封包有關;FORWARD:這個咚咚與 Linux 本機比較沒有關係, 他可以『轉遞封包』到後端的電腦中,與下列 nat table 相關性較高。nat (位址轉換):是 Network Address Translation 的縮寫, 這個表格主要在進行來源與目的之 IP 或 port 的轉換,與 Linux 本機較無關,主要與 Linux 主機後的區域網路內電腦較有相關。PREROUTING:在進行路由判斷之前所要進行的規則(DNAT/REDIRECT)POSTROUTING:在進行路由判斷之後所要進行的規則(SNAT/MASQUERADE)OUTPUT:與發送出去的封包有關mangle (破壞者):這個表格主要是與特殊的封包的路由旗標有關, 早期僅有 PREROUTING 及 OUTPUT 鏈,不過從 kernel 2.4.18 之後加入了 INPUT 及 FORWARD 鏈。 由於這個表格與特殊旗標相關性較高,所以像咱們這種單純的環境當中,較少使用 mangle 這個表格。
Table (表名)Explanation (注释)
natnat 表的主要用处是网络地址转换,即 Network Address Translation,缩写为 NAT。做过 NAT 操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。如果第一个包被允许做 NAT 或 Masqueraded,那么余下的包都会自 动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被 NAT,而是自动地完成。这就 是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。 OUTPUT 链改变本地产生的包的目的地址。POSTROUTING 链在包就要离开防火墙之前改变其源地址。
mangle这个表主要用来 mangle 数据包。我们可以改变不同的包及包 头的内容,比如 TTL,TOS 或 MARK。 注意 MARK 并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙 内的其他的规则或程序(如 tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTING,POSTROUTING, OUTPUT,INPUT 和 FORWARD。PREROUTING 在包进入防火墙之后、路由判断之前改变 包, POSTROUTING 是在所有路由判断之后。 OUTPUT 在确定包的目的之前更改数据包。INPUT 在包被路由到本地 之后,但在用户空间的程序看到它之前改变包。FORWARD 在最初的路由判 断之后、最后一次更改包的目的之前mangle包。注意,mangle 表不能做任何 NAT,它只是改变数据包的 TTL,TOS 或 MARK,而不是其源目地址。NAT 是在nat 表中操作的。
filterfilter 表是专门过滤包 的,内建三个链,可以毫无问题地对包进行 DROP、LOG、ACCEPT 和 REJECT 等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT 恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的
untitled.png

  • iptables 是主要工作在第三,四层的,即主要处理 ip、tcp,偶尔能够在第七层工作是因为打了 patch。
  • 什么是数据包:其实就是只 ip 数据包和 tcp 数据包
    包(Packet)是 TCP/IP 协议通信传输中的数据单位,一般也称“数据包”。有人说,局域网中传输的不是“帧”(Frame)吗?没错,但是 TCP/IP 协议是工作在 OSI 模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,“包”是包含在“帧”里的。

举例来说 tcp 包的包头含有以下这些信息(等等):
信息解释iptables 关键字
源 IP 地址发送包的 IP 地址。src
目的 IP 地址接收包的 IP 地址。dst
源端口源系统上的连接的端口。sport
目的端口目的系统上的连接的端口。dport
untitled.png

资料来源:http://segmentfault.com/a/1190000000666869

欢迎加入about云群371358502、39327136,云计算爱好者群,亦可关注about云腾讯认证空间||关注本站微信

没找到任何评论,期待你打破沉寂

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

本版积分规则

关闭

推荐上一条 /2 下一条