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表如下图
②、四表之 nat表:nat(网络地址转换)表主要是用来修改数据包的IP地址、端口号等信息。nat表对应的内核模块为iptables_nat,表内包含三个链,即PREROUTING、POSTROUTING、OUTPUT.
查看nat表信息如下图
③、四表之 mangle表:mangle表是用来修改数据包的TOS(服务类型)、TTL(生存周期),或者为数据包设置Mark标记,以实现流量整型、策略路由等高级应用。mangle表对应的内核模块为 iptables_mangle,表内包含五个链,即INPUT、OUTPUT、FORWARD、PREROUTING、 POSTROUTING。
查看mangle表如下图
④、四表之 raw表:raw表是自1.2.9以后版本的iptables新增的表,主要用来决定是否对数据包进行状态追踪。raw表对应的内核模块为iptbles_raw,表内包含两个链,即OUTPUT、PREROUTING.
查看raw表如下图
五链
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 尽情期待!!!!