关于iptables和tc的限速理解

论坛 期权论坛     
选择匿名的用户   2021-5-28 02:11   117   0
<h1>关于iptables</h1>
<p>iptables 是包过滤软件,包过滤的顺序如下:</p>
<p><img alt="鸟哥的iptables图" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-2f216417480e4b4503a1edae92e1bde9.png"></p>
<p>每一个包都会匹配 rule 策略,而每一个 rule 策略会有一个 action,触发了其中一个 rule 就不会触发另外一个 rule,但如果要触发的 rule 放在最后面,那么可以想象,包过滤的效率就会大大降低,所以设计策略的时候要尽量将常用的策略放在最前面,策略的顺序可以通过不断的调整 -A 和 -I 策略,甚至还有 return 的动作,设计 iptables 的人真的很厉害。</p>
<p>这是 iptables 内部的 table 表和 chain 链,可以理解为 iptables 是一个大网,table 就是小网,里面的 chain 就是他的网线,当数据包经过这个小网的时候必然会触碰这些网线,这样“看不顺眼”的数据包就会被拦住。鸟哥的图画的真好。这里需要理解的是数据包的流行会分 2 个地方,就是进入本机或者不进入本机,进入本机的包就会走 input 的 chain 链,不进入本机的包就会去 FORWARD,什么是进入或者不进入呢?</p>
<p>举个例子就是这是一台路由器服务器,服务器上面假设了 web 服务器,然后这个路由器负责的内部网络还有一台数据库服务器,不过这台服务器是独立于路由器的另外一台机器,不过上网也是要经过路由器,那么一个外网用户访问这个 web 服务器和访问数据库服务器的行为就是进入本机和不进入本机的行为,因为 web 服务器是跟路由器在同一台机器上的,所以要进入本机,因为数据库服务器是另外一台机器上的,所以不进入本机。解释得好渣,还是看鸟哥吧。鸟哥乃神人。回归主题,看下图的结构,可以看出如果我们要在 iptables 上操刀的话可以在任何表上操刀,例如可以在 <code>PREROUTING,FORWARD,POSTROUTING</code> 表上做限速是完全没有问题的,前提是要注意不能冲突,每个表都有各自的作用。所以一般来说,要写 iptables 策略的时候都要跟着这个图来笔画一下,这样才能知道有没有写错。</p>
<pre class="blockcode"><code>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 這個表格。
</code></pre>
<table><thead><tr><th>Table (表名)</th><th>Explanation (注释)</th></tr></thead><tbody><tr><td>nat</td><td>nat 表的主要用处是网络地址转换,即 Network Address Translation,缩写为 NAT。做过 NAT 操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一次。如果第一个包被允许做 NAT 或 Masqueraded,那么余下的包都会自 动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被 NAT,而是自动地完成。这就 是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。 OUTPUT 链改变本地产生的包的目的地址。POSTROUTING 链在包就要离开防火墙之前改变其源地址。</td></tr><tr><td>mangle</td><td>这个表主要用来 mangle 数据包。我们可以改变不同的包及包 头的内容,比如 TTL,TOS 或 MARK。 注意 MARK 并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙 内的其他的规则或程序(如 tc)可以使用这种标记对包进行过滤或高级路由。这个表有五个内建的链: <code>PREROUTING,POSTROUTING, OUTPUT,IN
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP