iptables基础篇

iptables基础篇

简介

基本信息

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。

防火墙在做信息包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的信 息包过滤表中,而这些表集成在 Linux 内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 信息包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。

Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)

虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。

netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。属于“内核态”

iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。属于“用户态”。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。

历史版本

与Linux内核各版本集成的防火墙历史版本:

2.0.X内核:ipfwadm

2.2.X内核:ipchains

2.4.X内核:iptables

iptables的表、链结构

iptables的作用是为了过滤机制的实现提供规则(或称为策略),通过各种不同的规则,告诉netfilter对来自某些源、前往某些目的或者具有某些协议特征的数据包应该如何处理。为了更加方便的组织和管理防火墙规则,iptables采用了“表”“链”分层结构

四表 五链
filter表 INPUT链
nat表 OUTPUT链
mangle表 FORWARD链
raw表 PREROUTING链
POSTROUTING链

详解

四表

①、四表之 filter表:filter表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包。filter表对应的内核模块为iptables_filter,表内包含三个链,即INPUT、FORWARD、OUTPUT.

查看filter表如下图

iptables基础篇

②、四表之 nat表:nat(网络地址转换)表主要是用来修改数据包的IP地址、端口号等信息。nat表对应的内核模块为iptables_nat,表内包含三个链,即PREROUTING、POSTROUTING、OUTPUT.

查看nat表信息如下图

iptables基础篇

③、四表之 mangle表:mangle表是用来修改数据包的TOS(服务类型)、TTL(生存周期),或者为数据包设置Mark标记,以实现流量整型、策略路由等高级应用。mangle表对应的内核模块为 iptables_mangle,表内包含五个链,即INPUT、OUTPUT、FORWARD、PREROUTING、 POSTROUTING。

查看mangle表如下图

iptables基础篇

④、四表之 raw表:raw表是自1.2.9以后版本的iptables新增的表,主要用来决定是否对数据包进行状态追踪。raw表对应的内核模块为iptbles_raw,表内包含两个链,即OUTPUT、PREROUTING.

查看raw表如下图

iptables基础篇

五链

INPUT链:当收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则

OUTPUT链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则

FORWARD链:当接收到需要通过防火墙中转发送给其他地址的数据包时,应用此链中的规则

PREROUTING链:在对数据包做路由选择之前,应用此链中的规则

POSTROUTING链:在对数据包做路由选择之后,应用此链中的规则

其中,INPUT、OUTPUT链主要用在“主机型防火墙”中,即主要针对服务器本地进行的防火墙;而FORWARD、PREROUTING、 POSTROUTING链多用在“网络型防火墙”中,如使用Linux防火墙作为网关服务器,在公司内网与Internet之间进行安全控制。

规则表之间的顺序

当数据包抵达防火墙时,将依次应用raw表、mangle表、nat表和filter表中对应链内的规则,应用顺序为raw→mangle→nat→filter。

编写防火墙规则

使用iptables命令管理、编写防火墙规则时,基本的命令格式

iptables [ -t 表名 ] 管理选项 [链名] [匹配条件][-j 控制类型]

这其中,表名、链名用来指定iptables命令所操作的的表和链,未指定表名时将默认使用filter表;管理选项表示iptables规则的操作方式,如插入、增加、删除、查看等;匹配条件用来指定要处理的数据包特征,不符合指定条件的数据包将不会被处理;控制类型指的是数据包的处理方式,如允许、拒绝、丢弃等。

在iptables防火墙体系中,常用的几种控制类型:

ACCEPT:允许数据包通过

DROP:直接丢弃数据包,不给出任何回应信息

REJECT:拒绝数据包通过,必要时会给数据发送端一个相应信息

LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则。

编写防火墙规则示例:

iptables -t filter -I INPUT -p icmp -j REJECT

在filter表的INPUT链中添加一条拒绝icmp数据包通过的规则

iptables命令的常用管理选项

选项名 功能及特点
-A 在指定链的末尾添加(--append)一条新的规则
-D 删除(--delete)指定链中的某一条规则,可指定规则序号或具体内容
-I 在指定链中插入(--insert)一条新的规则,未指定序号时默认作为第一条规则
-R 修改、替换(--replace)指定链中的某一条规则,可指定规则序号或者具体内容
-L 列出(--list)指定链中所有的规则,若未指定链名,则列出表中的所有链
-F 清空(--flush)指定链中所有规则,若未指定链名,则清空表中的所有链
-P 设置指定链的默认策略(--policy)
-n 使用数字形式(--numeric)显示输出结果,如显示IP地址而不是主机名
-v 查看规则列表时显示详细(--verbose)的信息
-h 查看命令帮助信息(--help)
--line-numbers 查看规则列表时,同时显示规则在链中的顺序号

添加新的规则

示例:

iptables -t filter -A INPUT -p tcp -j ACCEPT
在filter表的INPUT链末尾添加一条允许tcp协议通过的规则
iptables -I INPUT -p udp -j ACCEPT
在filter表的INPUT链的第一条添加允许udp协议的数据包通过
注:这里没有指定表,所以默认是filter表,-I 是添加为第一条
iptables -I INPUT 2 -p icmp -j ACCEPT
在filter表的INPUT链的第二条添加一条允许icmp通过的规则

查看规则列表

示例:

[root@rhel6-2 ~]# iptables -L INPUT --line-numbers   //查看filter表中的所有规则并且显示序列号
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
2    ACCEPT     icmp --  anywhere             anywhere            
3    ACCEPT     all  --  anywhere             anywhere            
4    ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh 
5    REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited 
[root@rhel6-2 ~]# iptables -n -L INPUT  //以数字地址形式查看filter表INPUT链中的所有规则,这里的-n -L 可简写为-nL
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

清空、删除规则

[root@rhel6-2 ~]# iptables -nL INPUT  //先查看INPUT链中的规则
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
[root@rhel6-2 ~]# iptables -D INPUT 3   //删除第三条
[root@rhel6-2 ~]# iptables -nL INPUT
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
   //可以看到第三条规则没了 
[root@rhel6-2 ~]# iptables -F   //清空防火墙规则
[root@rhel6-2 ~]# iptables -nL INPUT   //再次查看就没有规则条目了
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

设置默认策略

itables的各条链中,默认策略是规则匹配的最后一个环节,当找不到任何一条能够匹配数据包的规则时,则默认执行默认策略。默认策略的控制类型就两种ACCPEPT(允许)、DROP(丢弃)。

[root@rhel6-2 ~]# iptables -t filter -P FORWARD DROP
//将filter表中FORWARD链的默认策略设置为丢弃

[root@rhel6-2 ~]# iptables -P OUTPUT ACCEPT
//将OUTPUT表中的默认策略设置为允许

好,以上就是今天iptables基础篇的内容咯,望各位大神多多点评。

ps:iptables进阶篇之XXX 尽情期待!!!!

猜你喜欢

转载自blog.51cto.com/13659301/2129716