防火墙之iptables使用

一、防火墙简介   

       Firewall:防火墙,隔离工具;工作于主机或网络边缘,对于进出本主机或本网络的报文根据事先定义的检查规则作匹配检测,对于能够被规则匹配到的报文作出相应处理的组件;

       软件防火墙(软件逻辑):一般寄生在操作系统平台。软件防火墙是通过纯软件的的方式实现隔离内外部网络的目的。

       硬件防火墙(硬件和软件逻辑):系统是嵌入式的系统。一般开源的较多。硬件防火墙是通过硬件和 软件的组合来达到隔离内外部网络的目的。 硬件防火墙是流行趋势,相比软件防火墙除成本外很有优势。

       本文只对软件防火墙进行介绍

           主机防火墙:服务范围为当前主机

           网络防火墙:服务范围为某个局域网

       iptables的基本认识:

            1、netfilter组件被称为内核空间,它被集中在内核中。netfilter是一种内核中用于扩展各种网络服务的结构化底层框架。它是在内核中选取五个位置放了五个hook function,这五个hook function 向用户开放,用户可以通过工具(iptables)向其写规则。

            2、iptables是一个工作在用户层用来写规则的工具,写好的规则被送往netfilter。这些规则告诉内核中的netfilter组件如何处理信息包

       iptables的组成:

          iptables是由四个表和五个链组成

          1、四表:

               filter:过滤,防火墙;

               natnetwork address translation;用于修改源IP或目标IP,也可以改端口;(从而达到隐藏后台服务器的目的)

               mangle:拆解报文,做出修改,并重新封装起来;(除了该地址之外的其它数据,  如协议)

               raw:关闭nat表上启用的连接追踪机制;

              实际上还有第五个表:security 此表用于强制访问控制(MAC)网络规则,一般很少很少用到此表

           2、五链:

                PREROUTING:对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)

                INPUT:进来的数据包应用此规则链中的策略

                OUTPUT:外出的数据包应用此规则链中的策略

                POSTROUTING:对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)

                FORWARD:转发数据包时应用此规则链中的策略

           3、表与链的关系         

                rawPREROUTINGOUTPUT

                manglePREROUTINGINPUTFORWARDOUTPUTPOSTROUTING

                natPREROUTING[INPUT]OUTPUTPOSTROUTINGcentos6上没有INPU

                filterINPUTFORWARDOUTPUT

                功能生效先后次序raw –>mangle–>nat–>filter

          4、如何写规则

                添加规则时的考量点:

                      (1) 要实现哪种功能:判断添加到哪个表上;

                      (2) 报文流经的路径:判断添加到哪个链上;

               链:链上的规则次序,即为检查的次序;因此,隐含一定的应用法则:

                      (1) 同类规则(访问同一应用),匹配范围小的放上面;

                      (2) 不同类的规则(访问不同应用),匹配到报文频率较大的放在上面;

                      (3) 将那些可由一条规则描述的多个规则合并起来;

                      (4) 设置默认策略;

          

