linux下的防火墙(iptables / netfilter)--我的学习记录

什么是防火墙?

    工作于主机或网络的边缘,对于进出的报文根据事先定义的规则作检查,将那些能够被规则所匹配到的报文作出相应处理的组件。


centos6.6上的防火墙组件:

    netfilter:过滤器,内核中工作在tcp/ip网络协议栈上的框架


    iptables:过滤规则的编写工具,定义的规则通过内核接口直接送至内核,立即生效,但不会永久有效;果期望有永久有效,需要保存至配置文件中,此文件还开机时加载和由用户手工加载;iptables可以自动实现规则语法检查。


netfilter在TCP/IP协议栈上定义了5个卡点(钩子函数)来控制报文:

    

 hooks function(钩子函数): 

     prerouting: 进入本机后路由功能发生之前

     input:到达本机内部

     output: 由本机发出

     forward: 由本机转发

     postrouting:路由功能发生之后,即将离开本机之前


    根据报文的分类,要经过的卡点如下:

    到本机内部:prerouting,input
    由本机发出:output,postrouting
    由本机转发:prerouting,forward,postrouting


功能表:

    过滤功能:filter表

            卡点:input ,forward,output

    

    修改功能:net表:修改报文的源地址和目标地址。

            卡点:prerouting,output,postrouting

            mangle表:修改报文IP,TCP报文首部的某些信息。

            卡点:prerouting,postrouting,input,output,forward

    

    追踪功能:raw表

            卡点:prerouting,output


    优先级(由高到低):raw --> mangle --> nat --> filter(最常用)



基本格式:

    iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

        -t TABLE:

            默认为filter, 共有filter, nat, mangle, raw四个可用;


SUBCOMMAND(子命令):

    技术分享技术分享技术分享

CRETERIA: 匹配条件

技术分享

扩展匹配:

    隐式扩展:如果在通用匹配上使用-p选项指明了协议的话,则使用-m选项指明对其协议的扩展就变得可有可无了;    

        tcp: 

             --dport PORT[-PORT]

             --sport

             --tcp-flags LIST1 LIST2

                 LIST1: 要检查的标志位;

                 LIST2:在LIST1中出现过的,且必须为1标记位;而余下的则必须为0; 

                  例如:--tcp-flags syn,ack,fin,rst syn

                  --syn:用于匹配tcp会话三次握手的第一次;

         udp:

              --sport

              --dport

         icmp:

              --icmp-types

                  8: echo request

                  0:echo reply

    显式扩展:必须指明使用的扩展机制;

         -m 模块名称(每个模块会引入新的匹配机制);

        

         想知道有哪些模块可用:

         rpm -ql iptables

        小写字母,以.so结尾;


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

     专用选项:

         --source-ports, --sports PORT[,PORT,...]

         --destination-ports, --dports PORT[,PORT,...]

         --ports PORT[,PORT,...]

    

     例子:

     iptables -I INPUT 1 -d 172.16.100.11 -p tcp -m multiport --dports 22,80,443 -j ACCEPT

     iptables -I OUTPUT 1 -s 172.16.100.11 -p tcp -m multiport --sports 22,80,443 -j ACCEPT


    iprange扩展:指定连续的ip地址范围;在匹配非整个网络地址时使用;


     专用选项:

         [!] --src-range IP[-IP]

         [!] --dst-range IP[-IP]


     示例:

     iptables -A INPUT -d 172.16.100.11 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

     iptables -A OUTPUT -s 172.16.100.11 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT


    string扩展:检查报文中出现的字符串,与给定的字符串作匹配;

     专用选项:

         --algo {kmp|bm}    :两种字符串匹配算法

         --string "STRING"

         --hex-string "HEX_STRING":HEX_STRING为编码成16进制格式的字串;

     示例:

     iptables -I OUTPUT 1 -s 172.16.100.11 -p tcp --sport 80 -m string --string "sex" --algo kmp -j REJECT


    time扩展:基于时间区间做访问控制

     专用选项:

         --datestart YYYY[-MM][-DD][hh[:mm[:ss]]]  :开始日期

         --dattestop :停止日期

         --timestart:开始时间

         --timestop:停止时间

         --weekdays DAY1[,DAY2,...]:控制每周的周几

     示例:

     # iptables -R INPUT 1 -d 172.16.100.11 -p tcp --dport 80 -m time --timestart 08:30 --timestop 18:30 --weekdays Mon,Tue,Thu,Fri -j REJECT


    connlimit扩展:基于连接数作限制;对每个IP能够发起的并发连接数作限制;

     专用选项:

          --connlimit-above [n]

     示例:

     # iptables -I INPUT 2 -d 172.16.100.11 -p tcp --dport 22 -m connlimit --connlimit-above 5 -j REJECT


    limit扩展:基于发包速率作限制;

     专用选项:令牌桶算法

         --limit  n[/second|/minit|/hour|/day]

         --limit-burst n

     示例:        

     iptables -R INPUT 3 -d 172.16.100.11 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT


TARGET:

     -j: jump,跳转目标

         内置目标:

              ACCEPT:接受

              DROP:丢弃

              REJECT:拒绝    

              自定义链:

    

    未完。。。。。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。