iptables 防火墙设置与基本配置

1.实验目的

  -实验可选择ASA、Iptables等防火墙中的 一种

  -了解防火墙的主要功能和规则配置方法

  -学会利用防火墙进行网络安全防护

2.实验内容

   自行设计一个具有内网、外网、DMZ和防火墙的网络拓扑,规划IP地 址。配置规则,实现以下功能;

–使用NAPT实现内网访问外网

–内网可以访问DMZ区,使内网用户使用DMZ中的WWW服务

–外网不能访问内网

–外网可以访问DMZ中的WWW服务(外网访问DMZ中的WWW服务需 由防火墙完成对外地址到服务器实际地址的转换)

–DMZ不能访问内网,避免当侵者攻陷DMZ时,进行一步攻到内网

–允许DMZ中的邮件服务器连接外网的SMTP服务,然后禁止其他从 MDZ发往外网的数据

–为防火墙配置规则,防止外部网络ping 或SSH 访问内部主机;

–为防火墙配置规则,防御常见的DDoS 攻击。

3.实验原理

       iptables操作的是2.4以上内核的netfilter.所以需要linux的内核在2.4以上netfilter内部分为三个表,分别是filter,nat,mangle,每个表又有不同的操作链(Chains)。在filter(过滤)表中,也就是他的防火墙功能的这个表,定义了三个Chain,分别是INPUT,FORWARD,OUTPUT。也就是对包的入、转发、出进行定义的三个过滤链。对于这个filter表的操作和控制也是我们实现防火墙功能的一个重要手段;在nat(Network Address Translation、网络地址翻译)表中,也就是我们用以实现地址转换和端口转发功能的这个表,PREROUTING,POSTROUTING,OUTPUT三个链,下面我们会对这三个链作详细的说明;而netfilter的mangle表则是一个自定义表,里面包括上面的filter以及nat表中的各种chains,它可以让我们进行一些自定义的操作,同时这个mangle表中的chains在netfilter对包的处理流程中处在一个比较优先的位置,下面有一张图清晰的描绘了netfilter对包的处理流程
可以看到,PREROUTING这个chain在最前面,当一个包来到linux的网络接口的时候先过mangle的PREROUTING,然后是nat的PREROUTING,从这个chain的名字我们可以看出,这个chain是在路由之前(pre-routing)要过的。为什么要在路由之前过呢?大家可以看到这个图上,上面有一个菱形的部分叫ROUTING,这个ROUTING部分就是Linux的route box,也就是路由系统,它同样有很高深的功能,可以实现策略路由等等一些高级特性,此处我们不做详细解释。单说这个PREROUTING链,因为在这个链里面我们对包的操作是DNAT,也就是改变目的地址和(或端口),通常用在端口转发,或者nat到内网的DMZ区,也就是说当一个包过来的时候我们要改变它的目的地址,大家可以想想,如果一个包在改变目的地址之前就被扔进了route box,让系统选好路之后再改变目的地址,那么选路就可能是错的,或者说毫无意义了,所以,PREROUTING这个Chain一定要在进Routing之前做。比如说,我们的公网ip是60.1.1.1/24,位于linux中的eth0,内网ip是10.1.1.1/24位于linux中的eth1,我们的内网有一台web服务器,地址是10.1.1.2/24,我们怎么样能让internet用户通过这个公网ip访问我们内部的这个web服务器呢?我们就可以在这个PREROUTING链上面定义一个规则,把访问60.1.1.1:80的用户的目的地址改变一下,改变为10.1.1.2:80,这样就实现了internet用户对内网服务器的访问了,当然了,这个端口是比较灵活的,我们可以定义任何一个端口的转发,不一定是80-->80,具体的命令我们在下面的例子中介绍,这里我们只谈流程与概念上的实现方法。

 

这个包已经过了两个PREROUTING链了,这个时候,出现了一个分支转折的地方,也就是图中下方的那个菱形(FORWARD),转发!这里有一个对目的地址的判断(这里同样说明了PREROUTING一定要在最先,不仅要在routebox之前,甚至是这个对目的地址的判断之前,因为我们可能做一个去某某某ip的地方转到自己的ip的规则,所以PREROUTING是最先处理这个包的Chain)!如果包的目的地是本机ip,那么包向上走,走入INPUT链处理,然后进入LOCAL PROCESS,如果非本地,那么就进入FORWARD链进行过滤,我们在这里就不介绍INPUT,OUTPUT的处理了,因为那主要是对于本机安全的一种处理,我们这里主要说对转发的过滤和nat的实现。

这里的FORWARD,当linux收到了一个目的ip地址不是本地的包,Linux会把这个包丢弃,因为默认情况下,Linux的三层包转发功能是关闭的,如果要让我们的linux实现转发,则需要打开这个转发功能,可以改变它的一个系统参数,使用sysctl net.ipv4.ip_forward=1或者echo "1" > /proc/sys/net/ipv4/ip_forward命令打开转发功能。好了,在这里我们让linux允许转发,这个包的目的地址也不是本机,那么它将接着走入FORWARD链,在FORWARD链里面,我们就可以定义详细的规则,也就是是否允许他通过,或者对这个包的方向流程进行一些改变,这也是我们实现访问控制的地方,这里同样也是Mangle_FORWARD然后filter_FORWARD,我们操作任何一个链都会影响到这个包的命运,在下面的介绍中,我们就忽略掉mangle表,我们基本用不到操作它,所以我们假设它是透明的。假设这个包被我们的规则放过去了,也就是ACCEPT了,它将进入POSTROUTING部分,注意!这里我注意到一个细节问题,也就是上面的图中数据包过了FORWARD链之后直接进入了POSTROUITNG链,我觉得这中间缺少一个环节,也就是route box,对于转发的包来说,linux同样需要在选路(路由)之后才能将它送出,这个图却没有标明这一点,我认为它是在过了route box之后才进入的POSTROUITNG,当然了,这对于我们讨论iptables的过滤转发来说不是很重要,只是我觉得流程上有这个问题,还是要说明一下。同样的,我们在这里从名字就可以看出,这个POSTROUTING链应该是路由之后的一个链,也就是这个包要送出这台Linux的最后一个环节了,这也是极其重要的一个环节!!这个时候linux已经完成(has done..^_^)了对这个包的路由(选路工作),已经找到了合适的接口送出这个包了,在这个链里面我们要进行重要的操作,就是被Linux称为SNAT的一个动作,修改源ip地址!为什么修改源ip地址?很多情况需要修改源地址阿,最常见的就是我们内网多台机器需要共享一个或几个公网ip访问internet,因为我们的内网地址是私有的,假如就让linux给路由出去,源地址也不变,这个包应该能访问到目的地,但是却回不来,因为internet上的N多个路由节点不会转发私有地址的数据包,也就是说,不用合法ip,我们的数据包有去无回。有人会说:“既然是这样,我就不用私有ip了,我自己分配自己合法的地址不行吗?那样包就会回来了吧?”答案是否定的,ip地址是ICANN来分配的,你的数据包或许能发到目的地,但是回来的时候人家可不会转到你那里,internet上的路由器中的路由信息会把这个返回包送到那个合法的获得ip的地方去,你同样收不到,而你这种行为有可能被定义为一种ip欺骗,很多设备会把这样的包在接入端就给滤掉了,可能都到不了你要访问的那个服务器,

那么Linux如何做SNAT呢?比如一个内网的10.1.1.11的pc访问202.2.2.2的一个web服务器,linux的内网接口10.1.1.1在收到这个包之后把原来的PC的ip10.1.1.11改变为60.1.1.1的合法地址然后送出,同时在自己的ip_conntrack表里面做一个记录,记住是内网的哪一个ip的哪个端口访问的这个web服务器,自己把它的源地址改成多少了,端口改成多少了,以便这个web服务器返回数据包的时候linux将它准确的送回给发送请求的这个pc. 

iptables到底实现对包的控制。
先介绍一下iptables如何操作链:
对链的操作就那么几种,-I(插入) -A(追加) -R(替换) -D(删除) -L(列表显示)这里要说明的就是-I将会把规则放在第一行,-A将会放在最后一行。比如我们要添加一个规则到filter表的FORWARD链
iptables -t filter -A FORWARD -s 10.1.1.11 -d 202.1.1.1 -j ACCEPT
上面的命令意思为:追加一个规则至filter表中的FORWARD链尾,允许(-j ACCEPT)源地址为10.1.1.11目的地址为202.1.1.1的数据包通过。其中-t后面跟的是表名,在-A后面跟Chain名,后面的小写的-s为源地址,-d为目的地址,-j为处理方向。
在iptables中,默认的表名就是filter,所以这里可以省略-t filter直接写成:iptables -A FORWARD -s 10.1.1.11 -d 202.1.1.1 -j ACCEPT
iptables中的匹配参数:
我们在这里就介绍几种常用的参数,详细地用法可以man iptables看它的联机文档,你会有意外的收获。
-s匹配源地址
-d匹配目的地址
-p协议匹配
-i入接口匹配
-o出接口匹配
--sport,--dport源和目的端口匹配
-j跳转,也就是包的方向
其中还有一个!参数,使用!就是取反的意思。下面我们简单举几个例子介绍一下。
-s这个参数呢就是指定源地址的,如果使用这个参数也就是告诉netfilter,对于符合这样一个源地址的包怎么去处理,可以指定某一个单播ip地址,
也可以指定一个网络,如果单个的ip地址其实隐含了一个32位的子网掩码,比如-s 10.1.1.11 其实就是-s 10.1.1.11/32
同样我们可以指定不同的掩码用以实现源网络地址的规则,比如一个C类地址我们可以用-s 10.1.1.0/24来指定。
-d参数与-s格式一样。
-i参数是指定入接口的网络接口,比如我仅仅允许从eth3接口过来的包通过FORWARD链,就可以这样指定iptables -A FORWARD -i eth3 -j ACCEPT
-o是出接口,与上同.

 简单的拓扑图如下:

实验用了两台windows2003两台kali2分别对着内网,外网,DMA,防火墙。

内网:

 

外网:

 

DMZ:

 

 

 

 

防火墙配置:   

 

 

 

 

 

 

 

清空防火墙规则

 

内网与DMZ安全ssh连接

禁止ping只允许内网ping

MASQUERADE来进行ip伪装,使得内网可以访问外网和DMZ区。

设置DMZ不能访问内外网。

设置最大连接数为每秒1个,防止DDOS攻击。

标题

映射80端口和25,21端口刀外部网络,使得外部网络可以使用HTTP,SMTP,FTP服务。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值