一、概述
在计算机领域内,防火墙是一种能够依照设定的规则,对网络传输进行控制,以确保信息安全的软硬件组成的防护系统。
Linux的Netfilter/IPTables架构
Netfilter/IPTables架构是Linux系统提供的自带的防火墙,它包含在Linux 2.4以后的内核中,功能十分强大,可以实现包过滤、NAT(网络地址转换)、数据包的分割等功能。
Netfilter工作在内核,而IPTables则是提供在用户空间的工具,可以让用户自定义规则集的表结构。
Netfilter/IPTables的框架
Netfilter工作在内核的IP协议栈上,它为多种协议提供了一套类似的钩子(HOOK),这些钩子函数设置在了报文传送的必经之路上。
报文按照来源和去向可以分为三类:流入的、流出的、流经的,其中流入、流经要经过路由才能区分,流出和流经也要经过路由转发。那么Netfilter就在这些必经之路上提供了5个钩子位置,分别是:
PREROUTING在路由决策之前
INPUT包将要被投递到本地socket之前
FORWARD经本机转发的包
OUTPUT本机发出的包
POSTROUTING路由决策后交给硬件之前
IPTables是用户空间的工具,它提供了4张表,分别是:
raw第一个处理的表,在连接追踪前作用,可以避免非常频繁的服务使用连接追踪功能
mangle它能够修改报文内容
nat网络地址转换,处理DNAT、SNAT转换
filter通用匹配的包过滤,不做任何修改
优先级顺序是:raw —> mangle —> nat —> filter。也就是说在某一个链上有多张表,就是按照这个顺序依次处理。
4张表中定义好规则,作用在不同的链上。如下图:
二、iptables简介
安装很简单,只需要安装用户空间工具iptables就行。在CentOS6光盘上有,可以rpm、yum安装。包安装请参看以前的博文,这里不再赘述。
# yum -y install iptables
语法规则(简要说明)
iptables [-t TABLE] COMMAND CHAIN CRETIRIA -j TARGET
-t 指明表,表有filter、nat、mangle和raw,filter是缺省值。
下面我们就从默认规则中初步了解一下iptables:
[语法]
iptables的-L选项,是列出所选链的所有规则,默认显示filter表,可以使用-t nat、-t mangle、-t raw。
常用有几个子选项
-n 数字格式,不要反解IP
-v 详细信息输出
–line-numbers 显示规则行号
-x 精确显示
常用目标TARGET
ACCEPT 允许
DROP 丢弃
REJECT 拒绝
LOG 记录日志
[规则分析]
INPUT链
1、默认规则
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
这一句说明INPUT链上默认的策略是允许放行。
根据默认策略,设置可以分为2种:
默认拒绝,把需要的数据放行,即白名单策略
默认允许,把不需要的数据拒绝,即黑名单策略
2、规则列表
1 201 14896 ACCEPT all — * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 这一句基于状态检测的规则,它在INPUT链上判断所有协议数据包,如果是与之前有关联,或者已经建立了的连接放行
2 2 168 ACCEPT icmp — * * 0.0.0.0/0 0.0.0.0/0
任何icmp协议请求都允许
3 0 0 ACCEPT all — lo * 0.0.0.0/0 0.0.0.0/0
在lo接口上的所有协议请求都允许,这是设置本地回环地址的行为 4 0 0 ACCEPT tcp — * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
这一条比较重要,这是允许tcp新建立连接于22号端口,即默认的ssh服务端口,要与OUTPUT配合,才能完成整个数据的请求和响应 5 79 10272 REJECT all — * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
最后一条,所有协议所有地址都被拒绝,并告知主机禁止错误。
通过INPUT的规则设置,可以看出,虽然默认为允许放行,但是通过规则的分析,实际上除了本地接口lo外,只允许icmp和对TCP的22号端口的访问,其他全部拒绝,并返回指定错误。
FORWARD链
有时我们选择改变,并非经过深思熟虑,而更像是听见了天地间冥冥中的呼唤,