防火墙(Firewall)
隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略。
防火墙的分类(Classify)
主机防火墙:服务范围为当前主机
网络防火墙:服务范围为防火墙一侧的局域网
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一 个部分功能基于软件实现,Checkpoint,NetScreen
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
网络层防火墙:OSI下面第三层 应用层防火墙/代理服务器:代理网关,OSI七层
网络防火墙(Network Firewall)
又名包过滤防火墙,网络层(OSI模型第三层)对数据包进行选择,选择的依据是系统内置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用的端口协议状态等因素,或他们的组合来确定是否允许该数据包通过。
网络防火墙的优缺点
优点:对用户来说是透明的,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
Netfilter/iptables(防火墙框架)
Iptables是一个命令行工具(位于用户空间),操作位于系统内核的防火墙工具Netfilter,netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案, 完成封包过滤、封包重定向和网络地址转换(NAT)等功能。
Netfilter组件
内核空间,集成在linux内核中。扩展各种网络服务的结构化底层框架。
内核中选取五个位置放了五个hook(勾子) function(INPUT、 OUTPUT、FORWARD、PREROUTING、POSTROUTING), 而这五个hook function向用户开放,用户可以通过一个命令工 具(iptables)向其写入规则。
由信息过滤表(table)组成,包含控制IP包处理的规则集( rules),规则被分组放在链(chain)上。
报文流向:
三种报文流向
流入本机:PREROUTING --> INPUT-->用户空间进程
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING
转发:PREROUTING --> FORWARD --> POSTROUTING
Iptables
命令行工具,工作在用户空间。
用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包 firewalld。
CentOS 7引入了新的前端管理工具:
firewall-cmd 命令行
firewall-config 图形
Iptables组成
iptables:四个表和五个链以及一些规则组成。
四个表table:filter、nat、mangle、raw。
五个内置链chain:INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。
filter表:过滤规则表,根据预定义的规则过滤符合条件的数据包
nat表:network address translation 地址转换规则表
mangle:修改数据标记位规则表
Raw:关闭NAT表上启用的连接跟踪机制,加快封包穿越防火墙速度
优先级由高到低的顺序为:raw-->mangle-->nat-->filter
表、链对应关系
raw表中的规则可以被哪些链使用:PREROUTING,OUTPUT
mangle表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
filter表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT
PREROUTING的规则可以存在于:raw表,mangle表,nat表。
INPUT的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
FORWARD的规则可以存在于:mangle表,filter表。
OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。
POSTROUTING的规则可以存在于:mangle表,nat表。
iptables规则
规则rule:根据规则的匹配条件尝试匹配报文,对匹配成功的报文根据规则定义的处理动作作出处理
匹配条件:默认为与条件,同时满足基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
扩展匹配:通过复杂高级功能匹配
处理动作:称为target,跳转目标内建处理动作:ACCEPT,DROP,REJECT,SNAT,DNAT MASQUERADE,MARK,LOG...
自定义处理动作:自定义chain,利用分类管理复杂情形。
规则要添加在链上,才生效;添加在自定义上不会自动生效。
链chain:
内置链:每个内置链对应于一个钩子函数
自定义链:用于对内置链进行扩展或补充,可实现更灵活的规则组织管理机制;只有Hook钩子调用自定义链时,才生效
内核数据包的传输过程(Transmitting Procedure)
当一个数据包进入网卡时,数据包首先进入PREROUTING链, 内核根据数据包目的IP判断是否需要转送出去。
如果数据包就是进入本机的,数据包就会沿着图向下移动,到达 INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链 ,然后到达POSTROUTING链输出。
如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出。
By WigginsLIu
欢迎关注WigginsLiu
领取专属 10元无门槛券
私享最新 技术干货