码迷,mamicode.com
首页 > 其他好文 > 详细

防火墙iptables

时间:2015-05-07 01:07:56      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:linux   防火墙   iptables   

一、定义:

    防火墙:工作于主机或网络的边缘,对进出的报文做规则检查,对匹配的报文做相应

处理的组件。分为主机防火墙和网络防火墙,常见的网络防火墙有,netscreen,checkpoint。

二、iptables的历史与工作原理:

 1、iptables的发展

    iptables的原名叫ipfirewall,而ipfirewall工作于内核中,通过钩子函数上放置规则,

  实现各种功能,而每个钩子上多条规则称为一个链(CHAIN),每个功能有多个链,所以称

  为表,后来改为iptables

 2、钩子函数(规则链)

prerouting: 进入本机后路由功能发生之前

input:到达本机内部

output: 由本机发出

forward: 由本机转发

postrouting:路由功能发生之后,即将离开本机之前      

 3、规则的功能:

filter:过滤,允许或禁止

NAT: Network Address Translation,地址转换        

mangle:修改报文首部信息

raw:关闭nat的连接追踪功能

规则与对应的链:

filter:input, forward, output

nat:prerouting, output, postrouting

mangle:prerouting, input, forward, output, postrouting

raw:prerouting, output

4、链:链上的规则次序即为检查次序,因此有一定的法则

(1) 同类规则,匹配范围小的放上面;

(2) 不同类规则,匹配报文几率较大的放上面;

(3) 应该设置默认策略;


5、数据包过滤匹配流程:

(1)网络A-->prerouting(raw,mangle,nat)-->路由选择-->转发数据流向

-->forward(mangle,fiter)-->postrouting(mangle,nat)-->网络B

(2)网络A--->prerouting(raw,mangle,nat)-->路由选择-->input(mangle,filter)

-->本机的应用进程-->路由选择-->output(raw,mangle,nat,filter)-->postrouting(mangle,nat)-->网络B

6、添加规则时的考量点:

(1) 要实现的功能:判断添加在哪个表上;

(2) 报文流向及经由路径:判断添加在哪个链上;

      功能的优先级,由高而低:      

      raw --> mangle --> nat --> filter

7、规则的组成部分:       

匹配条件:基本匹配条件、扩展匹配条件

如何处理:内建处理机制、自定义处理机制(自定义的链)

注意:报文不可能经由自定义链,只有在被内置链上的引用才能生效(即做为自定义目标)

三、iptables的命令使用   

  iptables命令生成规则:

规则通过内核接口直接送至内核,因此,会立即生效。但不会永久有效;

如果期望永久有效,需要保存至配置文件中,此文件还需开机时加载或由用户手工加载;

iptables [-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET   

 1、-t TABLE:

默认为filter, 共有filter, nat, mangle, raw四个可用;

 2、SUBCOMMAND:

   (1)链:

-F:flush,清空指定表的指定链上所有规则;省略链名时,清空表中的所有链;

-N:new, 新建一个用户自定义的链;自定义链只能作为默认链上的跳转对象,即在默认链通过引用来生效自定义链;

-X:drop,删除用户自定义的空链;非空自定义链和内置链无法删除;

-Z:zero,将规则的计数器置0;

-P:policy,设置链的默认处理机制;当所有都无法匹配或有匹配有无法做出有效处理机制时,默认策略即生效;

filter表的可用策略:ACCEPT(不限制), DROP(丢弃), REJECT(拒绝)         

-E:rename,重命名自定义链;

#iptables -E NAME NEWNAME

注意:被引用中的链,无法删除和改名

  (2)规则:增,删,改,查

-A:append,在链尾追加一条规则;

-I:insert,在指定位置插入一条规则;

-D:delete,删除指定的规则;

-R:replace,替换指定的规则;

-L:list,列出指定链上的所有规则;

-n: numeric,以数字格式显示地址和端口号,即不反解;

-v: verbose,详细格式,显示规则的详细信息,包括规则计数器等;

-vv:更加详细

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

-x: exactly,显示计数器的精确值;

3、CHAIN:prorouting,input,output,forward,postrouting

常用:input,output,forward

4、CRETERIA: 匹配条件   重点

  匹配条件:

   1)通用匹配:

-s, --src, --source  IP|Network:检查报文中的源IP地址;

-d, --dst, --destination:检查报文中的目标IP地址;

-p, --protocol:检查报文中的协议,即ip首部中的protocols所标识的协议;tcp、udp或icmp三者之一;

-i, --in-interface:数据报文的流入接口;通常只用于PREROUTING, INPUT, FORWARD链上的规则;

-o, --out-interface:检查报文的流出接口;通常只用于FORWARD, OUTPUT, POSTROUTING链上的规则;

注意:前面加[!]表示取反

  2)扩展匹配:使用iptables的模块实现扩展性检查机制

  (1)隐式扩展:如果在通用匹配上使用-p选项指明了协议的话,则使用-m选项指明对其协议的扩展就变得可有可无了;

