防火墙是内核的配置,iptables是使用防火墙的工具


iptables语法:



iptables [-t 表名] 动作 链名 匹配条件 -j 目标动作或跳转



详解:


一、表名TABLE

1、raw表:确定是否对数据包进行状态跟踪(目标是关闭nat表上启用的连接追踪功能)。

2、mangle表:为数据包设置标记。

3、nat表:地址转换,修改数据包中的源、目标IP地址或端口;启用connection_track;SNAT,DNAT,PNAT

4、filter表:过滤,确定是否放行该数据包

默认为filter表



二、动作COMMAND

1、对于链的动作:

-F:flush, 清空规则链;

-N:new, 自建一条自定义链

-X: delete, 删除一条自定义的空链

-Z:zero,(数据包和流量)计数器归零

-P:policy,设置默认策略,对filter表来讲,默认规则为ACCEPT或DROP,不能为REJECT;

-E:重命名自定义链



2、对于链中规则的动作:

-A:向链中添加一条规则,默认插入所有规则的最后一条。

-I:向链中插入一条规则,默认插入所有规则的第一条。

iptables -I INPUT 2 ·····

即为在链中第2条规则前添加一条规则。 


-D:从链中删除一条规则。

-R:替换链中的一条规则。


3、查询动作:

-L

-n: 数字格式显示主机地址和端口;

-v: 详细格式,-vv, -vvv

--line-numbers: 显示规则编号

-x: exactly,不要对计数器的计数结果做单位换算,而显示其精确值



三、链名CHAIN

PREROUTING:路由前,进行路由选择前处理数据包

INPUT:到达本机内部的报文必经之路,处理入站数据包

FORWARD:由本机转发的报文必经之路,处理转发数据包

OUTPUT:由本机发出的报文的必经之路,处理出站数据包

POSTROUTING:路由后,进行路由选择后处理数据包



四、匹配条件CRETIRIA 

1、通用匹配

-s IP地址:指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;

--src, --source

-d IP地址:指定报文目标IP地址匹配的范围;

--dst, --destination

-p 协议:指定匹配报文的协议类型,一般有三种tcp, udp和icmp;

-i 网络接口名: 数据报文流入的接口;PREROUTING, INPUT, FORWARD

-o 网络接口名: 数据报文流出的接口;OUTPUT, FORWARD, POSTROUITING


2、扩展匹配

2.1隐式扩展:当使用-p {tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项;

-p tcp:

--sport 源端口号: 指定源端口

--dport 目标端口号: 指定目标端口

-p udp:

--sport 源端口号: 指定源端口

--dport 目标端口号: 指定目标端口

-p icmp [-m icmp]

--icmp-type

   0: echo-reply, ping响应

   8: echo-request, ping请求


例:iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 


2.2显式扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项;


(1)state:连接状态


-m state –-state {NEW|ESTABLISHED|RELATED|INVALID|}


接下来介绍下用iptables实现状态检测包过滤

介绍tcp以下4种状态的连接

1].NEW:即3次握手的第一次,一次新的请求

iptable -A OUTPUT -o eth0 -m state --state NEW -j DROP

分析这条规则,其中-m表示扩展加载state状态检测模块,--state NEW表示检测tcp的第一次握手,整条规则的作用就是拒绝从eth0网卡发出的新的tcp连接。


    2].ESTABLISHED:二次握手以后,连接断开之前的连接

    3].RELATED:相关连的状态,可解决控制ftp连接这种超麻烦的协议

    4].INVALID:无法识别的状态


应用案例:

结合NEW和ESTABLISHED这2种状态,实现以下规则

iptables -A INPUT -d 192.168.1.1 -p tcp –dport 22 -m state –-state NEW,ESTABLISHED -j ACCEPT

允许外面向主机发起的新的ssh请求

iptables -A INPUT -d 192.168.1.1 -p tcp -dport 80 -m state –-state NEW,ESTABLISHED -j ACCEPT

允许外面向主机发起的新的web连接

iptables -A OUTPUT -s 192.168.1.1 -p tcp sport 22 -m state -–state ESTABLISHED -j ACCEPT