二、iptables的基本使用

      iptables [-t 表名] <-A|-D|-I|-R…> 链名 [规则编号] [-i|-o 网卡名称] [-p 协议类型] [-s 源IP地址|源子网] [–sport 源端口] [-d 目标地址|子网地址] [–dport 目标端口] <-j 处理动作>     

        1、-t table

             raw, mangle, nat, [filter](默认是filter链)

        2、链管理

             PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING 

            -Nnew, 自定义一条新的规则链;

                 防火墙之iptables使用

            -Xdelete,删除自定义的规则链;

                 注意:只有具备以下全部条件才能删除链

                         用户自定义的

                         空的

                         引用计数为0

                       必须符合以上三个条件才能删除

                 防火墙之iptables使用  

           -PPolicy,设置默认策略;对filter表中的链而言,其默认策略有:

                 ACCEPT:接受(内建)

                 DROP:丢弃(内建)

                 REJECT:拒绝(扩展)

           -E:重命名自定义链;引用计数不为0的自定义链不能够被重命名,也 不能被删除;

        3、规则管理:

             -Aappend,追加;

             -Iinsert, 插入,要指明位置,省略时表示第一条;

                  防火墙之iptables使用

            -Ddelete,删除;

                  防火墙之iptables使用

            -R:replace,替换指定链上的指定规则;

                  防火墙之iptables使用

            -Fflush,清空指定的规则链;

                 防火墙之iptables使用

            -Zzero,置零;

                 iptables的每条规则都有两个计数器:

                 (1) 匹配到的报文的个数;

                 (2) 匹配到的所有报文的大小之和;

         4、查看:

             -Llist, 列出指定鏈上的所有规则;必须写在后面

             -nnumberic,以数字格式显示地址和端口号;

             -vverbose,详细信息;

                  -vv, -vvv

            -xexactly,显示计数器结果的精确值;

            –line-numbers:显示规则的序号;

                 防火墙之iptables使用

         5、匹配条件:

             (1)基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供;

                    [!] -s, –source  address[/mask][,…]:检查报文中的源IP地址是否符合此处指定的地址或范围;

                    [!] -d, –destination address[/mask][,…]:检查报文中的目标IP地址是否符合 此处指定的地址或范围;

                        匹配所有地址:0.0.0.0

                   [!] -p, –protocol protocol(四层协议)

                       protocol: tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh or  “all”

                   [!] -i, –in-interface name:数据报文流入的接口;只能应用于数据报文流入 的环节,只能应用于PREROUTING,INPUT和 FORWARD链;

                   [!] -o, –out-interface name:数据报文流出的接口;只能应用于数据报文流 出的环节,只能应用于FORWARD、OUTPUT和 POSTROUTING链;

             (2)扩展匹配条件 需要加载扩展模块,方可生效;又分为隐式扩展和显示扩展

                     隐式扩展:不需要手动加载扩展模块;因为它们是对协议的扩展,所以,但凡使 用-p指明了协议,就表示已经指明了要扩展的模块;

                            常用的协议

                              tcp:

                                   [!] –source-port, –sport port[:port]:匹配报文的源端口;可以是端口范围;

                                   [!] –destination-port,–dport port[:port]:匹配报文的目标端口;可以是端 口范围;

                                   [!] –tcp-flags  mask  compmask is the flags which we should examine,  written as a comma-separated list,例如 SYN,ACK,FIN,RST

                                           comp is a comma-separated list  of  flags  which must be set,例如:SYN

                                   例如:–tcp-flags  SYN,ACK,FIN,RST  SYN”表示,要检查的标志位为 SYN,ACK,FIN,RST四个,其中SYN必须为1,余下的必须为0;

                                   [!] –syn:用于匹配第一次握手,相当于”–tcp-flags  SYN,ACK,FIN,RST  SYN

                                   防火墙之iptables使用

                        “; udp

                                   [!] –source-port, –sport port[:port]:匹配报文的源端口;可以是端口范围;

                                   [!] –destination-port,–dport port[:port]:匹配报文的目标端口;可以是端口范围;

                                   防火墙之iptables使用

                             icmp

                                  [!] –icmp-type {type[/code]|typename}

                                          echo-request8 (回显请求)

                                          echo-reply0     (回显响应)

                                   防火墙之iptables使用

          6处理动作:

               -j targetname [per-target-options]

                  ACCEPT

                  DROP

                  REJECT

                  RETURN:返回调用链;

                  REDIRECT:端口重定向;

                  LOG:记录日志;

                  MARK:做防火墙标记;

                  DNAT:目标地址转换;

                  SNAT:源地址转换;

                  MASQUERADE:地址伪装;

                  …

                 自定义链:

三、扩展模块

      1、multiport扩展:以离散方式定义多端口匹配;最多指定15个端口;

          [!] –source-ports,–sports port[,port|,port:port]…:指定多个源端口;

          [!] –destination-ports,–dports port[,port|,port:port]…:指定多个目标端口;

          [!] –ports port[,port|,port:port]…:指明多个端口;

               防火墙之iptables使用         

     2iprange扩展:指明连续的ip地址范围;

          [!] –src-range from[-to]:源IP地址;

          [!] –dst-range from[-to]:目标IP地址;

               防火墙之iptables使用

     3string扩展:对报文中的应用层数据做字符串模式匹配检测;

          –algo {bm|kmp}:字符串匹配检测算法;

                   bmBoyer-Moore

                   kmpKnuth-Pratt-Morris

         [!] –string pattern:要检测的字符串模式;

         [!] –hex-string pattern:要检测的字符串模式,16进制格式;

              防火墙之iptables使用     4、time扩展:根据将报文到达的时间与指定的时间范围进行匹配;

          –datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

          –datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

          –timestart hh:mm[:ss]

          –timestop hh:mm[:ss]

           [!] –monthdays day[,day…]

           [!] –weekdays day[,day…]

          –kerneltz:使用内核上的时区,而非默认的UTC

                防火墙之iptables使用

     5、connlimit扩展根据每客户端IP做并发连接数数量匹配;

          –connlimit-upto n:连接的数量小于等于n时匹配;

          –connlimit-above n:连接的数量大于n时匹配;

            防火墙之iptables使用

    6limit扩展:基于收发报文的速率做匹配;

        令牌桶过滤器;

        –limit rate[/second|/minute|/hour|/day](速率)

        –limit-burst number(定义桶最大收集多少个令牌)

            防火墙之iptables使用

     7state扩展(在并发访问量很大时,不建议开启此功能)

         state模块是contract模块的子集:根据”连接追踪机制“去检查连接的状态;

         conntrack机制:追踪本机上的请求和响应之间的关系;状态有如下几种:

               NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此, 将其识别为第一次发出的请求;

               ESTABLISHEDNEW状态之后,连接追踪模板中为其建立的条目失效之前 期间内所进行的通信状态;(established)

               RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关 系

               INVALID:无效的连接;

               UNTRACKED:未进行追踪的连接;

             防火墙之iptables使用

