Iptables的原理和配置

来源:互联网 发布:养车软件 哪个好 编辑:程序博客网 时间:2024/04/29 03:20

防火墙原理

 

防火墙Linux访问控制,有硬件防火墙和软件防火墙。防火墙通过审查经过的每一个数据包,判断它是否有相匹配的过滤规则,根据规则的先后顺序进行一一比较,直到满足其中的一条规则为止,然后依据控制机制做出相应的动作。如果都不满足,则将数据包丢弃,从而保护网络的安全。

 

网络层防火墙(包过滤防火墙)

3、4层

安全性差,高效

代理层防火墙(iptables属于此)

7层

安全性好,低效

 

 

 

例如Iptables 这样防火墙工具工作在用户空间中,定义规则的工具。它们定义的规则,可以让在内核空间当中的netfilter来读取,并且实现让防火墙工作。

 

netfilter的5个位置

  1.内核空间中:从一个网络接口进来,到另一个网络接口去的

  2.数据包从内核流入用户空间的

  3.数据包从用户空间流出的

  4.进入/离开本机的外网接口

  5.进入/离开本机的内网接口

 

 

Iptables原理

netfilter/iptables(简称为iptables)可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能。netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件 netfilter 和 iptables 组成。 netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。

 

Iptables的规则架构由 规则、链路、表构成。iptables一共有4个表;5种链路,每个表可能包含多个链路;每个链路可能包含多个规则。iptables规则是立即生效的规则越严格,应该放的越靠前,而检查规则的时候,是按照从上往下的方式进行检查的。

 

规则(rules

其实就是网络管理员预定义的条件,当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。

 

规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等

 

 

链(chains)

数据包传播的路径,每一条链其实就是众多规则中的一个检查清单,每一条链中可以有一条或数条规则。

 

检查规则

1.依此检查链路中的规则,符合则直接执行,否则执行下一条规则。

2.如果链路中不符合所有规则,按照默认值处理包

 

五个规则链

1.PREROUTING (路由前)

2.INPUT (数据包流入口)

3.FORWARD (转发管卡)

4.OUTPUT(数据包出口)

5.POSTROUTING(路由后)

 

数据首先进入Prerouting链来判断是否能够进入本机; 如果能够进入本机再进入到INPUT链路交给用户层具体应用处理;数据经过OUTPUT链路返回到内核;然后经过POSTROUTING链路输出。 如果数据要转发出去就直接到FORWARD链路然后出去。

 

 

 

表(tables

表是按照对数据包的操作区分的提供特定的功能,iptables内置了4个表,即filter表、nat表、mangle表和raw表,分别用于实现包过滤,网络地址转换、包重构(修改)和数据跟踪处理。

 

默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。

filter:一般的过滤功能

nat:用于nat功能(端口映射,地址映射等)

mangle:用于对特定数据包的修改

raw:有限级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

 

 

 

规则配置和命令行

规则配置

 格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION

 -t table :raw>mangle>nat>filter

 COMMAND:定义如何对规则进行管理

 chain:指定你接下来的规则到底是在哪个链上操作的,当定义策略的时候,是可以省略的

 CRETIRIA:指定匹配标准

 -j ACTION :指定如何进行处理

 

COMMAND具体:

【规则管理】

-A或—append <链名> 在规则列表的最后增加1条规则

-I或–insert <链名> 在指定的位置插入1条规则

-I num : 插入,把当前规则插入为第几条。

-I 3 :插入为第三条

-D或–delete <链名> 从规则列表中删除1条规则

-D num:删除,明确指定删除第几条规则

-R或–replace <链名> 替换规则列表中的某条规则

-R num:Replays替换/修改第几条规则

 格式:iptables -R 3 …………

 

【链管理】

-P或–policy <链名> 定义默认策略

默认策略一般只有两种

iptables -P INPUT (DROP|ACCEPT)  默认是关的/默认是开的

-L或–list <链名> 查看iptables规则列表

-F或–flush <链名> 删除表中所有规则

(注意每个链的管理权限)

iptables -t nat -F PREROUTING

iptables -t nat -F 清空nat表的所有链

-Z或–zero <链名> 将表中数据包计数器和流量计数器归零

 

【自定义链接】

      -N:NEW 支持用户新建一个链

            iptables -N inbound_tcp_web 表示附在tcp表上用于检查web的。

     -X: 用于删除用户自定义的空

         使用方法跟-N相同,但是在删除之前必须要将里面的链给清空昂了

     -E:用来Rename chain主要是用来给用户自定义的链重命名

         -E oldname newname

 

          【查看管理】

-n:以数字的方式显示ip,它会将ip直接显示出来,如果不加-n,则会将ip反向解析成主机名。

 -v:显示详细信息

 -vv

 -vvv :越多越详细

 -x:在计数器上显示精确值,不做单位换算

 --line-numbers : 显示规则的行号

 -t nat:显示所有的关卡的信息

 

CRETIRIA:指定匹配标准:

-s或–source <源地址或子网> 指定数据包匹配的源地址IP

IP | IP/MASK | 0.0.0.0/0.0.0.0

而且地址可以取反,加一个“!”表示除了哪个IP之外

-d或–destination <目标地址或子网> 指定数据包匹配的目标地址

-p或—proto协议类型 < 协议类型> 指定数据包匹配的协议,如TCP、UDP和ICMP等

-i或–in-interface <网络接口名> 指定数据包从哪个网络接口进入,如ppp0、eth0和eth1等

-o或–out-interface <网络接口名> 指定数据包从哪块网络接口输出,如ppp0、eth0和eth1等

-sport <源端口号> 指定数据包匹配的源端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口

-dport目标端口号 指定数据包匹配的目标端口号,可以使用“起始端口号:结束端口号”的格式指定一个范围的端口

 

-j ACTION:具体

ACCEPT 接受数据包

DROP 丢弃数据包

REJECT:明示拒绝

REDIRECT 与DROP基本一样,区别在于它除了阻塞包之外, 还向发送者返回错误信息。

SNAT 源地址转换,即改变数据包的源地址

DNAT 目标地址转换,即改变数据包的目的地址

MASQUERADE IP伪装,即是常说的NAT技术,MASQUERADE只能用于ADSL等拨号上网的IP伪装,也就是主机的IP是由ISP分配动态的;如果主机的IP地址是静态固定的,就要使用SNAT

LOG 日志功能,将符合规则的数据包的相关信息记录在日志中,以便管理员的分析和排错

MARK:打防火墙标记的

 

举例:

 比如:不允许172.16.0.0/24的进行访问。

 iptables -t filter -A INPUT -s 172.16.0.0/16 -p udp --dport 53 -j DROP

 当然你如果想拒绝的更彻底:

 iptables -t filter -R INPUT 1 -s 172.16.0.0/16 -p udp --dport 53 -j REJECT




原文地址:http://5lexin.com/blog/view/293/iptables%E5%8E%9F%E7%90%86%E5%92%8C%E9%85%8D%E7%BD%AE

0 0
原创粉丝点击