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

相关推荐

  • 创建CA证书

    创建CA证书 CA证书         CA 也拥有一个证书(内含公钥和私钥)。网上的公众用户通过验证 CA 的签字从而信任 CA ,任何人都可以得到 CA 的证书(含公钥),用以验证它所签发的证书。       &nb…

    Linux干货 2017-07-23
  • SHELL中的变量

    SHELL中的变量            运行SHELL脚本中的单个命令自然有用,但这有其自身的限制。通常你会需要在SHELL命令使用其他数据来处理信息。这可以通过变量来实现。变量允许你临时性地将信息存储在SHELL脚本中,以便和脚本中的其他命令一起使用。 1 环境变量…

    Linux干货 2017-04-16
  • 重要开源协议解析(BSD,Apache,GPL,LGPL) 整理

    现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议详见其网站(http://www.opensource.org/licenses/alphabetical)。我们在常见的开源协议如BSD, GPL, LGPL等都是OSI批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。 这里整理了四种最常用的…

    Linux干货 2016-07-22
  • fstab配置文件、swap分区,文件关联

    fstab配置文件、swap分区,文件关联,lvm 挂载点和/etc/fstab  配置文件系统体系  被mount、 fsck和其它程序使用  系统重启时保留文件系统体系  可以在设备栏使用文件系统卷标  使用mount -a 命令挂载/etc/fstab中的所有文件…

    Linux干货 2016-09-01
  • Linux初认识

    1、计算机的五大部件 CUP: CUP中包含了两大部件分别是运算器、控制器。其中运算器主要是进行数学运算、逻辑运算等各种运算的。除了两大部件以外CUP内部还有寄存器、缓存,它们是提升CUP性能的辅助性工具。 存储器: 内存RAM(Random Access Memory)。 输入设备Input: 输入设备用来下指令,提供数据等。输入设备有键盘,鼠标,麦克风等…

    Linux干货 2017-07-09
  • linux的发展与入门

    1,计算机的组成和功能如下: CPU:是由运算器(是用来对数据进行数据运算和逻辑运算), 控制器(是用来对总线的控制,内存寻址的控制,以及对读,写访问的控制), 寄存器和缓存器(都是用来暂存数据的。) 存储器:内存RAM(随机接入存储器)和硬盘:都是用来存储数据的。 输入设备:用来输入需要处理的数据和指令。 输出设备:是用来显示加工过的数据。 2,LINUX…

    Linux干货 2017-07-03