00:00
欢迎大家继续收看上硅谷的Linux云计算视频。大家好,我是汪洋老师。这节课呢,我们去给大家去讲解我们的IP的防火墙书写规则。或叫语法规则。在之前的课程中呢,我们已经学习过了防火墙的一些相关的原理,包括它的一些匹配流程。匹配顺序等等。那这样呢,我们就。带大家去了解书写规则,当然我们之前的课程中对书写规则的帮助会非常之大。非常重要,还是需要大家好好的把前面的课程中好好看一下。包括学习一下对吧,好。的话不多说,我们接下来继续往后看。首先我们的语法构成呢,会分为这么一个部分。IPT是我们的命令提示符。按T指定,表明我们昨天也说过了,对吧,四标504标五。杠T需要指定在哪张表上去书写?后面呢,跟上我们的选项。
01:02
选项,比如可以是杠大A,杠大A就添加一条新的规则到末尾。后面呢,跟上我们的列名。列名呢,也就是我们四表五列的其中一列对吧?当然你写的表必须要有对应的列,你才能写这个列。这个应该很好理解对吧,好。后面呢,跟上我们的条件条件。匹配的类型对吧,后面跟上我们的杠G杠键指定我们的动作。这就是我们一个完整的语法构成。这里面有一些比较特点的地方需要大家注意。第一个。不指定表名,默认指的是filter表。为什么这样去做呢?原因是对于我们运维来说,大部分的情况下做的都是一个所谓的数据包的过滤操作。数据包的过滤操作,我们之前也给大家去讲明白了,对吧,它就是在非的表中去实现的。那既然数据包的过滤操作是我们运维做的最多的事情,并且他也是在费表中实现的。所以它就。
02:04
变成了我们的一个默认的缺省值了。下一个。不指定列米代表的是我们的所有列。也就是如果不止选项后面不添加我们列名的话,代表往这张表的所有列里面写我们当前的一个规则。第三条,除非设置链的默认策略。否则必须要指定匹配条件。这个怎么理解呢?举个例子。我现在开门做生意是吧,我说。嗯,今天天气不错。八点到九点过来的,只要是男性我都售卖。售卖商品。其他的我都不卖。这是一个没有毛病的这么一个匹配条件。那我又说结果呢,我换了一句话说啊,八点钟到九点的男性,男性用户过来,我去售卖商品。后面我没说话了。
03:00
那来女人,来女性用户,包括一些小孩子,他那你卖不卖呢。能理解我的意思吗?虽然这个例子举的可能不是那么恰当,对吧?但我想表明一件事情,就是你说话必须要有一个完整的规范,对吧?你不能光说一部分,另一部分不去匹配了,包括我们当年的策略也是一样的,你说放行八零端口。放行43端口。你应该还加一句话,就是其他全部拒绝。不然的话,其他过来以后你应该怎么做,你没告诉他。所以在这里你必须要注意这里的默认策略,你可以理解为就是其他了。只要我们书写的一些固定的规则没匹配到,就会匹配默认策略。是不是就等同于其他的?当然,你说我在我们的固定策略上写上迪内奥可不可以也是一样的,对吧?你必须要指定我们的匹配,全部匹配到好。最后一个更重要。
04:00
选项列名,控制类型必须使用大写。其他均为小写。这里是有大小写区分的,你别以为这里随便写一个格式,你就说,哎,是不是跟之前一样无所谓,只不过它是一个格式而已。不行,如果这里呢,你的大小写字母写错以后,它是不会生效的,需要大家注意一下。选项。列名。控制类型。必须大写,这是非常重要的一个概念,需要大家严格记忆。那既然我们讲到了控制类型的话,我们还要看一下它到底有哪些控制类型。首先第一个accept允许通过。也就是我可以这样去书写,对吧,当。目标端口是八零。那我就放行这个数据包,那它的动作类型就是accept。第二是drop直接丢弃,不给出任何回应,我们第二个第三个一起看,Reject拒绝通过,必要时给出提示。
05:03
你会发现第二个和第三个其实都是拒绝对吧。那为什么要搞两个呢?他说的已经比较明显了,Job就直接丢弃。这叫拒绝通过,这是非常不一样的,怎么去理解呢?你给一个你的女神。发了一个信息对吧,女生我喜欢你。结果女神呢,没有搭理你。其实他已经看到这个短信了,只是不想理你而已。这就是典型的job。那另一个呢?如果是类型的,那女生会回你。你是个好人是吧?发个好人卡得了?那这就是典型的reject。会给出你提示,告诉你。这是被拒绝了。这是我们三种比较常用的一个动作类型,那我们来看下一个log类型。记录日志信息传递给下一条规则,继续匹配。这是我们所有所有所有所有所有动作里面最特殊的一条。我们之前在讲过我们的匹配规则,对吧。
06:03
自上而下依次匹配,匹配及停止,但是我们后面加了一句话对吧,除了log动作类型。也就是如果你遇到的是log动作类型的话,它匹配完了以后不会停止。它只会揭露日继续向下匹配,这是唯一一个具有特殊意义的动作,需要大家注意一下。I。修改数据包源地址,它主要做的是我们的一个能够让我们的内网用户通过同一个公网IP访问公网的能力,这个我们在后面会给大家演示,再详细去讲解。TT叫端口映射。把公网中的。公网中的访问映射到我们的私网的一个服务器上来。那这个我们到时候也会再去说,这两个我们会专门说明,我们先不看下一个。Du。重立项,其实这个重立项我们在之前的课程中已经利用过了,还记得吗?在square的时候还记得吗?当原内网地址是多少对吧?端口是多少,我把它重定向到我的328端口上来,328是不是就是我们之前所谓的端口还记得吗?
07:13
那这个呢,就是我们的一个端口重定向的功能,还需要大家注意一下,这就是我们在。方箱里面比较常见的一些动物类型了,那每一个动物类型对应的意义,大家一定要去好好的把它吸收一下,对吧,好。那咱们接着往后看。那接下来呢,我们看的就是我们的选项了,那第一个选项叫杠大A。在立案的末尾追加一条规则。也就是他在向我们链中添加规则的话,默认会向链的最后一条添加。杠大爱在链的开头添加。或指定序号添加。也就意味着,如果你什么都不插入的话,没有指定我们插入到第几行的话,它会默认插入到我们的链的最开头。如果你插的是比如刚大三,那就是插在我们的链的第三个序列上,需要大家注意一下。
08:02
那底下也写了一些规则对吧,我们先过来简单的看一下,首先第一个。IP。杠t filter。然后呢,杠杠a input,杠PTCP,杠杠depot。没有杠杠炮了是吧?是我的个人意向杠切accept。好,那我过来解释一下。杠T指定的是我们的表明,表明是非特表非表,我们之前说过他是做什么的。做我们的过滤操作的,对吧,数据包的过滤的。杠大A向链的末尾添加一条规则,哪条链呢?Input链?Input链是干嘛的?处理我们入账请求的对吧,杠P指定的是协议,指定的是TCP协议,杠7ACCEPT。也就意味着,当有TCP协议的入战请求的时候,我把它给放行。这就是我们一个最简单的防火墙的书写规则了。
09:02
那以此类推,那这一条呢,就是。这里省略了一个杠t filter,对吧?我们之前是不是说过了一个确等值,如果没有写表明的话,代表的是filter表,没忘吧?那也意味着这条链依然是做过滤的。在我们练的开头,开头,别忘了这是杠大爱对吧,开头。在input链的开头增加一条规则,当是udp连接的时候放行。那在我们的音。Filter表的input链的开头。是开通吗?不是在input链的第二个序列上添加一个,当协议是SMP的时候放行。这就是我们的防火墙的书写规则。给大家举了例子的一个三个不同的语法,对吧,还是比较简单的对吧,只要把我们之前所学的知识一拼接是不是。就得到这么一个规则了,好,那接下来我们继续往后看。杠大L列出所有的规则条目。
10:02
那我的书写的所有东西呢?如果我们可以通过杠大去展示出来,杠N可以把我们展示的所有的信息以我们的地址和端口的形式展现,不然的话,它会用对应的英文去代替杠位显示更。详细的过滤方式,刚刚line numbers显示我们的序号,那这些东西呢,我们先给大家介绍,介绍完了以后我们再去演示可以吧,好先别急,对吧,我们一个一个再给大家演示。那下一个杠大D删除链内的指定序号,或者是一条规则。也就意味着我们如果在链内写了一条规则,但是我看这规则跟我想要的不一样的话,我可以通过杠大D去删除,当然你需要指定序号,杠大F可以把当前的所有规则给清空,当然这指定的是一张表内的所有规则。那我们就先看到这里。还有杠大P,我们也一起说了吧,杠大P指定我们的默认规则,也就是我们如果这些规则都没匹配到的话,我们去通过杠大P指定我们的默认规则。
11:06
那我们就先看到这里,我们给大家一点一点去实现一下,看能不能生效对吧。首先打开我们一个比较纯净的干净的我们一个Linux环境,对吧。那在这里呢,我们之前在我们的技术环境中呢,已经把我们的防火墙给关了,对吧,所以现在我们要把它给开启,还需要特殊注意一下,我们现在用的又是6.8操作系统了。那等会再去教大家怎么把震动27改成我们的IP tables防火墙,需要大家注意一下,现在还是6.8对吧,首先我们先把我们的防火墙给打开。设为我们的开庭日启。IP杠大L,我们之前说过这条命令了,对吧,叫什么杠是干嘛的?
12:03
就是查看我们当前的表的所有规则,对吧。那正常情况下应该是这样写的,杠T杠大啊。那为什么杠T的可以省略呢?原因是它是不是一个缺称值啊,你加上是不是也可以?展示出来我们三条链,第一条input,第二条,第三条output。有这三条链的,肯定是不是我们的表了。肯定没问题对吧。那并且这里会发现,诶有一些默认规则,我们现在还看不太懂,对吧,那到时候我们把这所有的规则都学完以后,你发现这个问。就不是问题了。那我们不管这些东西,我们先把它给清空。清空当前表的所有规则,我们用到的是杠大F,刚才才说过对吧?杠大F清空当天表的所有规则。然后我们再去查看一下,刚刚啊,查看一下这里是不是就什么都没有了。注意一下,像这种都属于是我们的自定义规则。
13:00
自定义规则,那你是不是就会问,哎,我们是不是当时还说过一个叫默认规则,默认规则在哪里呢?看这里policy策略对吧?Accept,这就是我们的默认规则。但又需要大家注意一下,默认规则只有两种动作类型,要不是accept,要不是drop。就像你家的门一样,要么开要么关,没有半开半关,也没有所谓的日志,要么关要么开。需要大家注意一下。要不是accept,要不是job。只有这两种动作哈,需要大家注意哈,好。那这样的话,我们把当前的所有的规则都已经清空了,并且查看了,对吧,那接下来呢,我们一个一个去展示,我们先看第一个,我们当时是不是写了这么一条规则叫IP。让t filter。杠大A。Input。杠PTCP杠。IPT。当时我们解释的是当TCP的所有的入站数据报文放行对吧?停车那ipds杠大R,我们可以看一下这条规则是不是已经写进来了。
14:10
Accept TCP了anywhere。Sources,语言是anywhere,目标是anywhere,只要是TCP的,只要是入战的,我都accept,放心。那这里是安尔显示的对吧,我们当时是不是还说过啊,可以通过杠N去展示,还记得吗?杠N去展示,展示的是以我们的端口号方式进行展示,对吧?回车你会发现这里的安迪威尔变成了四个零点,杠零是不是代表我们所有地址任意地址。没问题吧?这就是杠N的含义。那是不是当时还说过一个杠V啊,我们再加个杠V,我们看一下。你会发现这里多了一些乱七八糟的东西,对吧?其实比较重要的就是这两个。第一个,这条规则过滤的数据报文的大小。有多少个数就报完了第二个过滤的字节大小,这就是我们加杠V的含义,那既然如果你加了杠V以后,它显示的过滤数目以后,你就可以知道哪条规则过滤的数据包更多了。
15:11
那过滤多了,你是不是应该把它放在前面呢?举个例子。现在我的访问量是这么分配的,四个访问的是八零端口,一个访问的是22端口。我现在书写规则。我如果书写规则是along。巴黎。Love。22。然后底内。我下面一个写的是。二二端口。Alone。八零端口。底内。这两个规则我们从我们的实现的结果上来看,都是放心八零,放心二拉,这个只不过放心阿拉,放心八零是不是其实没什么,在我们的中文里面表达里面是不是其实应该没什么问题,对吧。但在防火墙里出了一个问题,我们可以看一下。
16:02
假设。每经过一步匹配消耗的值是一的话,那这里有四个八零对吧。如果匹配第一个的话,是不是直接匹配到了这里就消耗四,那有一个二二端口匹配一次,匹配两次消耗的是二,那四加二是不是就等于六啊。那下一个呢?匹配八零有四个数据豹纹,那这里是不是就是一步两步匹配仪式是两步,两步的话就是八。那如果是匹配二打二的话,是不是就一八加一等于九。这里是不是就会得出来一个值了,六肯定是小于九的,那就代表第一种的压力比第二种小那。他是不是就应该更合理一点。你会发现这里的数据报文差距还没这么大,对吧?只是视频的关系。那在真实的生态环境中,八零跟22难道就是4:1吗?怎么可能呢?那可能是上10万:1。因为web服务器是不是经常访问22端口,怎么可能经常有管理员过来连接呢?
17:02
所以可以看出来一个问题,对吧。当我们的防火墙的书写规则出现一定问题的时候。你虽然能够实现对应的结果,但是你的效率肯定是不如正常书写的。也就意味着,我们在书写规则的时候,应该把匹配最多的那条规则放在最上面。以此类推。这是一个非常重要的概念,需要大家注意一下。那这样的话,我们是不是就把一条规则给添加进去了,那接下来我们继续往后看,我们除了讲了杠大A的选项以外,我们还讲了一个叫杠大的选项,对吧,杠大爱的选项。那我们跟大家选,我们演示一下吧,如果我们什么都不加,我们搞一个udp的对吧。回车IP杠我们看一下,它默认添加的是我们到开头的看到了吗。那如果我们再来演示一下杠大A的。
18:05
我们再搞一个icmp。我们告诉大家,我们看一下。看到了吗?杠大A它默认是插到我们的列的最后一行,杠大I默认插入的是第一行。看清楚了吧。那其实我现在想要的是,我们把SME插到他俩中间。听清楚了,插到他们俩中间。中间部分。那怎么办呢?一个叉的开头,一个叉到末尾,那我是不是只能把这条规则全部给清空以后再重新写,不需要杠大爱是可以指定序号插入的。那我想插入的其实就是第二个序号,他俩中间是不是就是第二个序号啊,那我试一下。APP。杠大I input,因为杠T菲是不是可以省略啊,对吧,杠pimp。然后呢?杠去。ICEPT。
19:01
好,别忘了这需要去指定一个序号,对吧,我们插入到第二个序号,也就是序号是在我们的链的后方跟入的。好,回撤IPS刚大啊,我们可以看一下。看到了吗?是不是插入他俩中间了?我们可以通过杠大爱的手段去灵活的插入他想要得到的序号。需要大家注意一下。其实有时候环境中,我们这里的规则比较多了,对吧,那如果这里有100多行规则的话,我告诉你要插入到这一行,你是不是找起来比较费事啊。那怎么办呢?还记得我们刚才说过的一个选项吗?叫。尴尬line。Numbers。那这样的话,我们是不是可以显示出来当前的一个序列的这么一个序号,规则的这么一个序号,你会发现诶1234,那你想插哪一行的话,是不是直接根据序号去插入即可。对吧?那别忘了,我们刚才在书写这条规则的时候,SMMP,我是想插到他俩中间的,结果现在有个SMP插到最后了,那我是不是应该把这条规则给删了呢?
20:11
那删除规则有两种方式,一个是把他们全删了,第二是删除固定的一条规则。我们今天演示一下,删除一条固定的规则,它使用的叫杠,大地杠。小T指定我们的表杠,大D指定我们要删的是input链。英特列的哪一条规则呢?1234第四条规则对吧,回撤。那杠大二我们可以看一下。第四条的SMP是不是就没了?没问题吧?那这样的话,其实我们就把这个规则杠大地给演示过了,对吧,我们刚才还说了一个叫做删除所有规则,还记得吗?删除所有规则好,那我们看一下IP tables,杠大F叫删除所有规则,其实这种情况应该加个杠t filter杠大F。
21:05
删除filter表的所有规则回车IP杠大案,我们可以看到这里的所有规则是不是都没有了?那最后一个选项叫杠大P,叫设置我们的默认规则,那我们现在就其实就可以做个最简单最简单的防火墙了。举例,我们放行,假设现在是阿帕奇福。我们去写一个网站主战对吧。号,然后呢,我现在想要得到的就是放行我的八零,放行我的是二叉,其他的我全拒绝,那我们应该怎么写,首先IP tables-T杠大A。
22:00
毛大小链上input链对吧?杠PTCB协议还加一个我们之前没见过的选项,叫杠杠d port,这叫。Destination port,也就是我们目标端口的意思,对吧,那我们目标端口是22端口杠JIP。放行了,22端口看到了吗。对吧,好,那我在放行八零端口,放行八零端口的话,我们想要的应该是80:22的访问量大,应该在它之前,对吧?所以要把这杠大A改成杠大I没问题吧,好回车放心的是八零的口看到了吗?那接下来我是不是还要做一下其他的全拒绝,我如果不写拒绝的话,匹配第一条放行啊,没匹配到,匹配到一条没匹到,哎,匹配默认策略放行,那我写的这两条规则是不是就没有意义了呢?所以我们要加一个默认策略对吧,好,IPS杠杠P。Input job。
23:01
当然我们之前说过,要不就accept,要不drop,别的没有意义,比如我们写个reject,我们看一下。这里是不是报错了?没有我们这么一个信息去匹配标签,好,那我们这里还是用drop。那IP杠大二我们看一下。放行八零放行22端口,其他全拒绝。所以我们当前没有断。原因是什么。我们。当年是不是SS连接啊,是不是已经放行了,那我们可以通过浏览器访问,我们看一下外部服务器还正不正常。10.10.10.1。回车。123我们刚才写的对吧,那我们再看一下别的协议,比如SMP协议。P。10.10.10.1回车。看到了吗?拼不通吧?原因是什么?Icmp是一个双向协议。不仅我要接收,我还要发送,在这里我是不是只放行的是我们的八零和SHSP,是不是不在放行规则里啊,它是不是就会匹配到默认规则,所以被拒绝了。
24:08
那这是不是已经演示了我们的防火墙能够正常工作了呢?对吧,好。那接下来呢,咱们把刚才用到的一些规则都可以再给整理一下。第一个。杠大A添加链的末尾添加一条规则对吧,末尾添加。杠大爱链的开头添加,还可以通过杠大爱后面跟上一个列名,后面跟上我们的序号的方式指定序号添加。杠大二、查看当前表的所有规则条目。杠大N能把这些规则,比如是我们的这种所谓的叫anywhere改成四个零杠零的方式,对吧,用我们的传统的这种标号方式去展示。杠V可以显示出来我们当前过滤的数据包以及过滤的字节数。刚刚line numbers可以显示当前的规则处于第几个序列号。
25:01
杠大地指定删除一条规则。大F清空当前的所有规则。杠大P指定我们的默认规则,当然还有一些比较重要的参数,比如动作类型drop。直接丢弃不给回应对吧,Reject。拒绝给出回应。Accept。放行对吧,还有就是我们的杠t filter是一个默认的缺省值对吧,那这些都是比较重要的一些参数那。我们这节课先讲到这里,下节课再见。
我来说两句