(a)tcp: 

--dport PORT[-PORT]

--sport

--tcp-flags LIST1 LIST2

LIST1: 要检查的标志位;

LIST2:在LIST1中出现过的,且必须为1标记位;而余下的则必须为0; 

例如:--tcp-flags syn,ack,fin,rst syn

--syn:用于匹配tcp会话三次握手的第一次;

(b)udp:

--sport

--dport

(c)icmp:

--icmp-types

8: echo request

0:echo reply  

 (2)显式扩展:必须指明使用的扩展机制;

  -m 模块名称              

(a)multiport扩展:

 以离散定义多端口匹配;最多指定15个端口;

 专用选项:

--source-ports, --sports PORT[,PORT,...]

--destination-ports, --dports PORT[,PORT,...]

--ports PORT[,PORT,...]

例子:

#iptables -I INPUT 1 -d 172.16.100.11 -p tcp -m multiport --dports 22,80,443 -j ACCEPT   #开启其它主机对100.11的tcp的22.80.443端口的请求

#iptables -I OUTPUT 1 -s 172.16.100.11 -p tcp -m multiport --sports 22,80,443 -j ACCEPT   #开启100.11的tcp的22,80,443的端口回应

(b)iprange扩展:

 指定连续的ip地址范围;在匹配非整个网络地址时使用;

 专用选项:

[!] --src-range IP[-IP]

[!] --dst-range IP[-IP]

示例:开启100.1-100.100对100.11的tcp的23端口的访问

iptables -A INPUT -d 172.16.100.11 -p tcp --dport 23 -m iprange --src-range 172.16.100.1-172.16.100.100 -j ACCEPT

iptables -A OUTPUT -s 172.16.100.11 -p tcp --sport 23 -m iprange --dst-range 172.16.100.1-172.16.100.100 -j ACCEPT

(c)string扩展:

检查报文中出现的字符串,与给定的字符串作匹配;

字符串匹配检查算法:

kmp, bm

专用选项:

--algo {kmp|bm}

--string "STRING"

--hex-string "HEX_STRING":HEX_STRING为编码成16进制格式的字串;

示例:

iptables -I OUTPUT 1 -s 172.16.100.11 -p tcp --sport 80 -m string --string "sex" --algo kmp -j REJECT

(d)time扩展:

基于时间区间做访问控制

     专用选项:

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

--datestop

--timestart

--timestop

--weekdays DAY1[,DAY2,...]

示例:

# iptables -R INPUT 1 -d 172.16.100.11 -p tcp --dport 80 -m time --timestart 08:30 --timestop 18:30 --weekdays Mon,Tue,Thu,Fri -j REJECT

(e)connlimit扩展:

基于连接数作限制;对每个IP能够发起的并发连接数作限制;

专用选项:

--connlimit-above [n]

# iptables -I INPUT 2 -d 172.16.100.11 -p tcp --dport 22 -m connlimit --connlimit-above 5 -j REJECT

(f)limit扩展:

基于发包速率作限制;

专用选项:令牌桶算法

--limit  n[/second|/minute|/hour|/day]

--limit-burst n   限制突发数

iptables -R INPUT 3 -d 172.16.100.11 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

5、TARGET:

-j: jump,跳转目标

内置目标:

ACCEPT:接受

DROP:丢弃

REJECT:拒绝

练习:

(1) 配置本机的dns服务,并放行之;默认策略为drop;

#iptables -I INPUT 2 -d 172.16.21.68 -p tcp --dport 53 -j ACCEPT

#iptables -I OUTPUT 2 -s 172.16.21.68 -p tcp --sport 53 -j ACCEPT

#iptables -I INPUT 3 -d 172.16.21.68 -p udp --dprot 53 -j ACCEPT

#iptables -I INPUT 3 -d 172.16.21.68 -p udp --dport 53 -j ACCEPT

#iptables -I OUTPUT 2 -s 172.16.21.68 -p udp --sport 53 -j ACCEPT

(2) 配置本机的telnet服务,要求只允许来自于172.16.0.0/16网络中的主机访问,且只允许工作时间访问,而且,每个来源IP最多的并发连接数不能超过2个;

#iptables -I INPUT 5 -s 172.16.0.0/16 -d 172.16.21.68 -p tcp --dport 23 -m time --timestart 08:00 --timestop 18:00 --weekdays Mon,Tun,Wen,Thu,Fri -m connlimit --connlimit-above 2 -j ACCEPT

#iptables -I OUTPUT 5 -s 172.16.21.68 -d 172.16.0.0/16 -p tcp --sport 23  -m time --timestart 08:00 --timestop 18:00 --weekdays Mon,Tun,Wen,Thu,Fri -m connlimit --connlimit-above 2 -j ACCEPT


本文出自 “linux课堂笔记” 博客,请务必保留此出处http://linuxkingdom.blog.51cto.com/6334977/1643600

防火墙iptables

标签:linux   防火墙   iptables   

原文地址:http://linuxkingdom.blog.51cto.com/6334977/1643600

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!