iptables防火墙
【无忧天使】
    1、Netfilter/iptables框架简介
    2、iptables基本原理
    通过向防火墙提供有关对来自某个源、到某个目的地或具有特定协议类型的信息包要做些什么的指令,规则控制信息包的过滤。通过使用Netfilter/iptables系统提供的特殊命令iptables,建立这些规则,并将其添加到内核空间的特定信息包过滤表内的链中。关于添加/除去/编辑规则的命令的一般语法如下:
    iptables [-t table] command [match] [target]
    不难看出,一条iptables规则包含如下4个基本元素:
    表
    命令
    匹配
    目标
    1) 表(table)
    [-t table]选项允许使用标准表之外的任何表。表是包含仅处理特定类型信息包的规则和链的信息包过滤表。有三种可用的表选项:filter、nat和mangle。该选项不是必需的,如果未指定,则filter用作默认表。filter表用于一般的信息包过滤,包含INPUT、OUTPUT和FORWAR链。nat表用于要转发的信息包,它包含PREROUTING、OUTPUT和POSTROUTING链。如果信息包及其头内进行了任何更改,则使用mangle表。该表包含一些规则来标记用于高级路由的信息包以及PREROUTING和OUTPUT链。
    2) 命令(command)
    command部分是iptables命令的最重要部分,它告诉iptables命令要做什么,例如,插入规则、将规则添加到链的末尾或删除规则。主要有如表1所示的命令。
    表1 iptables常用命令
命    令 说    明
-A或--append 该命令将一条规则附加到链的末尾
-D或--delete 通过用-D指定要匹配的规则或者指定规则在链中的位置编号,该命令从链中删除该规则
-P或--policy 该命令设置链的默认目标,即策略。所有与链中任何规则都不匹配的信息包都将被强制使用此链的策略
-N或--new-chain 用命令中所指定的名称创建一个新链
-F或--flush 如果指定链名,该命令删除链中的所有规则,如果未指定链名,该命令删除所有链中的所有规则。此参数用于快速清除
-L或--list 列出指定链中的所有规则
-R或--replace 替换指定链中一条匹配的规则
-X或--delete-chain 删除指定用户的的定义链,若没有指定链,则删除所有的用户链
-C或--check 检查数据包是否与指定链的规则相匹配
-Z或--zero 将指定链中所有规则的byte计数器清零
    3) 匹配(match)
    iptables命令的可选match部分指定信息包与规则匹配所应具有的特征(如源和目的地地址、协议等)。匹配分为两大类:通用匹配和特定于协议的匹配。这里,将研究可用于采用任何协议的信息包的通用匹配。下面是一些重要的且常用的通用匹配及其说明,如表2所示。
    表2 通用匹配说明
通用匹配 说    明
-p或--protocol 该通用协议匹配用于检查某些特定协议。协议示例有TCP、UDP、ICMP、用逗号分隔的任何这三种协议的组合列表以及ALL(用于所有协议)。ALL是默认匹配。可以使用!符号表示不与该项匹配
-s 或 --source 该源匹配用于根据信息包的源IP地址来与它们匹配。该匹配还允许对某一范围内的IP地址进行匹配,可以使用!符号,表示不与该项匹配。默认源匹配与所有IP地址匹配
-d 或 --destination 该目的地匹配用于根据信息包的目的地IP地址来与它们匹配。该匹配还允许对某一范围内IP地址进行匹配,可以使用!符号表示不与该项匹配
--sport 指定匹配规则的源端口或端口范围
--dport 指定匹配规则的目的端口或端口范围
-i 匹配单独的网络接口或某种类型的接口设置过滤规则
    4) 目标(target)
    前面已经讲过,目标是由规则指定的操作,对与那些规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。下面是常用的一些目标及其示例和说明,如表3所示。
    表3 目标项说明
ACCEPT 当信息包与具有ACCEPT目标的规则完全匹配时,会被接受(允许它前往目的地)
DROP 当信息包与具有DROP目标的规则完全匹配时,会阻塞该信息包,并且不对它做进一步处理。该目标被指定为-j DROP
REJECT 该目标的工作方式与DROP目标相同,但它比DROP好。和DROP不同,REJECT不会在服务器和客户机上留下死套接字。另外,REJECT将错误消息发回给信息包的发送方。该目标被指定为-j REJECT
RETURN 在规则中设置的RETURN目标让与该规则匹配的信息包停止遍历包含该规则的链。如果链是如INPUT之类的主链,则使用该链的默认策略处理信息包。它被指定为-jump RETURN
LOG 表示将包的有关信息记录入日志
TOS 表示改写数据包的TOS值