1 安全技术和防火墙
1.1 安全技术
-
入侵检测系统(Intrusion Detection Systems):特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报警和事后监督为主,提供有针对性的指导措施和安全决策依据,类 似于监控系统一般采用旁路部署(默默的看着你)方式。
-
入侵防御系统(Intrusion Prevention System):以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以 阻断,主动而有效的保护网络的安全,一般采用在线部署方式。(必经之路)
-
防火墙( FireWall ):隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默 认情况下关闭所有的通过型访问,只开放允许访问的策略,会将希望外网访问的主机放在DMZ (demilitarized zone)网络中.
1.2 防火墙的分类
按保护范围划分:
主机防火墙:服务范围为当前一台主机 网络防火墙:服务范围为防火墙一次的局域网
按实现方式划分: 硬件防火墙:在专用硬件级别实现部分功能的防火墙 软件防火墙:运行于通用硬件平台之上的防火墙应用软件Windows防火墙
按网络协议划分: 网络层防火墙:OSI模型下四层,又称为包过滤防火墙 应用层防火墙/代理服务器:proxy代理网关、OSI模型七层
1.3 Netfilter
Linux防火墙是由Netfilter组件提供的,Netfilter工作在内核空间,集成在linux内核中
Netfilter 是Linux 2.4.x之后新一代的Linux防火墙机制,是linux内核的一个子系统。Netfilter采用模块化设计,具有良好的可扩充性,提供扩展各种网络服务的结构化底层框架。Netfilter与IP协议栈是无缝契合,并允许对数据报进行过滤、地址转换、处理等操作
Netfilter官网文档:https://netfilter.org/documentation/
2 防火墙工具
2.1 iptables
由软件包iptables提供的命令行工具,工作在用户空间,用来编写规则,写好的规则被送往netfilter,告
诉内核如何去处理信息包
2.2 firewalld
从CentOS 7 版开始引入了新的前端管理工具
软件包:
firewalld
firewalld-config
管理工具:
firewall-cmd 命令行工具
firewall-config 图形工作
2.3 nftables
此软件是CentOS 8 新特性,Nftables最初在法国巴黎的Netfilter Workshop 2008上发表,然后由长期的
netfilter核心团队成员和项目负责人Patrick McHardy于2009年3月发布。它在2013年末合并到Linux内
核中,自2014年以来已在内核3.13中可用。
它重用了netfilter框架的许多部分,例如连接跟踪和NAT功能。它还保留了命名法和基本iptables设计的
几个部分,例如表,链和规则。就像iptables一样,表充当链的容器,并且链包含单独的规则,这些规
则可以执行操作,例如丢弃数据包,移至下一个规则或跳至新链。
从用户的角度来看,nftables添加了一个名为nft的新工具,该工具替代了iptables,arptables和
ebtables中的所有其他工具。从体系结构的角度来看,它还替换了内核中处理数据包过滤规则集运行时
评估的那些部分。
2.4 netfilter中的四表五链
三种报文流向
流入本机:PREROUTING --> INPUT-->用户空间进程(访问我的服务)
流出本机:用户空间进程 -->OUTPUT--> POSTROUTING(穿过我)
转发:PREROUTING --> FORWARD --> POSTROUTING(分摊流量)
五链:
pre-rouing:路由选择前
post-routing:路由选择后
input:处理进入本机的数据包
output 处理从本机出去的数据包
forward:处理转发数据包
四表:
raw表:确定是否对该数据包进行状态跟踪 mangle表:为数据包设置标记(标记优先级) nat表:修改数据包重的源、目标IP地址或端口(地址转换) filter表:确定是否放行该数据包(过滤)
流量:发给你的 需要你转发的
选择合理的链做规则
链决定了在什么地方控制流量
表的作用是存放链
表中有链 链中有规则
表的划分:如何控制流量
3 iptables
3.1 iptables的组成概述
Linux 的防火墙体系主要工作在网络层,针对 TCP/IP 数据包实施过滤和限制,属于典型的包过滤防火墙(或称为网络层防火墙)。Linux 系统的防火墙体系基于内核编码实现, 具有非常稳定的性能和高效率,也因此获得广泛的应用。
netfilter/iptables:IP 信息包过滤系统,它实际上由两个组件 netfilter 和 iptables组成。 主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口等信息的处理。
-netfilter/iptables关系: netfilter:
属于“内核态”又称内核空间(kernel space)的防火墙功能体系。linux 好多东西都是内核态 用户态,那我们运维人员关注的是用户态, 内核我们关注不是很多,内核基本是我们开发人员关心的事情是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables :
属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。 netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。
3.2 基本格式
CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装iptables
基本格式:
iptables -t 指定表 子命令 指定链 规则
数据包常见控制类型:
-
ACCEPT:允许数据包通过。
-
DROP:直接丢弃数据包,不给出任何回 应信息。
-
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应信息。
-
LOG:在/var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
防火墙规则的“匹配即停止”对于 LOG 操作来说是一个特例,因为 LOG 只是一种辅助 动作,并没有真正处理数据包。
3.3 实际操作实验
不允许任何主机ping本主机
允许主机ssh端口 通过我的
允许任何主机tcp
允许任何主机udp
查看防火墙规则表
删除清空规则
设置默认策略(-般在生产环境中设置网络型防火墙、主机型防火墙时都要设置默认规则为DROP,并设置白名单.需要注意的是,当使用管理选项“-F”清空链时,默认策略不受影响。因此若要修改默认 策略,必须通过管理选项“-P”重新进行设置。另外,默认策略并不参与链内规则的顺序编排, 因此在其他规则之前或之后设置并无区别。)
加入拒绝,形成白名单(需要在这条命令之前加入可以通过的主机不然无法连接任何)
4 隐含扩展
iptables 在使用-p选项指明了特定的协议时,无需再用-m选项指明扩展模块的扩展机制,不需要手动加载扩展模块
要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件。
端口匹配: --sport 源端口、--dport 目的端口
可以是个别端口、端口范围
4.1 拒绝tcp连接端口号1w-3w的数据包
4.2 ICMP
icmp 协议的扩展选项
[!] --icmp-type {type[/code]|typename} type/code 0/0 echo-reply icmp应答 8/0 echo-request icmp请求
小实验:服务机能ping通 PC1 PC1 不能ping通服务机
服务机:
1.禁止其它主机ping本机
2.允许本机ping其他主机
3.当本机ping不通其它主机时提示目标不可达
客户机:
5 显示扩展模块
显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块
[-m matchname [per-match-options]]
5.1 multiport扩展
以离散方式定义多端口匹配,最多指定15个端口,原公式不支持离散的端口号
5.2 iprange扩展
指明连续的(但一般不是整个网络)ip地址范围
--src-range from[-to] 源IP地址范围
--dst-range from[-to] 目标IP地址范围
5.3 mac扩展
mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT chains
5.4 string扩展
对报文中的应用层数据做字符串模式匹配检测
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@localhost ~]#iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "bilibili" -j REJECT
#注意 请求的包不带字符,回复的包带字符 所以要 output</span></span>
5.5 time模块
根据将报文到达的时间与指定的时间范围进行匹配
<span style="background-color:#f8f8f8"><span style="color:#333333">[root@localhost ~]#date
#中国标准时间
2022年 08月 14日 星期日 22:26:07 CST
[root@localhost ~]#date -u
#美国标准时间
2022年 08月 14日 星期日 14:26:09 UTC
[root@localhost ~]#iptables -A INPUT -m time --timestart 14:00 --time 16:00 -j REJECT
iptables v1.4.21: unknown option "--time"
Try `iptables -h' or 'iptables --help' for more information.
[root@localhost ~]#rpm -ql iptables|grep time
/usr/lib64/xtables/libxt_time.so</span></span>
5.6 connlimit扩展
根据每客户端IP做并发连接数数量匹配
可防止Dos(Denial of Service,拒绝服务)攻击
--connlimit-above N #连接的数量大于N时匹配
--connlimit-upto N #连接的数量小于等于N时匹配
5.7 state扩展
-
NEW:新发出请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求
-
ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态
-
RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系
-
INVALID:无效的连接,如flag标记不正确
-
UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