Linux iptables说明

Iptables介绍

Iptables默认有三张表(队列),分别是mangle、nat、 Filter,mangle表主要用来mangle(中文解释:轧)包,你可以使用mangle匹配来改变包的TOS等特性,mangle表中仅有 TOS、TTL、MARK几种操作,nat表用来转换包的源或目标地址,包括DNAT、SNAT和MASQUERADE等类型,filter 表用来过滤数据包,过滤工作主要是在这儿完成的。

Chain 规则链:由一系列规则组成,每个包顺序经过 chain 中的每一条规则。chain 又分为系统 chain和用户创建的 chain。

filter 表的系统 chain: INPUT,FORWAD,OUTPUT。 INPUT匹配目的 IP 是本机的数据包,FORWARD匹配穿过本机的数据包。

nat 表的系统 chain: PREROUTING,POSTROUTING,OUTPUT

mangle 表的系统 chain: PREROUTING,OUTPUT

每条系统 chain 在确定的位置被检查。比如在包过滤中,所有的目的地址为本地的包,则会进入INPUT 规则链,而从本地出去的包会进入 OUTPUT 规则链。

Iptable的执行规则

  iptables执行规则时,是从规则表中从上至下顺序执行的,如果没遇到匹配的规则,就一条一条往下执行,如果遇到匹配的规则后,那么就执行本规则,执行后根据本规则的动作(accept, reject, log等),决定下一步执行的情况,后续执行一般有三种情况。

1。一种是继续执行当前规则队列内的下一条规则。比如执行过Filter队列内的LOG后,还会执行Filter队列内的下一条规则。

2。一种是中止当前规则队列的执行,转到下一条规则队列。比如从执行过accept后就中断Filter队列内其它规则,跳到nat队列规则去执行

3。一种是中止所有规则队列的执行。

iptables 是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting,然后检查目的 IP 判断是否需要转送出去,接着就会跳到 INPUT 或 Forward 进行过滤,如果封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPT、REJECT、DROP、REDIRECT 和 MASQUERADE 以外,还多出 LOG、ULOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、TOS、TTL、MARK 等,其中某些处理动作不会中断过滤程序,某些处理动作则会中断同一规则炼的过滤,并依照前述流程继续进行下一个规则炼的过滤(注意:这一点与 ipchains 不同),一直到堆栈中的规则检查完毕为止。透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非炼状过滤(chains)。

Iptables的格式和规则

Iptables [-t TABLE] ACTION [PATTERN] [-j TARGET]

TABLE:

有filter,nat,mangle;若无指定,预设为filter table.

ACTION:

-L Chain 显示Chain中的所有规则

-A Chain 对Chain新增一条规则

-D Chain 删除Chain中的一条规则

-I Chain 在Chain中插入一条规则

-R Chain 替换Chain中的某一条规则

-P Chain 对Chain设定的预设的Policy

-F Chain 清除Chain中的所有规则

-N Chain 自订一个Chain

-X 清除所有的自订Chain

Chain:

Iptables 有五条默认的Chains(规则链),如下表:

PREROUTING 数据包进入本机后,进入Route Table前

INPUT 数据包通过Route Table后,目地为本机

OUTPUT 由本机发出,进入Route Table前

FORWARD 通过Route Table后,目地不是本机时

POSTROUTING 通过Route Table后,送到网卡前

PATTERN(设定条件部份):

-p Protocol 通讯协议,如tcp,udp,icmp,all等。。。

-s Address 指定的Source Address为Address

-d Address 指定的Destination Address为Address

-I Interface 指定数据包进入的网卡

-o Interface 指定数据包输出的网卡

-m Match 指定高级选项,如mac,state,multiport等。。

TARGET(常用的动作):

ACCEPT 让这个数据包通过

DROP 丢弃数据包

RETURN 不作对比直接返回

QUEUE 传给User-Space的应用软件处理这个数据包

SNAT nat专用:转译来源地址

DNAT nat专用:转译目地地址

MASQUERADE nat专用:转译来源地址成为NIC的MAC

REDIRECT nat专用:转送到本机的某个PORT