三、iptables之forward配置

       

         防火墙之iptables使用

       1、 客户端配置

             1)配置网络桥接模式 ip 172.16.254.187

             2)设置默认路由

                  route add default gw 172.16.251.210

             3ping测试

                  防火墙之iptables使用 

                  172.16.251.210 ping

                  防火墙之iptables使用

                  192.168.70.139 ping

                  防火墙之iptables使用

                  192.168.70.138 不通

         2、 web服务器配置

                 1)配置网络为仅主机模式 ip192.168.70.138

                 2)添加默认路由

                       route add default gw 192.168.70.139

                 3)测试

                      防火墙之iptables使用  

                      192.168.70.139

                      防火墙之iptables使用

                      172.16.251.210

                      防火墙之iptables使用

                      172.16.254.187 不通

                  4)配置httpd服务

                       安装服务

                       修改主页面 vim /var/www/html/index.html

                       启动服务

                       防火墙之iptables使用 

         3、 iptables服务器配置

                       echo 1 >/proc/sys/net/ipv4/ip_forward (开启内核转发功能)

                      测试:

                        172.16.254.178(客户端)主机

                         防火墙之iptables使用

                         

                       192.168.70.138web服务器)主机

                         防火墙之iptables使用

                         

               书写规则链

                        防火墙之iptables使用

         4、测试

                          防火墙之iptables使用

                          能正常访问web服务器