处于连接状态时,允许主机发往外部的ssh数据包

iptables -A OUTPUT -s 192.168.1.1 -p tcp sport 80 -m state –-state ESTABLISHED -j ACCEPT

处于连接状态时,允许主机发往外部的web数据包

iptables -P INTUP DROP

拒绝其它所有进来的数据包

iptables -P OUTPUT DROP

拒绝其它所有出去的数据包

这几条规则可以用在web服务器上,只允许客户向服务器发出ssh和web请求的访问,服务器不能主动向外发出任何连接,避免服务器成为黑客的跳板



(2)mport:多端口匹配

-m {mport|multiport}

       --source-ports|--sports port[,port···]

       --destination-ports|--dports port[,port···]

       --ports port[,port···]

此扩展可以指定不连续的端口,在这里优化以上的案例来说明其作用

iptables -A INPUT -d 192.168.1.1 -m mport –-destination-ports 22,80,443 -m state –-state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -s 192.168.1.1 -m mport –-source-ports 22,80,443 -m state –- state ESTABLISHED -j ACCEPT

iptables -P INTUP DROP

iptables -P OUTPUT DROP

一次可以添加多个端口,端口之间用逗号隔开

 

(3)iprange:多IP匹配

-m iprange

    --src-range IP-IP

    --dst-range IP-IP

这里用一个简单的例子来说明

iptables -A INPUT -d 192.168.1.1 -m iprange –src-range 192.168.0.1-192.168.0.100 -p tcp –-dport 80 -j DROP

拒绝192.168.0.1-192.168.0.100这段地址访问192.168.1.1的web服务

 

(4)connlimit:并发连接请求个数限制

-m connlimit

    --connlimit-above [n]

例:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP

 

(5)limit:速率限制

-m limit

    --limit n[/second|/minute|/hour|/day]平均速率

    --limit-burst n突发速率

iptables -A INPUT -d 192.168.1.1 -p tcp –dport 80 -m limit --limit 10/second --limit-burst 30  -j ACCEPT

此条规则限制了每秒10个数据包,突发最大速率是每秒30个数据包

 

(6)time:时间限制

-m time

    --datestart YYYY[-MM][-DD[Thh[:mm[:ss]]]]

--datestop  YYYY[-MM][-DD[Thh[:mm[:ss]]]]


--timestart hh:mm[:ss]

--timestop hh:mm[:ss]


--weekdays day[,day]

  Mon, Tue,Wen,Thu,Fri,Sat,Sun

区分以下两种写法来理解这几个选项的意义

iptables -A INPUT  -d 192.168.1.1 -p tcp –-dport 80 -m time –-datestart 2012:07:20:08:30:00 --datestop  2012:07:20:14:30:00 -j ACCEPT

从7月20号8:30到7月30号14:30允许访问本机web服务

iptables -A input -d 192.168.1.1 -p tcp –-dport 80 -m time –- timestart 08:30:00 –-timestop 14:30:00 --datestart 2012:07:20 –-datestop 2012:07:30 -j ACCEPT

从7月20号到7月30号 每天的8:30—14:30时分允许访问本机web服务

 

(7)string:字符限制(对中文字符匹配有限)

-m string

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

  --string "字符" 指定字符

iptables -A out -s 172.16.100.1 -p tcp --sport 80 -m string --algo kmp –string “baidu.com” -j DROP

包含baidu.com的数据包都拒绝


例:匹配源mac地址

 -m mac --mac-source mac地址



五、目标动作TARGET

1、ACCEPT

2、DROP:丢弃数据包不予处理,进行完此处理后将不再对比其他规则,直接中断过滤程序。

3、REJECT:拦阻数据包,并返回数据包通知对方,可返回的数据包。

4、LOG:将iptables日志存储在/var/log/messages文件中。


[root@localhost log]# iptables -L -v#显示的参数简单解释

Chain:链

policy:默认策略

pkts:该规则处理数据包的个数

bytes:该规则处理数据包的大小(流量)

target:目标动作

prot:协议(条件)

opt:其他选项

source:源地址

destination:目标地址


以上均为理论知识点,以后遇到具体实例后回继续添加。