linux访问控制(二)防火墙基础和netfilter模块简述
分类:
文章
•
2024-07-29 18:22:16
一、一些防火墙的基础知识
1.1 按照协议栈划分防火墙
- 链路层防火墙:根据MAC地址定制处理规则
- 网络层防火墙:根据数据包中的协议类型(主要是IP/ICMP)和源目IP定制过滤规则
- 传输层防火墙:根据数据包中的协议类型(主要是TCP/UDP)和源目端口定制过滤规则
- 应用层防火墙:属于应用代理防火墙,性能要求最高。
1.2 特殊防火墙
- 域名防火墙
- 关联状态防火墙
- 例如允许内网访问外网而外网无法访问到内网。
- 要求防火墙具有追踪连接的能力,避免外部网络无法响应内部网络主动发起的请求。
1.3 按照逻辑划分防火墙
- 主机防火墙:针对单个主机进行防火。
- 网络防火墙:处于网络入口,针对网络入口进行防护,服务于防火墙背后的本地局域网。
1.4 按照物理状态划分防火墙
- 硬件防火墙:硬件+软件,针对特定硬件,高性能高成本
- 软件防火墙:运行在通用硬件平台上的软件防火墙,低性能低成本
1.5 防火墙部署原理
- 防火墙是一种基于一组用户定义的过滤规则来过滤进出的网络流量的安全系统。
- 防火墙的两个目标:消除不必要的通信,允许所有合法的通信自由通行。
1.6 常见防火墙拓扑:DMZ模式

- 控制策略
- 内网可以访问外网:防火墙需要进行源地址(内网IP→外网IP)转换。
- 内网可以访问DMZ:显而易见内网用户需要去管理DMZ中的服务。
- 外网不能访问内网
- 外网可以访问DMZ:显而易见DMZ本身就是提供服务的,防火墙需要进行目的地址转换(外网IP→内网IP)。
- DMZ访问内网有限制:避免DMZ被攻陷后内网也容易瘫痪的后果。
- DMZ不能访问外网
- 防火墙的作用
- 防止DMZ服务被外网攻击。
- 防止内网主动对外发起攻击。
- 防止内网对DMZ区域发起攻击。
- 防止DMZ区域对内网发起攻击。
- 防止来自v*n和外部接入网的攻击。
- 主机防火墙(通常为软件防火墙,如使用了netfilter框架的iptables工具)对每台主机的保护。
二、netfilter模块简述
2.1 真.简述
- netfilter是Linux的内核模块之一。
- netfilter自身也是模块化的
2.2 相关文件
- /lib/modules/$kernel_ver/kernel/net/ipv4netfilter/
- /lib/modules/$kernel_ver/kernel/net/ipv6netfilter/
- /lib/modules/$kernel_ver/kernel/net/netfilter/
- $kernel_ver是linux的内核版本
2.3 iptables与netfilter的关系
- iptabls是管理和控制linux的内核模块netfilter的工具,是实现用户与linux内核交互的工具之一,定义类似于shell。
- iptables可以让用户方便地进行动作和规则的指定。
- iptables位于用户空间,netfilter位于内核空间。
三、netfilter基本结构
3.1 结构与组件

- netfilter通过维护含有四个表(filter表、NAT表、mangle表、raw表)的内存块来起作用。
3.2 规则、链与表的关系
- 什么是规则?
- 什么是链?
- 一条条具体的过滤规则组合在一起,成为了链。
- 链又称为一个hook函数(钩子函数)
- 有哪些链?
- PREROUTING:会在任何传入到网络堆栈中的流量触发,在内核第一次对数据包进行路由决策之前就会触发该钩子。
- INPUT:若数据包是给本机的,路由会将数据包传到用户空间,但是在进行这个动作之前会触发该钩子。(配合FORWARD表可以将主机作为硬件防火墙)
- FORWARD:若数据包不是给本机的,路由会将数据包发给其他主机(从主机的某网络接口流入再从主机的某网络接口流出),会在第一次路由决策之后触发该钩子。若数据包在这个阶段被丢弃了,则保护了接下来的主机。FORWARD钩子是对linux的ip_forward工具的一种安全性增强功处理。

- OUPUT:用户空间产生的出栈流量在进入内核空间时会触发该钩子。(在第二次路由决策之前)
- POSTROUTING:从内核空间而来,通过网络接口出去的流量在进行转出路由决策(可能是第一次也可能是第二次)之后,在转出之前会触发该钩子。
- 什么是表?
- 有哪些表?
- filter表:过滤规则表
- nat表:地址转换表,可以转换源目地址和源目端口
- mangle表:修改数据标记位规则表,用来实现对数据包的拆分、打标记和还原。
- raw表:跟踪数据规则表,用来增强防火墙性能
- 表和链的关系示意图?


- 数据包在linux内核中被谁拦截了?
- 数据包在linux内核的网络堆栈中被不同的过滤钩子(链)按照一定顺序匹配并处理了。
- 数据包什么时候会触发这些钩子?
- 数据包在传入或者传出网络系统、传入或传出用户控件时,会通过网络堆栈,会触发这些钩子。
- 那iptables的角色是什么?
- 与iptables相关联的linux内核模块在这些钩子处进行注册。
- iptables使用注册成功的钩子控制网络堆栈中的流量动向来实现防火墙的功能。
- 那iptables可以注册多少个钩子?