防火墙之iptables使用

一、防火墙简介   

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

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

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

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

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

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

       iptables的基本认识:

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

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

       iptables的组成:

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

          1、四表:

               filter:过滤,防火墙;

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

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

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

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

           2、五链:

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

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

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

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

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

           3、表与链的关系         

                raw:PREROUTING, OUTPUT

                mangle:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

                nat:PREROUTING,[INPUT,]OUTPUT,POSTROUTING(在centos6上没有INPUT)

                filter:INPUT,FORWARD,OUTPUT

                功能生效先后次序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、链管理:

             PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING 

            -N:new, 自定义一条新的规则链;

                 防火墙之iptables使用

            -X: delete,删除自定义的规则链;

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

                         用户自定义的

                         空的

                         引用计数为0的

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

                 防火墙之iptables使用  

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

                 ACCEPT:接受(内建)

                 DROP:丢弃(内建)

                 REJECT:拒绝(扩展)

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

        3、规则管理:

             -A:append,追加;

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

                  防火墙之iptables使用

            -D:delete,删除;

                  防火墙之iptables使用

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

                  防火墙之iptables使用

            -F:flush,清空指定的规则链;

                 防火墙之iptables使用

            -Z:zero,置零;

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

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

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

         4、查看:

             -L:list, 列出指定鏈上的所有规则;(必须写在后面)

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

             -v:verbose,详细信息;

                  -vv, -vvv

            -x:exactly,显示计数器结果的精确值;

            –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-request:8 (回显请求)

                                          echo-reply:0     (回显响应)

                                   防火墙之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使用         

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

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

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

               防火墙之iptables使用

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

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

                   bm:Boyer-Moore

                   kmp:Knuth-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使用

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

        令牌桶过滤器;

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

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

            防火墙之iptables使用

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

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

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

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

               ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前 期间内所进行的通信状态;(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

             (3)ping测试

                  防火墙之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.138(web服务器)主机

                         防火墙之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

              (3)ping测试

                  防火墙之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.138(web服务器)主机

                         防火墙之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使用

                       抓包ens37(192.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

             (3)ping测试

                   防火墙之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.138(web服务器)主机

                         防火墙之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.210的80端口     

             iptables测试

                 内网网卡(ens33)

                 防火墙之iptables使用

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

          外网网卡(ens37)

                 防火墙之iptables使用

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

          web服务器测试

                防火墙之iptables使用

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

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


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

赞 (0)
zqzq
上一篇 2017-06-18 19:04
下一篇 2017-06-18 22:23

相关推荐

  • 第二周博客作业

    1、Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 文件管理类命令:cp,mv,rm 常用的使用方法: cp命令: 单源复制: cp [OPTION]…[-T] SOURCE DEST 多源复制: cp [OPTION]… SOURCE …DIRECTORY cp [OPTION]… …

    Linux干货 2017-02-06
  • CentOS 系统启动流程

    CentOS 系统启动流程 一、Linux系统的组成部分:内核+根文件系统 1.内核: 进程管理:进程之间的通信为:IPC(Inter Process Communication)机制,有消息队列、semerphor、shm、socket(跨主机之间的通信) 内存管理; 网络管理; 文件系统; 驱动程序; 安全功能; 2.运行中的系统环境可分为两层:内核空间…

    Linux干货 2016-09-13
  • 简明 Vim 练级攻略

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的。下面的文章翻译自《Learn Vim Progressively》,我觉得这是给新手最好的VIM的升级教程了,没有列举所有的命令,只是列举了那些最有用的命令。非常不错。 ——————————正文开始—————————— …

    Linux干货 2015-04-04
  • Linux破解root口令

    Centos5、6版本破解口令方法 1 启动系统 2 在操作系统选择菜单界面选中要启动的内核 — 按a键 3 在行尾输入 1(或s或S或single)— 按回车键 4 使用passwd命令修改口令即可   Centos7版本破解口令方法 方法1 1 启动系统 2 在操作系统选择菜单界面选中要启动的内核 — 按e键…

    Linux干货 2018-01-08
  • mysql—MHA原理与实现

    MHA 一:简述MHA 1.1关于MHA MHA(Master HA)是一款开源的MySQL的高可用程序,它为MySQL主从复制架构提供了automating master failover 功能。MHA在监控到master节点故障时,会提升其中拥有最新数据的slave节点成为新的master节点,在此期间,MHA会通过与其它从节点获取额外信息来避免一致性方…

    2016-11-27
  • yum函数介绍以及自建yum仓库

    一、前言     在之前介绍了yum的配置(详细请移步 http://www.178linux.com/archives/6445)。但是有没有发现一个问题,虽然我们已将仓库指向一个可用的仓库服务器,但是随着Linux的不断升级和改版,我们是否还需要不断的去修改仓库的配置文件,如果只有一台还好,那如果我们有多…

    Linux干货 2015-07-24