1.在Linux是使用内核内建的Netfilter这个机制来进行数据包过滤,而Netfilter提供了iptables这个软件来作为防火墙数据包过滤的命令。
2.防火墙的规则,根据数据包的分析资料“比对”预先定义的规则内容,若数据包数据与规则内容相同则进行动作,而不管后续的规则如何,否则就继续下一条规则的比对,直到规则比对完毕,则按照默认规则进行动作。因此防火墙添加的规则顺序十分重要。
在iptables的处理过程中,最好将相关文件写入脚本中。由于linux内核对网络功能也有和很多相关的攻击阻挡机制,这些设置数据主要是放置在/proc/sys/net/ipv4这个目录下,在设置iptables前可先将这些设置启动(也可写入/etc/sysctl.conf中):
    ----写入/etc/sysctl.conf
        net.ipv4.tcp_syncookies = 1
        net.ipv4.icmp_echo_ignore_broadcasts = 1
        net.ipv4.conf.all.rp_filter = 1
        net.ipv4.conf..... = 1(将conf内的所有选项设置成1)
    ----直接启动:
        echo "1">/proc/sys/net/ipv4/tcp_syncookies
        echo "1">/proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
        echo.......(参考附件中鸟哥的iptables.rule)
3.iptables内有多个表格,每个表格都定义出自己的默认策略和规则,且每个表格的用途不相同。
   默认情况下,iptables有至少有三个表格:
   管理本机进出的Filter
   管理后端主机的NAT
   管理特殊标志使用的Managle(较少使用)。
    另外还可以自定义额外的链。
4.表格table与链chain的关系(以下主要对Filter和NAT进行讲解)。
    ----Filter(过滤器):主要跟进出Linux本机的数据包有关,是默认的table:
        INPUT:主要与想要进入Linux本机的数据包有关
        OUPUT:主要与Linux本机所要送出的数据包有关
        FORWORD:与Linux本机没有关系,它可以传递数据包到后端的计算机中,与NAT的table相关性较高。
    ----NAT(网络地址转换):主要用于来源与目的地的IP或port的转换,与Linux本机无关,主要与Linux主机后的局域网计算机有关
        PREROUTING:在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
        POSTROUTING:在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
        OUTPUT:与发送出去的数据包有关
5.iptables规则的处理:
    ----iptables的查看:
        iptables -t nat -L -n
        iptables-save    //能列出完整的防火墙规则,推荐
    ----iptables的清除:
        iptables -t tables-F(清除所要的已制定的规则)
        iptables -t tables -X(清除自定义的chain)
        iptables -t tables -Z(将所要的chain的计数和流量统计归零)
    ----定义默认策略:
        iptables -t [filter/nat] -P [INPUT/OUTPUT/FORWORD] [DROP/ACCEPT]
    ----Filter表规则的添加:
        iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 源IP或源网络] [--sport 源端口范围] [-d 目标IP或网络] [--dport 目标端口范围]
[-m state] [--state 状态] -j [ACCEPT|DROP|REJECT|LOG]
        选项参数说明:
        -A:在链中新增一条规则,放在最后面。
        -I:在链中插入一条规则,放在最前面。
        链名:INPUT/OUT/FORWORD,同时与-io有关
        -i:数据包要进入的网络接口
        -o:数据包所传出的那个网络接口
        -p:主要的数据包格式有:tcp.udp.icmp,all
        -s:来源IP或网络,若规范为“不许”,则加上“!”即可
        -d:目标IP或网络,同-s
        -j:后面接的操作,主要为接受,丢弃(直接丢弃,不通知),拒绝(丢弃,同时通知客户端)及记录(记录在日志/messages中,这是唯一一个能够在规则匹配的情况下,继续往后比对的情况)
        --sport/dport:其格式可以为20,21(20和21端口)或  20:25(20到25端口)
        当-p为icmp时,可以针对其类型进行设置:。。。。。-p icmp --icmp-type 0/3/4/5/8 。。。。。。
        -m:一些iptables的外挂模块,常见的有:state、mac等
        --state:当-m设置成state时,采用此参数来设置数据包的状态:
            INVALID:无效的数据包
            ESTABLISHED:已经成功的连接状态
            NEW:想要新建立连接的数据包状态
            RELATED:这个是最常见的,表示这个数据包是主机发送出去的数据包相关
    ----NAT表的添加:
        ----IP分享器:让-s中的IP伪装成数据包出去(-o)的那款设备上的IP
        echo "1" > /proc/sys/net/ipv4/ip_forward    //让Linux具有route的功能
        iptables -t nat -A POSTROUTING -s 来源IP/网络 -o 网络接口 -j MASQUERADE
        ----直接修改来源数据包的IP
        iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source xxxxxxxx    //可以是固定IP,也可以是一个范围
        ----将外部数据包通过NAT机制传到到内网中的主机上
        iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80  //可以传导到其他ip及其其他端口
        --在本机上面继续port转换,只适用于PREROUTING和OUTPUT链
        iptables -t nat -A PREROUTING -p tcp -dport 80 -j REDIRECT --to-ports 8080   
        ##PREROUTING与DNAT有关,POSTROUTING与SNAT有关

整理自:鸟哥的linux私房菜服务器篇

另外可参看:http://wenku.baidu.com/view/19bca0235901020207409c84.html

附:

防火墙--2--iptables_如何iptables.rule