防火墙:Firewall
      工作在网络或主机的边缘,对进出的数据包根据定义的规则进行检查
并作出相应处理的一套组件;这个组将可能是硬件,也可能是软件,或二者的结合
有网络防火墙;主机防火墙

1、防火墙的类型

包过滤性防火墙:工作在tcp/ip的2,3,4层

应用层网关防火墙:对特定的应用层协议做检查的

2、防火墙的功能:

filter:过滤,拒绝或者放行(与本机有关)
        工作在input,forward,output
nat:地址装换(与后端有关)Network Addess translation
         prerouting output postrouting

mangle:拆开,改改,再合上,表示路由的数据可以改(与标记有关)
         可称为'破坏者'     在五个链上都可工作

raw:在prerouting,output上工作

3、规则链:

INPUT:主要与想要进入linux主机的封包有关
OUTPUT:主要与linux本机所要送出的封包有关
FORWARD:转递封包到后端的计算机中,与nat table相关性较高
PREROUTING:路由前,在进行路由判定之前所要进行的规则
POSTROUTING:路由后,在进行路由判断之后所要进行的规则

4、iptables的使用

  iptables是写规则的工具,可以添加,删除,替换规则等

  使用语法为:
  iptables [-t TABLE] COMMAND(选项) CHAIN [CRETIRIA] -j TARGET

简要说明:

4.1:[-t TABLE] 表是包含仅处理特定类型信息包的规则和链的信息包过滤表。

4.2:COMMAND CHAIN:对链或者链中的规则进行管理操作

链中规则:
    -A : 添加,追加
    -I #:插入第几条
    -R #:替换   或替换某一个规则
    -D #:删-除第几条规则  -D CRETERIA

链管理:
     -N:new新建一个自定义链   
     -E:重命名一条自定义链    
     -P:设定链的默认策略
            eg:iptables -P INPUT ACCEPT|DROP
     -F:flush,清空指定连,如果不指定链,则清空整个表中的所有链
     -X: 删除所有自定义的空链
     -Z:置零,每条规则都有两个计数器:一个是被本规则匹配到的
        所有数据包的个数,另一个是被本规则匹配到的所有数据包的大小之和(即流量)

4.3:匹配条件

指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。

            匹配分为通用匹配和特定于协议的扩展匹配两大类。

    4.3.1:通用匹配:
           -s:源地址
           -d:目标地址

           -p :{icmp|tcp|udp}:对应的协议
           -i in_interface :流入接口
           -o out_interface:流出接口

   4.3.2:扩展匹配:又可分为两种:
           隐含扩展:
               -p tcp
                    --sport PORT[-PORT2]:要么是连续的,要么是单个的
                    --dport PORT[-PORT2]
                    --tcp-flages:标志位 SYN=1 ACK=0 ,RST, SYN,FIN SYN          
               -p udp
                   --sport
                   --dport      
              -p icmp
                   --icmp-type
                     0:echo-reply
                     8:echo-request
     显式扩展:              
常用选项有:            
-m state:用于实现链接的状态检测
                -m:指定的模块;libipt_standard.so
     --state:状态
            NEW:想要新建立联机的封包状态
            ESTABLISHED:已经联机成功的封包状态
            RELATED:这个封包与主机发送出去的封包有关;一个协议用多个链接
            INVALID:无效的封包

-m multiport :规则的合并
    --source-ports:多个port用,分开;源端口有哪些
    --destination-pors:目标端口有哪些
    --ports:无论源与目标都匹配

limit:令牌桶过滤器
-m limit:
      --limit 3/min :后跟速率
      --limit-burst 30:速率峰值;后跟数量
最大连接数限制:
    -m connlimit:
        --connlimit-above n :多余n个拒绝
          多余n个表示满足条件,表示应该不允许,可以取反
ip地址序列:
    -m iprange:
         --src-range ip-ip(开始ip-结束ip)
         --dst-range ip-ip
    -m iprange --src-range 172.16.100.1-172.16.100.10

限定字符串的
    -m string:
          --algo bm|kmp :指定算法
          --string "pattern" :匹配字符串
创建动态ip名单,指定时间内访问多少次;就禁止他在多长时间内不允许访问
     -m recent:最近使用的机制
          --name NAME
          --set
          --rcheck
          --update
          --remove:从列表中释放
          --seconds 禁止多长时间,和--rcheck,--update以前使用
          --hitcount 行为达到多少次归为坏蛋,
时间
-m time
     --datastart
     --datastop
     --timestop
     --timestart
     --weekdays:

实例1:不允许172.16.0.0这台主机ping进来,在INPUT链上做处理:

 

允许任意主机访问172.16.14.1这台主机的22号端口:0.0.0.0要加掩码

-m state用于对链接状态的检查:下面实现允许新建和链接成功的封包进入172.16.14.1;允许链接成功的状态出去:

查看结果:

 

将80和22端口的请求合并为一个:

合并后:

令牌桶过滤器 -m limit的使用:设定从eth0的封包的速率和最大峰值:

查看结果: