1.1 iptables

 
    iptables和Netfilter之间的区别:后者提供了一个框架,前者是在这个框架上面建立了防火墙功能。
 
    Netfilter本身并不对数据包进行过滤--它只是允许可以对数据包进行过滤的函数挂接到内核中核实的位置,还在内核中提供了一些基础设施,如链接跟踪和日志记录,任何iptables策略都可以使用这些设施来执行特定的数据包处理(我们把Netiptables日志记录子系统产生的日志信息称为iptables日志信息,毕竟只有当数据包首先匹配一个由iptables构建的LOG规则时,该数据包信息被记录)
 
 1.2 使用iptables进行包过滤
 
    iptables有5个链:PEROUTING,INPUT,FORWORD,OUTPUT,POSTROUTING
              4张表:raw,mangle,nat,filter(优先级也为这个顺序)
 
    PEROUTING链是数据包进入防火墙后,路由判断前改变数据包
    POSTROUTING链是在所有路由判断之后,改变数据包
    OUTPUT链在确定包的目的之前改变数据包
    INPUT链在包被路由到本地后,但在用户的空间程序看到之前改变数据包
    FORWARD链在最初的路由判断之后,最后一次更改包的目的之前mangle数据包
 
    举个例子,INPUT链上既有raw表,也有nat表,那么先有raw表处理,然后由nat表处理。
    A:raw表只使用在PEROUTING链和OUTPUT链,因为优先级最高,因而可以对收到的数据包在链接跟踪前进行处理。一旦用户使用raw表在某个链上,raw表处理完后,将跳过NAT表和ip_conntrack处理,即不再对地址转换和数据包的链接跟踪处理,raw表可以用在那些不需要做nat的情况下,以提高性能,如大量访问的web服务器,可以让80端口不再让iptables做数据包的链接跟踪处理,以提高用户的访问速度,执行如下指令即可

iptables -t raw -A PREROUTING -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -p tcp --sport 80 -j NOTRACK

iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT
 
    B:mangle表,我们可以改变不同的包以及包头的内容,比如TTL,TOS或MARK,注意:MARK并没有真正的改变数据包,它只是在内核空间中为包设定一个标记,防火墙内其他规则或程序可以使用这种标记对包进行过滤或高级路由。注意:mangle表不做任何NAT,它只是改变数据包的TTL,TOS或MARK,而不是源目的地址,不常用,主要用来打标记,且用于本地
    
    iptables和链接跟踪:
    iptables包括一个模块,它允许管理员使用“链接跟踪(connection tracking)”方法来检查和限制到内部网络中可用服务的链接,链接跟踪把所有的链接都保存在一张表格内,它令管理员能够根据以下链接状态来允许或拒绝链接:
    NEW:        请求新连接的分组
    ESTABLISHED:属于当前连接的一部分的分组
    RELATED:    请求新连接的分组,但他也是当前连接的一部分
    INVALID:    不属于连接跟踪表内任何连接的分组
 
 1.2.1 匹配
   
    只有当数据包满足所有匹配的条件时,iptables才能根据由该规则的目标所指定的动作,来处理这些数据包
 
    -s 匹配源IP地址或网络
    -d 匹配目标IP地址或网络
    -p 匹配IP协议
    -i 流入接口
    -o 流出接口
    --state 匹配一组连接状态
    --string 匹配应用层数据字节序列
    --comment 在一个内核内存中为一个规则关联多达256个字节的注释数据
 
1.2.2 目标
    
    iptables支持一组目标,他们用于数据包匹配一条规则时触发一个动作。常见的重要目标:
    ACCEPT:允许数据包通过
    DROP:  丢弃数据包,不对该数据包做进一步处理
    LOG:   将数据包信息记录到syslog
    REJECT:丢弃数据包,同时发送适当的响应报文
    RETURN:在调用链中继续处理数据包
 
 1.3 iptables的安装
 
    尽管许多linux发行版自带的预编译内核已经将iptables编译进去,但默认的内核配置却试图保持精简,所以并不是所有的Netfilter子系统都被启用,因此了解重新编译内核的过程是非常重要的。 
    建立一个可以作为iptables防火墙的linux系统所需的最重要的步骤是正确的配置和编译linux内核,iptables中所有繁重的网络处理和匹配工作都发生在内核,下载并解压内核软件包:
wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.1.1.tar.bz2