四、iptables之地址装换法则

      1、NAT:网络地址装换。分为源地址转换和目标地址装换

          SNAT:修改IP报文中的源IP地址,让本地网络中的主机刻使用同一地址与外部主机通信,从而实现伪装地址

          DNAT:修改IP报文的目的地址,让本地网络中的服务器使用统一的地址想歪提供服,但是隐藏自己的真实的地址。

          PNAT:端口转换,一般与DNAT结合王城目标地址和端口的转换

      2、SNAT的实现

           防火墙之iptables使用

        要求:隐藏客户端地址

           客户端配置

              1)配置网络桥接模式 ip 172.16.254.187

              2)设置默认路由

                  route add default gw 172.16.251.210

              3ping测试

                  防火墙之iptables使用 

                  172.16.251.210 ping

                  防火墙之iptables使用

                  192.168.70.139 ping

                  防火墙之iptables使用

                  192.168.70.138 不通

               web服务器配置

                 1)配置网络为仅主机模式 ip192.168.70.138

                 2)添加默认路由

                       route add default gw 192.168.70.139

                 3)测试

                      防火墙之iptables使用  

                      192.168.70.139

                      防火墙之iptables使用

                      172.16.251.210

                      防火墙之iptables使用

                      172.16.254.187 不通

                  4)配置httpd服务

                       安装服务

                       修改主页面 vim /var/www/html/index.html

                       启动服务

                       防火墙之iptables使用 

                iptables服务器配置

                       echo 1 >/proc/sys/net/ipv4/ip_forward (开启内核转发功能)

                      测试:

                        172.16.254.178(客户端)主机

                         防火墙之iptables使用

                         

                       192.168.70.138web服务器)主机

                         防火墙之iptables使用

                         

                   1)配置iptables规则

                        隐藏客户端主机的IP地址为(192.168.70.139)   

                         防火墙之iptables使用   

                  2) 测试

                    在客户端抓包

                     客户端访问web服务器

                      curl http://192.168.70.138

                        防火墙之iptables使用          

                       防火墙之iptables使用     

                      看到:在客户端显示:  172.16.254.187发出请求

                                            192.168.70.138响应请求

                     iptables服务器抓包

                          防火墙之iptables使用

                         防火墙之iptables使用

                       抓包ens37192.168.70.139

               看到发出请求报文的是 192.168.70.139而不是   172.16.254.187

 

                web服务器上抓包

                      防火墙之iptables使用    

                     看到发出请求报文的是 192.168.70.139而不是   172.16.254.187

              这样就可以隐藏客户端地址了

     3、DNAT配置

           防火墙之iptables使用

         要求:隐藏web服务端地址

            客户端配置

             1)配置网络桥接模式 ip 172.16.254.187

             2)设置默认路由

                  route add default gw 172.16.251.210

             3ping测试

                   防火墙之iptables使用 

                  172.16.251.210 ping

                   防火墙之iptables使用

                  192.168.70.139 ping

                  防火墙之iptables使用

                   192.168.70.138 不通

               web服务器配置

                  web服务器的地址隐藏为172.16.251.210                  

                 1)配置网络为仅主机模式 ip192.168.70.138

                 2)添加默认路由

                       route add default gw 192.168.70.139

                 3)测试

                      防火墙之iptables使用  

                      192.168.70.139

                      防火墙之iptables使用

                      172.16.251.210

                      防火墙之iptables使用

                      172.16.254.187 不通

                  4)配置httpd服务

                       安装服务

                       修改主页面 vim /var/www/html/index.html

                       启动服务

                       防火墙之iptables使用 

                  iptables服务器配置

                       echo 1 >/proc/sys/net/ipv4/ip_forward (开启转发功能)

                      测试:

                        172.16.254.178(客户端)主机

                         防火墙之iptables使用

                         

                       192.168.70.138web服务器)主机

                         防火墙之iptables使用

                         

                   1)配置iptables规则

                        防火墙之iptables使用

                   2)测试

                       客户端测试

                       防火墙之iptables使用

                      防火墙之iptables使用

                 可以看到客户端发出的请求报文给172.16.251.210

                     iptables服务器上抓包

                      防火墙之iptables使用

                    可以看到客户端发出的请求报文给自己了

              在web服务器上抓包

                     防火墙之iptables使用

                    可以看到客户端给自己发的请求报文   

     4、在DNAT配置的基础上扩展实现端口隐藏(PNAT)

           现在web服务器上把web服务的端口改为8080

                     防火墙之iptables使用

            重启服务

         1)在iptables服务器上做规则

            iptables -t nat -A PREROUTING -d 172.16.251.210 -p tcp –dport 80 -j DNAT –to-destination 192.168.70.139:8080

                    防火墙之iptables使用

         2)抓包测试

                   防火墙之iptables使用

             在客户端测试     

                  防火墙之iptables使用

                 客户端显示我们访问的是172.16.251.21080端口     

             iptables测试

                 内网网卡(ens33

                 防火墙之iptables使用

                内网网卡显示我们访问的是172.16.251.21080端口     

          外网网卡(ens37

                 防火墙之iptables使用

                外网网卡显示我们访问的是192.168.70.1388080端口

          web服务器测试

                防火墙之iptables使用

              外网网卡显示我们访问的是192.168.70.1388080端口

         通过各个点的测试表明了 隐藏了服务器的端口,PNAT配置成功


原创文章,作者:zq,如若转载,请注明出处:http://www.178linux.com/78169

(0)
zqzq
上一篇 2017-06-18
下一篇 2017-06-18

相关推荐

  • 自建回收站

    linux 自添加回收站 (1)建立一个回收站目录 mkdir /tmp/trash_tmp (2) 编辑一个文件 vi /bin/trash mv $@ /tmp/trash_tmp :wq 保存退出 (3)添加别名 alias rm=/bin/trash (4)编辑/etc/bashrc 在最后一行添加alias rm=/bin/trash (5)给予目…

    Linux干货 2017-09-04
  • M20-1 8月3号 –权限、用户和组的管理

    一、权限管理:            ls -l                  rwxrwxrwx:               &nb…

    Linux干货 2016-08-08
  • ACL

    acl 权限的理解

    Linux干货 2018-03-19
  • 马哥教育网络班22期+第3周课程练习

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。    [test2@localhost ~]$ who |cut -d " " -f1|sort -u   &nbsp…

    Linux干货 2016-08-30
  • 由Linux中一个小问题引发的思考

    一、一个小问题 1、在学习Linux中我们经常会遇到很多有趣的小问题,今天笔者就遇到了一个很有意思的小问题,现在分享给大家:      “如何在本机字符终端登陆时,除显示原有信息外,再显示当前终端号,时间和主机名?” 2、实现方法如下:      输入vim /etc/…

    2017-07-16
  • MySQL慢日志监控脚本实例剖析

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1577326        公司线上的 MySQL 慢日志,之前一直没有做好监控。趁着上周空闲,我就把监控脚本写了下,…

    Linux干货 2016-08-15