防火墙:位于网络之间的,根据所定义的规则对进出网络数据做出响应的处理,并匹配到包用指定的处理机制进行处理的硬件、软件或者是二者的结合。

对于防火墙定义规则如何应用,linux的内核引用freebsd的机制--分段式(内核中一段,用户空间中一段)。

Iptables--定义linux内核中软件防火墙规则的编写工具,工作于用户空间;netfilter--网络过滤框架,工作于内核中,称为hook function 钩子函数。

IptablesTCP/IP协议栈中选了5个卡点:

1、INPUT

2、OUTPUT

3、FORWARD

4、PREROUTING

5、POSTROUTING

Iptables 提供的功能:

filter:在INPUT,FORWARD,OUTPUT上做过滤;

-nat :地址转换,SNAT,DNAT,PNAT--PREROUTING上在DNAT;POSTROUTING上做SNAT

-mangle:对数据包的格式进行修改--5个卡点上都可以做。

注:在同一个卡点上定义多个功能时,生效次序为:manglenatfilter

-iptables的四个表:

-filter:包过滤,包含3个链INPUT,OUTPUT,FORWARD

-nat:地址转换,3个链PREROUTING,FORWARD,POSTROUTING

-mangle:数据包的修改和重新组合,5个链;INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

-raw2个链,PREROUTING,OUTPUT

----------------------------------------------------------------------------------

怎样用iptables

格式

#iptables [-t TABLE] SUB_COMMAND CHAIN [num] [criteria] [-j ACCTION]

TABLE(表):

filter --默认值 |nat | mangle | raw

SUB_COMMAND(子命令):

关于Rule(规则):

-A --append在链最后追加一条规则;

-I --insert 插入一条规则;

-D -- delete 删除一条规则;

-R -- replace 替换一条规则;

关于chain(链):

-F --flush 清空链;

-N -- new 新加一条用户自定义的链;

-X -- 删除用户自定义的空链;

-Z --zero 清空计数器( 每一条规则都有两个计数器,一个用于记录被本条规则所匹配的包的个数,另一个用于记录所匹配到数据包的大小);

-E oldname newname  重命名一条链;

关于policy(策略):

-P chain ACCEPT|DROP|REJECT

ACCEPT--接受

DROP--悄悄地丢弃

REJECT--声明拒绝

关于view(视图):

-L   ---  list 显示所定义的规则;

-n  --以数字显示,不解析IP地址

-v |-vv |-vvv  --显示详细信息;

-x  ---显示精确值,不做单位转换;

--line-number   ---显示行号;

匹配条件criteria

通用匹配:

-s IP|network   --指定源地址;

-d IP|network  --指定目标地址;

-p protocol {tcp|udp|icmp} --指定协议;

-i --指定input interface

-o --指定output interface

扩展匹配:

隐式扩展:一般指对-p 选项中指定的协议进行的扩展;

-p tcp|

--sport PORT --源端口

--dport PORT  --目的端口

--tcpflags mask (要检查的标记)comp(必须为1的标记);

-p icmp

--icmp-type 8|0

8    --echo-request--请求

0    --echo-reply --响应

显式扩展:一般指必须使用-m选项明确指定要加载的扩展;

-m state:连接状态;

--state NEW|ESTABLISHED|RELATED|INVALID

NEW --新发起的连接;

ESTABLISHED  --所有已建立的连接;

RELATED   --相关联的连接;

INVALID --无效的连接;

-m {mport|multiport}  --端口范围

--source-ports   ---源端口的范围

--destination-ports   --目的端口的范围

-m iprange   --ip地址范围

--src-range ip-ip  --源地址范围

--dst-range ip-ip  --目标地址范围

-m commlimit    --限制某个IP的并发连接请求的个数;

--connlimit-above NUM  --同一个IP的最大并发连接请求个数;

-m limit   --数据包的发送速率限制

--limit  RATE eg3/hour,/second,/minute,/day

--limit-burst NUMBER --峰值,上限值(默认为5;)

-m time  --指定在某个时间内怎样处理请求;

--timestart value   --开始时间

--timestop value   --停止时间

--days listofdays formatMonTueWedThuFriSatSun

--datestart date

--datestop date  formatYYYY[:MM[:DD[:hh[:mm[:ss]]]]])

-m string     --在请求的数据包中做字符串匹配;

--algo  bm|kmp   --指定字符串匹配算法;

--string pattern    --指定字符串的模式;

----------------------------------------------------------------------------------

eg : 只允许在2012/02/182012/02/26之间的8:3014:30中间访问IP172.16.13.1web服务。

#iptables -A INPUT -d 172.16.13.1 -p tcp --dport 80 -m time --timestart 08:30:00 --timestop 14:30:00 --datestart 2012:02:18 --datestop 2012:02:26 -j ACCEPT