一、防火墙概念

    防火墙,分为硬件的或者软件的防火墙两种。无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘。而我们的任务就是需要去定义到底防火墙如何工作,这就是防火墙的策略,规则,以达到让它对出入网络的IP、数据进行检测。 

二、iptables 和netfilter

 

1. netfilter

    内核中tcp/ip协议栈必须经过的地方,可以实现读取规则的地方就叫做 netfilter.(网络过滤器)

位置:

  1.内核空间中:从一个网络接口进来,到另一个网络接口去的

    2.数据包从内核流入用户空间的

    3.数据包从用户空间流出的

    4.进入/离开本机的外网接口

    5.进入/离开本机的内网接口

      

2.iptables的工作机制

hook functions 钩子函数

    1.PREROUTING (路由前)

    2.INPUT (数据包流入口)

    3.FORWARD (转发管卡)

    4.OUTPUT(数据包出口)

    5.POSTROUTING(路由后)

报文流向:

    到本机某进程的报文:PREROUTING --> INPUT

    由本转发的报文:PREROUTING --> FORWARD -->POSTROUTING

    由本某进程发出的:OUTPUT --> POSTROUTING 

        

3.防火墙的策略

 

    防火墙策略一般分为两种,一种叫“通”策略,一种叫“堵”策略,通策略,默认门是关着的,必须要定义谁能进。堵策略则是,大门是洞开的,但是你必须有身份认证,否则不能进。所以我们要定义,让进来的进来,让出去的出去,所以通,是要全通,而堵,则是要选择。当我们定义的策略的时候,要分别定义多条功能,其中:定义数据包中允许或者不允许的策略,filter过滤的功能,而定义地址转换的功能的则是nat选项。为了让这些功能交替工作,我们制定出了“表”这个定义,来定义、区分各种不同的工作功能和处理方式。

 

    我们现在用的比较多个功能有4个:

        1.filter 定义允许或者不允许的

        2.nat 定义地址转换的 

     3.mangle功能:修改报文原数据

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

 

优先级次序(由高而低):

    raw -->mangle --> nat --> filter  }

小扩展:

    对于filter来讲一般只能做在3个链上:INPUT ,FORWARD ,OUTPUT

    对于nat来讲一般也只能做在3个链上:PREROUTING ,OUTPUT ,POSTROUTING

    而mangle则是5个链都可以做:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

 

    iptables/netfilter(这款软件)是工作在用户空间的,它可以让规则进行生效的,本身不是一种服务,而且规则是立即生效的。而我们iptables现在被做成了一个服务,可以进行启动,停止的。启动,则将规则直接生效,停止,则将规则撤销。 

    iptables还支持自己定义链。但是自己定义的链,必须是跟某种特定的链关联起来的。在一个关卡设定,指定当有数据的时候专门去找某个特定的链来处理,当那个链处理完之后,再返回。接着在特定的链中继续检查。

 

注意:规则的次序非常关键,谁的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。

 

三.规则的写法:

 

     iptables定义规则的方式比较复杂:

     格式:iptables [-t table] COMMAND chainCRETIRIA -j ACTION

         -ttable :filter nat mangle raw

         COMMAND:定义如何对规则进行管理

         chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的

         CRETIRIA:指定匹配标准

         -jACTION :指定如何进行处理

 

     比如:不允许172.16.0.0/24的进行访问。

     iptables-t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP

     当然你如果想拒绝的更彻底:

     iptables-t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT

 

     iptables-L -n -v(-nvL)   #查看定义规则的详细信息

 

四:详解COMMAND:

 

1.链管理命令(这都是立即生效的)

    -P:policy,策略,定义默认策略; 一般有两种选择,ACCEPT和DROP

        例如:iptables -P INPUT DROP

    -N:new,新建一条自定义的规则链;被内建链上的规则调用才能生效;[-j  chain_name];

    -X:drop,删除自定义的引用计数为0的空链;

    -F:flush,清空指定的链

 

2.规则管理命令

         -A:追加,在当前链的最后新增一个规则

         -I num : 插入,把当前规则插入为第几条。

            -I 3 :插入为第三条

         -R num:Replays替换/修改第几条规则

            格式:iptables -R 3 …………

         -D num:删除,明确指定删除第几条规则

        

3.查看管理命令 “-L”

     iptables-vnL

 

五:详解匹配标准

 

1.通用匹配:源地址目标地址的匹配

     -s:指定作为源地址匹配,这里不能指定主机名称,必须是IP

        IP | IP/MASK| 0.0.0.0/0.0.0.0

        而且地址可以取反,加一个“!”表示除了哪个IP之外

     -d:表示匹配目标地址

     -p:用于匹配协议的(这里的协议通常有3种,TCP/UDP/ICMP)

     -i eth0:从这块网卡流入的数据

        流入一般用在INPUT和PREROUTING上

     -o eth0:从这块网卡流出的数据

        流出一般在OUTPUT和POSTROUTING上

        

2.扩展匹配

2.1隐含扩展:对协议的扩展

   -s|-d xxxx 

     -p tcp|udp --syn|--sport|--dport 21-23

     -p icmp --icmp-type 0|8(设置一下自己能ping通别人,别人ping不通自己)

     -i/o eth1

    以上都支持取反

                 

2.2显式扩展(-m)

     扩展各种模块

      -m multiport:表示启用多端口扩展

      之后我们就可以启用比如 --dports 21,23,80

                 

        

六:详解-j ACTION

     DROP:悄悄丢弃

      REJECT:明示拒绝

     ACCEPT:接受