Centos6.5 iptables配置详解

1.什么是iptables

iptable其实是Linux下的数据包过滤软件,也是目前最新Linux发行版中默认的防火墙。要想深入了解iptables机制,了解防火墙的规则是必不可少的。由于iptables利用的数据包过滤的机制,所以它会分析数据包的报头数据。根据报头数据与定义的规则来决定该数据包是进入主机还是丢弃。 也就是说,根据数据包的分析资料”对比”预先定义的规则内容,若数据包数据与规则内容相同则进行动作,否则就继续下一条规则的比对。重点在比对与分析顺序。

2.iptables的简单工作原理

举个简单的例子,当我们的iptables定义了十条防火墙规则,那么当Internet来了一个数据包想要进入主机前,会先经过iptables的规则。检查通过则接受(ACCEPT)进入本机取得资源,如果检查不通过,则可能予以丢弃(DROP).一定要注意一点,iptables定义的规则是有顺序,但某个数据包符合Rule1,则会执行Rule1对应的Action1而并不会理会后面所有的Rule。当所有Rule都不匹配,会执行默认操作。 
iptables的规则是非常重要的,比如当我们有一台提供WWW的服务的主机,自然我们就要针对port 80端口来启动通过的数据包规则,但我们发现IP为192.169.155.155总是存在恶意操作,所以我们要禁止该IP来访问该服务,最后所有非WWW的数据包全部丢弃,我们来看完成这三个功能的规则顺序。

  • Rule1先阻挡192.168.155.155
  • Rule2再让请求WWW服务的数据包通过
  • Rule3将所有的数据包丢弃

现在我们想一下,如果这三条规则的顺序变了之后,我们还能完成刚刚的需求么?

3.iptables的策略

防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。

刚刚我们所说的规则仅仅是iptables表格中的一个链而已。iptables里面有多个表格(table),每个表格都定义出自己的默认策略与规则,且每个表格的用途都不相同。

我们现在用的比较多有如下3个:

  • 1.filter(过滤器,默认的table) 定义允许或者不允许的
  • 2.nat(地址转换) 定义地址转换的
  • 3.mangle(破坏者)功能:修改报文原数据,加特殊标记。
4.上述表中常见的链

与数据包是否进入Linux本机有关的表:Filter

  • INPUT:主要与想要进入Linux主机的数据包有关
  • OUTPUT : 主要与Linux本机所要送出的数据包有关
  • FORWARD : 与Linux本机没有关系,它可以传递数据包到后端的计算机中,与表NAT有关

用来进行来源与目的地的IP或port的转换(主要于Linux主机后的局域网内的主机有关):NAT

  • PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT) 。
  • POSTROUTING :在进行路由判断之后所有进行的规则(SNAT/MASQUERADE)。
  • OUTPUT: 与发送出去的数据包有关

与特殊的数据包的路由标志有关:Mangle 上述5个了链都可以做

由于Filter是默认的table,并且如果iptables只是用来保护Linux主机本身的话,只用关注Filter表格内的INPUT和OUTPUT这两条链即可。其余的两个table也不常用,因此我们重点学习Filter。

5.iptables中规则的查看

如果在安装Linux的时候没有选择防火墙,那么iptables在一开始应该是没有规则的。如果在安装的时候选择自动建立防火墙机制,那么就有默认的防火墙规则。我们来看查看iptables规则的命令。

<code class="hljs mel has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">iptables [-t table ] [-L] [-nv]
选项与参数:
-t:后面接table。例如 <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">filter</span>或者nat。如果不写默认是<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">filter</span>
-L:列出目前的table规则
-n:不进行IP与HOSTNAME的反查,使用此参数查询结果会很快
-v:列出更多信息,包括通过该规则的数据包总位数,相关的网络接口等。
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//我们执行上述命令</span>
hadoop wang # iptables -L -n 
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//针对INPUT链,且默认策略为可接受</span>
Chain INPUT (policy ACCEPT)
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//说明栏</span>
target     prot opt <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">source</span>               destination         
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//针对FORWARD链,且默认策略为可接受</span>
Chain FORWARD (policy ACCEPT)

target     prot opt <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">source</span>               destination         
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//针对OUTPUT链,且默认策略为可接受</span>
Chain OUTPUT (policy ACCEPT)
target     prot opt <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">source</span>               destination    </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li></ul>

上述每一个chain就是前面提到的每个链。Chain那一行括号里面policy就是默认的策略。下面分析说明栏的五列分别代表的意思:

  • target:代表进行的操作,ACCEPT是放行,而REJECT则是拒绝,此外,尚有DROP(丢弃)的项目.
  • 代表使用的数据包协议,主要有TCP,UDP及ICMP数据包格式。
  • opt:额外的选项说明。
  • source :代表次规则是针对哪个来源IP进行限制
  • destination: 代表次规则是针对哪个目标IP进行限制
5.iptables中规则的清除
<code class="hljs haml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">iptables [ -t tables  ] [ -FXZ ]
-<span class="ruby" style="box-sizing: border-box;"><span class="hljs-constant" style="box-sizing: border-box;">F</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span>清楚所有的已定制的规则
</span>-<span class="ruby" style="box-sizing: border-box;"><span class="hljs-constant" style="box-sizing: border-box;">X</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span>清楚所有用户<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"自定义"</span>的chain或者tables
</span>-<span class="ruby" style="box-sizing: border-box;"><span class="hljs-constant" style="box-sizing: border-box;">Z</span><span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">:</span>将所有的chain的计数与流量统计都归零
</span>
清楚防火墙的所有规则:
iptables -F
iptables -X
iptables -Z</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li></ul>

上述三个命令会将防火墙的规则都清除,但不会改变默认策略(policy)。一般来说,我们重新定义防火墙的时候都会先把规则清除掉。

6.iptables中定义默认策略(policy)

前面提到,当数据包不在我们设置的规则之内时,则该数据包的通过与否,是以Policy的设置为准。在安全性比较高的主机中,Filter内的INPUT链定义的比较严格,INPUT的Policy定义为DROP

iptables定义规则:

格式:iptables [-t table] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP ]

-p : 定义策略(Policy)。注意:P为大写 
ACCEPT:数据包可接受 
DROP:数据包被丢弃,client不知道为何被丢弃。

<code class="hljs sql has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">iptables  -P INPUT <span class="hljs-operator" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">DROP</span>  //<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">INPUT</span>默认设置为<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">DROP</span>
iptables  -P <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">OUTPUT</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">DROP</span>  //<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">OUTPUT</span>默认设置为ACCEPT
iptables  -P FORWARD <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">DROP</span> // FORWARD默认设置为ACCEPT  
</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

此时我们执行 iptables-save(不同与iptables -L -n -v的是它会列出完整的防火墙规则)会看到如下信息:

<code class="hljs sql has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">*filter
:INPUT <span class="hljs-operator" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">DROP</span> [<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]
:FORWARD ACCEPT [<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]
:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">OUTPUT</span> ACCEPT [<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]
<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">COMMIT</span>
//由于<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">INPUT</span>设置为<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">DROP</span>而又尚未有任何规则,所有显示如上结果。此时所有数据包均都无法进入</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

现在我们可以设置默认策略后,现在来看看关于各规则的数据包基础比对设置。

7.数据包的基础对比:IP,网络及接口设备

现在我们来添加防火墙规则的数据包对比设置。从最基础的IP,网络及端口开始(即是OSI的第三层谈起)再来谈谈设备(网络卡)的限制等。

iptables定义规则的格式: 
iptables [-AI 链名] [-io 网络接口 ] [ -p 协议 ] [ -s 来源IP/网络 ] [ -d 目标IP/网络 ] -j [ACCEPT | DROP|REJECT|LOG]

参数说明: 
-A:新增一条规则,该规则在原规则的最后面。 
-I:插入一条规则,默认该规则在原第一条规则的前面。即该新规则变为第一条规则。

-io 网络接口:设置数据包进出的接口规范。 
-i:表示输入。即数据包进入的网络接口。与INPUT链配合 
-o : 表示输出。数据包传出的网络接口。与OUTPUT链配合

-p 协定: 此规则适应于哪种数据包。如tcp,udp,icmp及all.

-s 来源 IP/网络:设置次规则之前数据包的来源地,可指定单纯的IP或网络,例如: 
IP : 192.168.0.100 
网络 : 192.168.0.0/24或者192.168.0.0/255.255.255.0 
如果规则为不允许,则在IP/网络前加 “!” 即可。 
-s ! x.x.x.x

-d 目标 IP/网络。与-s类似,只是是目标IP或者网络而已。

-j:后面接操作。如ACCEPT,DROP ,REJECT或者LOG(记录)

比如:开放lo这个本机的接口以及某个IP来源

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//设置io成为受信任的设备,亦即进出lo的数据包都接受</span>
iptables <span class="hljs-attribute" style="box-sizing: border-box;">-t</span> filter <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> lo  <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> REJECT</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

我们可能会有疑惑,为什么没有-s -d等规则,表示不论数据包来自何处或去到哪里,只要是来自lo这个接口全部接受。

设置来自192.168.100.10的就接受,192.168.100.11的就丢弃。

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-s</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.100</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.10</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> ACCEPT
iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-s</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.100</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.11</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> DROP
iptables <span class="hljs-attribute" style="box-sizing: border-box;">-I</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-s</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.100</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">24</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> ACCEPT</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

此时我们执行iptables-save

<code class="hljs haml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">*filter
:INPUT ACCEPT [12:976]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [9:2186]
-<span class="ruby" style="box-sizing: border-box;"><span class="hljs-constant" style="box-sizing: border-box;">A</span> <span class="hljs-constant" style="box-sizing: border-box;">INPUT</span> -s <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100.0</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">24</span> -i eth<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> -j <span class="hljs-constant" style="box-sizing: border-box;">ACCEPT</span>
</span>-<span class="ruby" style="box-sizing: border-box;"><span class="hljs-constant" style="box-sizing: border-box;">A</span> <span class="hljs-constant" style="box-sizing: border-box;">INPUT</span> -s <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100.10</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span> -i eth<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> -j <span class="hljs-constant" style="box-sizing: border-box;">ACCEPT</span>
</span>-<span class="ruby" style="box-sizing: border-box;"><span class="hljs-constant" style="box-sizing: border-box;">A</span> <span class="hljs-constant" style="box-sizing: border-box;">INPUT</span> -s <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">100.11</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">32</span> -i eth<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> -j <span class="hljs-constant" style="box-sizing: border-box;">DROP</span>
</span>COMMIT</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li></ul>

此时我们会有一个疑问,既然我们已经放行了192.168.100.0/24。所以丢弃192.168.100.11的规定根本不会被用到了。那么我们应该怎么办在不改变顺序的情况下让这两个规则都生效。指定-j 为LOG。

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-s</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.200</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">LOG</span>

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">LOG</span>        <span class="hljs-literal" style="color: rgb(0, 102, 102); box-sizing: border-box;">all</span>  <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>    <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.2</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.200</span>   <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0.0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>            <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">LOG</span> flags <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span> level <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

输出结果最左边为LOG,只要数据包来自192.168.2.200这个IP时,那么该数据包的相关信息就会被写入内核日志文件,即/var/log/messages这个文件当中。然后于下一个规则相比较。

8.TCP,UDP协议的规则对比:针对端口设置
  • 在 -s 参数后面可以增加一个参数 -sport 端口范围(限制来源端口),如:1024:65535
  • 在-d 参数后面可以增加一个参数 -dport 端口范围(限制目标端口)

需要特别注意,这两个参数重点在port上面,并且仅有TCP和UDP数据包具有端口,因此要想使用–dport,–sport时需要加上-p tcp或者 -p udp才会成功。

下面做几个小测试:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//丢弃所有想要链接本机21端口的数据包</span>
iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> tcp <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>dport <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> DROP
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//想要链接到本机的网上邻居(UDP port 137,138 tcp 139,445)就放行</span>
iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> udp <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>dport <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">137</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">138</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> ACCEPT
iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> tcp <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>dport <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">139</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> ACCEPT
iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> tcp <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>dport <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">445</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> ACCEPT
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//只要来自192.168.1.0/24的1024:65535端口的数据包,且想要连接的本机的ssh port就阻挡</span>
iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> tcp <span class="hljs-attribute" style="box-sizing: border-box;">-s</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">192.168</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.1</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.0</span>/<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">24</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>sport <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1024</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">65535</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>dport ssh <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> DROP

iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> tcp <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>dport <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span> <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> DROP</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li></ul>

除了制订端口号之外,TCP数据包还有特殊的标识,比如主动链接的SYN标志。iptables支持使用–syn来处理。

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">iptables <span class="hljs-attribute" style="box-sizing: border-box;">-A</span> INPUT <span class="hljs-attribute" style="box-sizing: border-box;">-i</span> eth0 <span class="hljs-attribute" style="box-sizing: border-box;">-p</span> tcp <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>sport <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1023</span> <span class="hljs-attribute" style="box-sizing: border-box;">-dport</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1023</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>syn <span class="hljs-attribute" style="box-sizing: border-box;">-j</span> DROP</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>
9.iptables的开启与关闭

查看运行状态:

<code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#/etc/init.d/iptables status</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

关闭防火墙服务:

<code class="hljs cs has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">/etc/init.d/iptables stop
<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">//此方法在主机下次重新启动还是会开启</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

直接禁用防火墙:

<code class="hljs cmake has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">chkconfig --level <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">35</span> iptables <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>
 chkconfig --list iptables
iptables        <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>   <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>   <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>   <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>   <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>   <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">5</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>   <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">6</span>:<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">off</span>
//对应启动的<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">7</span>种状态 </code>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值