linux防火墙
此处主要介绍linux内核中带有的netfilter,仅能保护单台主机
- netfilter:firewalling、NAT、packet mangling for linux
防火墙的概念
网络安全技术
-
IDS:入侵检测与管理系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供有针对性的指导措施和安全决策依据。IDS一般采用旁路部署方式。
-
IPS:入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,IPS一般采用在线部署方式。
-
防火墙(FireWall):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略。
防火墙的分类
-
- 主机防火墙:服务范围为当前主机
- 网络防火墙:服务范围为防火墙一侧的局域网
-
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件
实现,如:Checkpoint,NetScreen - 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
- 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件
-
- 网络层防火墙:OSI模型下四层
- 应用层防火墙/代理服务器:代理网关,OSI模型七层
网络型防火墙
-
包过滤防火墙
-
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
-
优点:对用户来说透明,处理速度快且易于维护
-
缺点:无法检查应用层数据,如病毒等
-
网络防火墙示意图:
应用层防火墙
-
应用层防火墙/代理服务型防火墙(Proxy Service) 将所有跨越防火墙的网络通信链路分为两段
- 内外网用户的访问都是通过代理服务器上的“链接”来实现
- 优点:在应用层对数据进行检查,比较安全
- 缺点:增加防火墙的负载
-
应用层防火墙示意图:
-
现实生产环境中所使用的防火墙一般都是应用层防火墙和网络型防火墙二者结合体
- 即先检查网络数据,通过之后再送到应用层去检查
linux防火墙
- linux防护墙主要基于网络型的防火墙
- linux内核中集成了防火墙功能,即netfilter组件
netfilter组件
-
内核空间,集成在linux内核中
-
官网文档:https://netfilter.org/documentation/
-
扩展各种网络服务的结构化底层框架
-
内核中选取五个位置放了五个hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而这五个hook function向用户开放,用户可以通过一个命令工具(iptables)向其写入规则
其中五个钩子函数特点:以便于用户扩展和调用。
PREROUTING 路由表检查之前,通往本机的数据报文。
INPUT 路由表检查之后,确定发给本机数据报文。
OUTPUT 本机往外发送的数据报文,出去时由路由选择路径,OUTPUT在选择路径之前。
FORWARD linux可以作为路由器使用,FORWARD可以设置转发的情况。
POSTROUTING POSTROUTING在路由选择之后,相当于需要从本机出去的最后阀门。
五个钩子函数是内核中的函数,在用户空间可以写代码通过系统调用实现对钩子函数的调用。
应用级工具:iptables
netfilter的主要功能是实现访问控制:主要用于目标用户访问当前主机或者访问主机上的资源时就控制。
- 在应用级工具iptables上,由信息过滤表(table)组成,包含控制IP包处理的规则集(rules),规则被分组放在链(chain)上
其中INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING被称为chain、至此后续直接使用chain称呼。
查看linux内核是否具有iptables功能:
[root@centos8-8 ~]# grep -i iptables /boot/config-4.18.0-80.el8.x86_64
CONFIG_IP_NF_IPTABLES=m
CONFIG_IP6_NF_IPTABLES=m
# iptables trigger is under Netfilter config (LED target)
[root@centos8-8 ~]# grep -i netfilter /boot/config-4.18.0-80.el8.x86_64
CONFIG_NETFILTER=y
CONFIG_NETFILTER_ADVANCED=y
CONFIG_BRIDGE_NETFILTER=m
数据报文的流向
1.三种报文流向:
- 流入本机:PREROUTING --> INPUT–>用户空间进程
- 流出本机:用户空间进程 -->OUTPUT–> POSTROUTING
- 转发:PREROUTING --> FORWARD --> POSTROUTING
2.数据报文流向图示:
3.理解hook function:
- PREROUTING 路由表检查之前,通往本机的数据报文。
- INPUT 路由表检查之后,确定发给本机数据报文。
- OUTPUT 本机往外发送的数据报文,出去时由路由选择路径,OUTPUT在选择路径之前。
- FORWARD linux可以作为路由器使用,FORWARD可以设置转发的情况。
- POSTROUTING POSTROUTING在路由选择之后,相当于需要从本机出去的最后阀门。
4.在iptables中的filter表中配置INPUT时:
- interface时:
当时学习的时候有种误解:在INPUT还能对interface进行设置,那么到底hook function对应函数映射的为真实物理位置'关卡'设置于哪呢?
从功能上理解:
INPUT'关卡'的功能:
1、确定了数据报文是流向本机的
2、设置流向本机的数据报文满足匹配条件,执行相应的处理动作!
而interface只是匹配条件的一部分,即是从哪个网络接口流向本机的数据报文,此时本机是接收还是拒收!
内核中数据包的传输过程
-
当一个数据包进入网卡时,数据包首先进入PREROUTING链,内核根据数据包目的IP判断是否需要转送出去
-
如果数据包就是进入本机的,数据包就会沿着图向下移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它。本机上运行的程序可以发送数据包,这些数据包经过OUTPUT链,然后到达POSTROUTING链输出
-
如果数据包是要转发出去的,且内核允许转发,数据包就会向右移动,经过FORWARD链,然后到达POSTROUTING链输出
防火墙配置工具
- 用户空间的防火墙配置工具:iptables和firewalld
1.iptables
- 命令行工具,工作在用户空间
- 用来编写规则,写好的规则被送往netfilter,告诉内核如何去处理信息包
2.firewalld
- CentOS 7 引入了新的前端管理工具
- 管理工具:
- firewall-cmd 命令行
- firewall-config 图形
iptables学习时的实验环境
-
实验环境准备:
-
Centos7/8:
systemctl stop firewalld.service
systemctl disable firewalld. service -
Centos6:
service iptables stop
chkconfig iptables off
-
-
主机可能存在虚拟网卡的情况:
- 虚拟网卡的存在导致centos7/8上默认禁用了firewalld时,还是存在一些默认的防火墙规则
- 卸载libvirt-daemon此包
- 虚拟网卡与虚拟化技术相关,此处用不着,防止默认的防火墙规则影响接下来的实验换件,暂时卸掉。
-
centos7往后的版本推荐使用firewalld,iptables-server服务默认未安装。
[root@centos8-8 ~]# ip a
....
3: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> ...
....
4: virbr0-nic: <BROA...
....
[root@localhost ~]# dnf/yum remove libvirt-daemon