Iptables基础

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

  防火墙可分为:硬件防火墙,在硬件级别实现部分功能的防火墙;软件防火墙,应用软件处理逻辑运行于通用硬件平台之上的防火墙;主机防火墙,服务范围为当前主机;网络防火墙,服务范围为局域网。

   在设置防火墙时建议设置白名单,这样要更加稳妥。

iptables的组成,四表五链:

    功能()

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

      mangle:拆解报文,做出修改,并重新封装;

      natnetwork address
translation
,用于修改源IP或目标IP,也可以修改端口;

      filter:过滤,防火墙;

    Chain

      PREROUTINGINPUT、FORWARDOUTPUT、POSTROUTING

    功能–链:

      rawPREROUTINGOUTPUT

      manglePREROUTINGINPUT、FORWARDOUTPUT、POSTROUTING

      natPREROUTINGOUTPUTPOSTROUTING

      filterINPUTFORWARDOUTPUT

报文流向

    流入本机:PREROUTING–>INPUT

    由本机流出:OUTPUT–>POSTROUTING

    转发:PREROUTING–>FORWARD–>POSTROUTING

Iptables基础

      

规则

   组成部分根据规则匹配条件来尝试匹配报文,一旦匹配成功,就由规则定义的处理动作做出处理;

  查看规则

    iptables -L list,列出指定链上的所有规则;

          –line-numbers:显示规则在当前链上的序号;

    注意:下边的是选项用来修饰命令的放在前边

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

          -vverbose,详细信息;pkts包数量 bytes字节数

           -vv, -vvv

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

    查看某个特定的链后边直接加上链名即可:iptables -vnL INPUT

定义规则的格式

    iptables [-t
table] COMMAND chain [-m matchname [per-match-options]] –j targetname [per-target-options]

       [-t table]默认是filter

    COMMAND

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

        -Xdelet,删除自定义的规则链;注意:若是有引用、规则、不是自定义链的都删不掉;

        -Ppolicy,设置默认策略;对于filter表中的链而言,默认的策略有:ACCEPT:接受DROP:丢弃;REJECT:拒绝,立即回应;

        -E:重新命名自定义链;引用记数不为0的自定义链不能够重命名。

        规则管理:

           -Aappend,追加;

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

           -Ddelete,删除;

              (1)指明规则序号;

              (2)指明规则本身;

           -Rreplace,替换指定链上的指定规则,要替换整个规则本身;

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

           -Zzero,置零;后加上指定置零的链,不加默认为将指定表上的链的规则全部置零

匹配条件:

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

       -s:源地址;

       -d:目标地址;

       -p:协议tcp,udp,udplite,icmp,icmpv6,esp,ah,sctp,mh or “all”

       -i,–in-interface name(网卡名):数据报文流入的接口;只能应用于数据报文流入的环节,只能应用于PREROUTINGINPUTFORWARD链;

       -o–out-interface name(网卡名):数据报文流出的接口;只能应用于数据报文流出的环节,只能应用于FORWARDOUTPUTPOSTROUTING

       

    扩展匹配条件:需要加载扩展模块,方可生效;

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

        tcp

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

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

         –tcp-flags  mask  comp

             mask是我们应该检查的flag,写成逗号分隔的列表: SYN,ACK,FIN,RST

            comp是以逗号分隔的必须设置的标志列表 :SYN

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

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

       udp

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

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

                               

       icmp ping)用来探测网络通信的

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

               echo-request8

               echo-reply0

eg:

    允许其他主机ping通本机

     iptables -A INPUT -d 172.16.250.31 -p icmp -j ACCEPT

     iptables -A OUTPUT -s 172.16.250.31 -p icmp -j ACCEPT

    允许自己ping别人而别人无法ping自己

    iptables -I OUTPUT 2 -s 172.16.250.31 -p tcp icmp –icmp-type 8 -j ACCEPT

    iptables -I INPUT 2 -s 172.16.250.31 -p tcp icmp –icmp-type 0 -j ACCEPT

                        

    显式扩展:必须要手动加载扩展模块, [-m matchname [per-match-options]]

          1multiport扩展,以离散或连续的方式定义多端口匹配条件;最多指定15个端口;

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

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

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

 egiptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp -m multiport –dports 22,80 -j ACCEPT

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

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

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