举例

红帽企业版5默认有一条子链RH-Firewall-1-INPUT,INPUT,FORWARD的所有匹配都转入到RH-Firewall-1-INPUT这条子链上面来匹配。

查看:iptables -t table_name -L

刷新:

1、清除所有的规则和用户创建的chain

iptables -t table_name -F

2、清除所有的记数(符合规则的包的数目)

iptables -t table_name -Z

针对链的操作(注意以下都省略了 -t table_name)

查看:iptables -L chain_name

刷新:iptables -F chain_name

清除记数:iptables -Z chain_name

创建新链:iptables -N chain_name

删除链:iptables -X chain_name

重命名:iptables -E chain_old_name chain_new_name

设置策略:iptables -P chain_name policy

针对规则的操作

添加一条规则:iptables -A chain_name rule-spec

插入一条规则:iptables -I chain_name 规则号 new_rule_spec (插入后的规则号为命令中指定的

号,原来存在的规则号顺延)。

删除一条规则:有两种方法删除规则:通过指定规则号删除一条规则或通过指定规则的内容来删除一

条规则。每个规则链中的规则号从1 开始记数。

iptables -D chain_name 规则号

iptables -D chain_name 规则内容

修改一条规则:iptables -R chain_name 规则号 new_rule_spec

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

二,IPTABLES举例:

1,链的基本操作:

清除预设表filter中所有规则链中的规则:

iptables -F

清除预设表filter中使用者自定链中的规则:

iptables -X

将指定链中所有规则的包字节计数器清零:

iptables -Z

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

2,设置链的默认规则:

首先允许所有包的规则:

iptables -P INPUT   ACCEPT

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

首先禁止所有包的规则:

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP

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

3,列出表/链中的规则:

列出表/链中的所有规则

iptables -L

若显示较慢可以使用

iptables -L -n

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

4,向链中添加规则:

如:

iptables -A INPUT -i lo -j ACCEPT

iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -i eth0 -j ACCEPT

iptables -A OUTPUT -o eth0 -j ACCEPT

iptables -A FORWARD -i eth0 -j ACCEPT

iptables -A FORWARD -o eth0 -j ACCEPT

注:由于本地进程不会经过FORWARD链,因此lo环回接口只在INPUT和OUTPUT两个链上工作。

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

5,使用用户自定义链:

iptables -N brus

iptables -A brus -s 0/0 -d 0/0 -p icmp -j DROP

iptables -A INPUT -s 0/0 -d 0/0 -j brus

此例子的意思是:

第一句建立了一个叫做brus的用户自定义链;

第二句用-A参数添加了一条用户自定义的封堵规则;

第三句向默认的INPUT链添加一条新规则,使所有的包都由brus自定义链处理。

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

6,设置默认的匹配规则:

匹配指定的协议:

iptables -A INPUT -p tcp

匹配指定协议之外的所有协议:

iptables -A INPUT -p ! tcp

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

指定地址匹配:

指定匹配的主机

iptables -A INPUT -s 192.168.1.1

指定匹配的网络

iptables -A INPUT -s 192.168.1.0/24

指定匹配主机之外的地址

iptables -A FORWARD -s ! 192.168.0.1

指定匹配网络之外的网络

iptables -A FORWARD -s ! 192.168.0.0/24

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

指定网络接口匹配:

指定单一的网络接口匹配

iptables -A INPUT -i eth0

iptables -A FORWARD -o eth0

指定同类型的网络接口

iptables -A FORWARD -o eth+

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

指定端口匹配:

指定单一端口匹配

iptables -A INPUT -p tcp --sport www

iptables -A INPUT -p tcp --sport 80

iptables -A INPUT -p udp --sport 53

iptables -A INPUT -p udp --dport 53

匹配指定端口以外的端口

iptables -A INPUT -p tcp --sport ! 22

匹配指定的端口范围

iptables -A INPUT -p tcp --sport 22:80

匹配ICMP端口和ICMP类型

iptables -A INPUT -p icmp --icmp-type 8

你可能感兴趣的:(linux,职场,iptables,休闲)