eg iptables -A INPUT -d 172.16.100.67 -p tcp –dport 80 -m iprange –src-range 172.16.100.5-172.16.100.10 -j DROP

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

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

                bmBoyer-Moore

                kmpKnuth-Pratt-Morris

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

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

    eg iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp –sport 80 -m string –algo bm –string “gay” -j REJECT

        4time扩展,根据将报文到达的时间与指定的时间范围进行匹配;

            –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

    eg iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp –dport 80 -m time –timestart 14:30 –timestop 18:30 –weekdays Sat,Sun –kerneltz -j DROP

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

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

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

    egiptables -A INPUT -d 172.16.100.67 -p tcp –dport 21 -m connlimit –connlimit-above 2 -j REJECT

       6limit扩展,基于收发报文的速率做限制;

          令牌桶过滤器;

           –limit rate[/second|/minute|/hour|/day]

           –limit-burst number 最多能有多少报文

    eg iptables -I INPUT -d 172.16.100.67 -p icmp –icmp-type 8 -m limit –limit 3/minute –limit-burst 5 -j ACCEPT

       iptables -I INPUT 2 -p icmp -j REJECT

    限制本机某tcp服务接收新请求的速率:–syn -m limit

       7state扩展,根据”连接追踪机制“去检查连接的状态;

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

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

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

           RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;要想开放ftp功能需要手动装载 nf_conntrack_ftp

           INVALID:无效的连接;

           UNTRACKED:未进行追踪的连接;

               –state STATE

eg

    iptables -A INPUT -d 172.16.100.67 -p tcp -m multiport –dports 22:23,80,139,445,3306 -m state –state NEW -j ACCEPT

iptables -A INPUT -d 172.16.100.67 -m state –state ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 172.16.100.67 -m state –state ESTABLISHED -j ACCEPT

iptables -A INPUT -d 172.16.100.67 -j REJECT

iptables -A OUTPUT -s 172.16.100.67 -j REJECT

这一套下来,将IP地址为172.16.100.67的主机的基于tcp22,23,80,139,4453306端口开放,其他主机都可以访问,而其他未开放的端口无法访问。

 

这里对于规则优化提出一些建议

    服务器端规则设定:任何不允许的访问,应该在请求到达时给予拒绝;

    (1)优先放行双方向状态为ESTABLSHED的报文

    (2)服务于不同类别的功能的规则,匹配到报文可能性更大的放前面

    (3)服务于同一类别的功能的规则,匹配条件较严格的放在前面

    (4)设置默认策略:白名单机制

      aiptables -P,不建议;

      b)建议在规则的最后定义规则作为默认策略

处理动作:

   -j targetname [per-target-options]

      ACCEPT

      DROP

      REJECT

      RETURN:返回调用链;

      REDIRECT:端口重定向;

      LOG:记录日志;

      MARK:做防火墙标记;

      DNAT:目标地址转换;

      SNAT:源地址转换;

      MASQUERADE:地址伪装;

                             

 

   添加规则时要考虑:1、实现哪种功能:判断添加到那个表上;

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

     链上的规则次序,即为检查的顺序,要注意:

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

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

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

            4、设置默认策略。

    规则读取优先级:由上到下,所以编写规则先小范围再大范围

eg1

            设置白名单,将所有的链置为DROP

   允许172.16.网段的ip地址以tcp协议的服务访问本机(能够放行ssh服务,注意在做测试时先放行自己的ssh服务)

iptables -A INPUT -s 172.16.0.0/16 -d 172.16.250.31 -p tcp -j ACCEPT

iptables -A OUTPUT -s 172.16.250.31 -d 172.16.0.0/16 -p tcp -j ACCEPT

(为防止不小心清空规则后,无法通过ssh连接主机)

之后可以设置:iptables -P INPUT DROP

 iptables -P OUTPUT DROP

 iptables -P FORWARD DROP

 将其他规则都设置为DROP(默认规则是ACCEPT

eg2

加入一条只开放ssh服务的规则

iptables I INPUT -s 172.16.0.0/16 -d 172.16.250.31 -p tcp –dport 22 -j ACCEPT

iptables I OUTPUT -s 172.16.250.31 -d 172.16.0.0/16 -p tcp –sport 22 -j ACCEPT

加入上一条规则后,可以加入 :iptables -A INPUT -d 172.16.250.31 -j REHECT

iptables -A OUTPUT -s 172.16.250.31 -j REJECT

或者修改网卡<一般用这个>iptables -A INPUT -i ens33 -j REJECT

iptables -A OUTPUT -i ens33 -j REJECT

因为此规则范围很大,将其放在最后,之后再添加规则要放在其前面)

若是默认规则修改过,则将默认规则修改为:

iptables -P INPUT ACCEPT

iptables -P OUTPUT ACCEPT

规则的用效期限:

    使用iptables命令定义的规则,手动删除之前,其生效期限为kernel存活期限;

保存规则:

    保存规则至指定的文件:

     CentOS 6

       service iptables save

        将规则保存至/etc/sysconfig/iptables文件中;

            iptables-save  >  /PATH/TO/SOME_RULES_FILE

                    

     CentOS 7:

       iptables-save > /PATH/TO/SOME_RULES_FILE

重新载入预存规则文件中规则:

 CentOS 7:          

   iptables-restore < /PATH/FROM/SOME_RULES_FILE

       -n,–notfush:不清除原有规则

     他,-test:仅分析生成规则集,但不提交

 CentOS 6

    service iptables restart

默认重载/etc/sysconfig/iptables文件中的规则

配置文件:/etc/sysconfig/iptables-config

                    

自动生效规则文件中的规则

      (1) 用脚本保存各iptables命令;让此脚本开机后自动运行;

            /etc/rc.d/rc.local文件中添加脚本路径;

               /PATH/TO/SOME_SCRIPT_FILE  

      (2) 用规则文件保存各规则,开机时自动载入此规则文件中的规则;

            /etc/rc.d/rc.local文件添加:

               iptables-restore
< /PATH/FROM/IPTABLES_RULES_FILE

 

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

(0)
Immortals、zcyImmortals、zcy
上一篇 2017-06-19
下一篇 2017-06-19

相关推荐

  • Centos 6 –grub legacy及grub修复

    一、CentOS 6 grub legacy:     1.启动流程:             POST –> Boot Sequence(BIOS) –> Boo…

    Linux干货 2016-09-21
  • 系统基础之权限管理

    权限管理: 概论:  上节,为大家介绍了用户,和组的知识.今天为大家介绍与用户,组息息相关的知识,权限.linux是多用户,多任务的操作系统,面对多人的操作,安全问题就很重要,权限机制就很好的对安全进行防护,避免他人操作自己的文件.下面给大家详细介绍权限.   首先让我们先直观地看下权限,对权限有个最基本的认识.以/etc/issue文件…

    Linux干货 2016-08-04
  • shell脚本4——特殊循环和函数

    循环的特殊用法: 1、while循环的特殊用法之遍历文件的每一行 while read line; do     循环体 done < /PATH/FROM/SOMEFILE 依次读取/PATH/FROM/SOMEFILE文件中的每一行,将每一行赋值给变量line…

    Linux干货 2016-08-21
  • 第8天磁盘管理练习—增加SWAP分区

          SWAP交换空间,指在物理内存不够用时,充当虚拟内存使用。在实际操作中,使用1-2G的一个分区并指定分区类型为SWAP,挂载至SWAP来使用。 一、新增分区 fdisk /dev/sda n     #新增加分区 t   &nb…

    Linux干货 2016-07-04
  • ☞卸载kernel玩一玩

    卸载kernel玩一玩 废话不多说,下面开始卸载内核这一惊险之旅,特别提醒在开始之前做好虚拟机的快照,也许会造成系统无法启动,也许会出现各种错误,也许会笑着删数据库跑路,也许会从入门到放弃,,请系好安全带。  练习 冒泡排序法 #!/bin/bash##Author:jasonmc#Date:2016-08-24#Description:buble…

    Linux干货 2016-08-26
  • Liunx权限的管理

    一、权限 获取某种资源的能力。对于Liunx而言,一切皆文件。所以,对于Liunx的权限定义,也就是定义文件被不同用户访问能力的过程。 权限分为三种:r、w、x 文件 r:查看文件内容 w:修改文件内容 x:可以将文件启动运行 目录 r:可以使用ls命令查看目录中的文件名 w:可以在目录中创建或删除文件(能否删除文件,取决于用户对目录的写权限 x:可以cd到…

    Linux干货 2015-04-03