加密技术和安全通信

NIST定义的安全通信具有三大条件

保密性
数据保密性
隐私性
完整性
数据完整性
系统完整性
可用性
数据可用性

安全攻击

主动攻击
伪装成发送或接收者:重放,消息篡改,拒绝服务等高级手段
被动攻击
监听

安全机制

加密
数字签名
访问控制
认证交换
路由控制等等

安全服务

认证交换
访问控制
数据保密性
连接保密性
无连接保密性
流量保密性
选择保密性等等
数据的完整性服务
不可否认性

密码算法和协议

对称加密—加密解密使用同一个密钥
非对称加密—公钥加密,私钥解密
单向加密(提取特征值)
认证协议
Linux操作系统:认证协议(openssl)

常见的加密算法和协议

对称加密:DES 3DES AES 高级加密等(加密的字节长度)

特性:
加密和解密使用同一个密钥
将原始数据分割成固定大小的块,逐个进行加密
缺陷:
通信对象过多导致需要的密钥数量也就过多
密钥分发的过程中在网络传输中可能被窃取

非对称加密

公钥加密:公钥是公开的
私钥解密:私钥是非公开的
(任何的加密算法都是公开的)
特性:
用公钥加密的数据,只能够用与之匹配的私钥进行解密
作用:
数字签名:主要在于发送方是自己想要找的
在数据提取特征值,使用单项加密方式,用发送的公钥加密,收到后,用私钥进行解密,查看特征值,同时在用同样的加密算法看特征是是否一致,来确保数据的完整性
密钥交换:用对方的公钥加密一个对称密钥发送给对方
常用加密算法:
RSA DSA ELGamal等

单向加密:只能加密,不能解密,提取特征值

特性:定长输出,拥有雪崩效应
算法:MD5 SHA128 SHA256 SHA512 ——->输出的长度为128bit/256bit/512bit
功能:数据完整性校验

作业:openssl介绍和原理了解

ssl———>HTTP—-https的区别

企业防火墙和安全策略

SELINUX:secure enhanced Linux,工作在Linux内核中

DAC:自主访问控制法则
MAC:强制访问控制

两种工作类型

strict:每个进程都要受到selinux的控制
argeted:仅有限个进程收到selinux控制,只监控容易被入侵的进程

sanbox:subject operation object
ubject: 进程
object: 进程或者文件(open read write chown)
selinux可以为每个文件提供安全标签,也就是为进程提供安全标签

SElinux规则库

selinux的状态

enforcing-强制,限制每个进程
permissicve-启用,每个受限的进程违规操作不会禁止,但是会被记录到审计日志中
disable-关闭selinux

相关命令

getenforce:获取selinux当前状态
serenforce:[0|1]
0:设置为permissive
1:设置为enforcing
这种设置方式只是临时有效,重启后又恢复
永久生效:
修改配置文件
[root@localhost ~]# cat /etc/selinux/config

给文件重新打标签:

[root@localhost ~]# chcon —help
Usage: chcon [OPTION]… CONTEXT FILE…
or: chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE…
or: chcon [OPTION]… —reference=RFILE FILE…
Change the SELinux security context of each FILE to CONTEXT.
With —reference, change the security context of each FILE to that of RFILE.

还原标签的命令

restorecon - restore file(s) default SELinux security contexts.

布尔值规则:
getsebool
getsebool -a 查看所有布尔值规则
getsebool <规则> 查看指定规则的布尔值
setsebool
setsebool - set SELinux boolean value
setsebool <规则>=[on|off] 设置指定规则的布尔值

日常测试环境(关闭selinux):

1.setenforce 0
2.sed -i

iptables

防火墙相关概念

逻辑分类
主机防火墙:为每个单个主机进行防护(个人防火墙)
网络防火墙:对网络入口进行防护,服务防火墙背后的局域网
云:
安全组——->主机防火墙
FaaS———->防火墙即服务(网络防火墙)
物理分类
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分通过软件实现
特点:性能高,成本高
软件防火墙:应用程序处理逻辑运行在通用硬件平台的防火墙
特点:性能低,成本低
通常硬件防火墙和软件防火墙会配合进行使用

*iptables:一个客户端代理,将用户空间的安全设定执行到内核空间里的netfilter(安全框架)中

iptables - 用户空间的代理软件
netfilter - 内核空间中的安全框架
**
##将用户空间的安全规则通过iptable代理到netfilter中执行
iptables/netfilter:共同组成了Linux平台下免费的包过滤防火墙

*netfilter:Linux操作系统核心层里的一个数据包处理模块(iptable无守护进程,不是一个真正意义上的服务,而是由内核提供的防火墙功能)

功能:
数据包过滤的防火墙功能
网络地址转换
数据包内容的修改

iptables基础知识

iptables根据他的rule区队数据包进行匹配
动作:放行accept,拒绝reject,丢弃drop等操作
rule存储在内核空间中的信息过滤表中,这些规则指定:源地址、目的地址、传输协议和服务类型等
netfilter位于内核空间中,是真正的防火墙(设置规则在input和output上)
网卡的驱动位于内核空间当中,netfilter也是位于内核空间中, 所以iptables+netfilter可以在内核空间中设置规则,当用户去访问用户空间中的应用程序时,数据包是要通过流经内核空间之后到达用户空间

如果需要我们转发报文,则不通过input链和output链
只需要经过prerouting链、forwarding链 postrouting链
路由前,转发,路由后
image.png

常用应用场景,报文流向

到本地某个进程的报文:
请求报文:prerouting———>input
响应报文:postrouting<———-output
由本地主机转发报文:prerouting——->forward———>postrouting
image.png

链的概念

防火墙的作用在于对经过的报文匹配“规则”,然后执行相关动作
多个规则组合在一起就称之为“链”
每经过一条链就要把链上的所有规则匹配一遍,若匹配到符合条件的规则就执行相应的动作
image.png
简单来说,多个规则组合成链,经过链的所有规则匹配一遍,符合条件的规则执行相应的动作

表的概念

每个链上都放置一串规则,但是有许多规则是类似的,这些规则可能是:
对IP或端口进行过滤
对报文进行修改
对网络地址进行转换等
我们将实现相同功能的规则放在一起的集合就称之为表
相同规则的集合称之为表,多张表的集合称之为链
iptables提供的表:
raw表:关闭nat上启用的连接追踪机制:iptables_raw内核模块提供该功能
mangle表:拆解报文,做出修改,并重新封装:iptables_mangle内核模块提供该功能
nat表:网络地址转换:iptables_nat内核模块提供该功能
filter表:负责过滤功能(防火墙):iptables_filter内核模块提供该功能

表拥有优先级
raw>mangle>nat>filter
我们所有定义的规则都在这四张表中
4表5链
raw mangle nat filter
prerouting input forward output postrouting

表链关系

每个链只能拥有某些规则,也就是某些表
prerouting链:raw mangle nat
input链:mangle filter nat
forward链:mangle filter
postrouting链:mangle nat
output链:raw mangle nat filter
只有output链上才都拥有四张表的规则
我们实际使用过程中,往往通过“表”为入口,对规则进行定义
表(功能)<———->链(钩子)
raw表:prerouting output
mangle表:所有链
nat表:prerouting input postrouting
filter表:input forward output
操作时, 是通过表,查询所定义的规则,以及该表规则所用于的链
[root@localhost ~]# iptables -L -t raw/mangle/nat/filter

注意:当数据包流经一个链时,会将当前的链的规则依次匹配,而定义的规则汇聚在表中,匹配时,因为有优先匹配,所以表就有了优先级
表的优先级
raw>mangle>nat>filter

如果想要Linux主机支持转发,需要开启内核的forward功能
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
0:未开启
1:开启

规则概念

规则:根据指定匹配条件来尝试匹配每个流经此处的报文,一旦匹配成功,则由后面指定的处理动作进行处理

匹配条件
基本匹配条件:SIP DIP 等等
扩展匹配条件:sport dport 等等(-m参数)
扩展匹配条件也是netfilter中的一部分,只是以模块的形式存在,如果使用则需要依赖对应的模块

处理动作
处理动作在iptables中称之为target,分为基本动作和扩展动作
常用动作
ACCEPT:允许数据包通过
REJECT:拒绝数据包通过,必要时会返回数据发送端一个响应的拒绝消息
DROP:直接丢弃数据包,不回应任何信息
SNAT;源地址转换,解决内网用户使用同一个公网地址上网问题
DNAT:目标地址转换
MASQUERED:SNAT的一种特殊形式,适用于动态、临时会变的IP上
REDTRECT:在本地去做端口映射
LOG:/var/log/message文件中记录日志信息,然后将数据包传递给下一跳规则,不对数据包做任何操作,只是做记录,让下一条规则去匹配
规则查询
以filter表进行实际操作,filter只有负责过滤功能
[root@localhost ~]# iptables -t filter -L
[root@localhost ~]# iptables -t filter -vxL
[root@localhost ~]# iptables -t filter -vxL OUTPUT
pkts bytes target prot opt in out source destination
packets:当前链的默认策略匹配到的包数量
bytes:当前链的默认策略匹配到的包大小
policy:当前链的默认动作策略 ACCEPT
pkts:对应匹配到的报文个数
bytes:对应匹配到的报文大小总和
target:规则对应的处理动作
prot:规则对应的协议,是否只针对某些协议应用此规则
opt:规则对应的选项
in:数据包由哪个接口(网卡)流入,设置那块网卡流入的报文需要匹配当前规则
out:数据包由哪个接口(网卡)流出,设置那块网卡流出的报文需要匹配当前规则
source:规则对应的源地址(IP或网段)
destination:规则对应的目标地址(IP或网段)

源地址和目标地址都anywhere,因为iptables默认进行名字解析,这样效率会比较低
规则操作
-t <表>:默认是raw
iptables -F <链>
-F:清除规则
增加规则
iptables -t filter -A INPUT <匹配条件> -j <大写action>
-A:追加规则
-I:插入规则
-j:指定动作
实例1:把关于icmp协议,源地址为192.168.10.1的数据报文丢弃
iptables -t filter -A INPUT -p icmp is 192.168.10.1 -j REJECT
删除规则
-D:删除指定链中的规则
实例1:把关于icmp协议,源地址为192.168.10.1的数据报文丢弃的规则删除
方法一:根据规则的具体匹配条件删除
iptables -t filter -D INPUT -p icmp s 192.168.10.1 -j REJECT
方法二:根据规则的编号删除(iptables -t filter —line-number查看编号)
iptables -t filter -D INPUT 1
修改规则
-R:修改规则
iptables -t filter -R INPUT -p icmp -s 192.168.10.1 -j REJECT
DORP———-请求超时
REJECT———-无法连接端口
依次匹配规则,符合条件的数据报文执行相对应的动作
如果符合的条件没有相对应的动作,则会继续进行匹配,直到匹配到符合条件的规则,并进行相应的动作的时候,才结束,如果没有匹配到,则进行默认动作

iptables -t filter -P INPUT DORP
-P:修改默认动作

保存规则
iptables-save > /etc/sysconfig/iptables-config
每次重启后,规则都会恢复成iptables-config文件配置内容
自定义路径:/home/iptables.txt
可将特定应用场景下的自定义规则保存在自定义路径下,待需要使用时再将其导入使用
导入规则
iptables-restore < /home/iptables.txt

匹配条件

基本匹配条件
-s:指定源地址
-d:指定目的地址
-p:指定协议类型
-i/-o:指定网卡的流入和流出
-i:用于网卡的流入,所以只能作用于REPROUTING INPUT FORWARD链上
-o:用于网卡的流出,所以只能作用于POSTROUTING OUTPUT FORWARD链上
扩展匹配条件
-m <扩展模块>
tcp/udp扩展模块
—dport:指明目的端口
—sport:指明源端口
—src-range模块
—src-range:指明地址段
实例1:
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -m iprange —src-range 192.168.220.10-192.168.220.11 -j REJECT
string扩展模块:匹配报文中的字符串
—algo:指定匹配算法,bm和kmp
—string:指定需要匹配的字符串
time扩展模块:时间段匹配,如果报文在到达时间范围内,则符合匹配条件
—timestart [起始时间] —timstop [结束时间]
—weekdays [星期]
—mouthdays [月份]
—datestart [起始日期] —datestop [结束日期]
connlimit扩展模块
limit扩展模块:对报文到达的速率进行限制,就是限制单位时间内流入包的数量
桶数据结构
state扩展模块

自定义链

当默认链的规则非常多的时候,不方便管理,如果INPUT链中存放着几百条规则,当我们想要修改特定规则时,可以使用自定义链
iptables -t filter -N <自定义链名>
-N:创建自定义链
###增删改查同上
创建的自定义链需要被引用到五大链中才能生效,当作动作来使用
删除自定义链
-X
前提是自定义链没有被引用且保证自定义链中没有任何规则

firewall概述

图形化的配置工具:firewall-config
命令行客户端:firewall-cmd命令
用于配置firewall永久性或非永久性运行时间改变:
依赖iptables工具与执行数据包筛选的内核中netfilter通信

firewall和iptables的关系
firewall和iptablesu一样本身不具备防火墙功能
而是把用户的安全策略交给内核中的安全框架neifilter执行
firewall和iptabels之间本质的不同
1.iptables在/etc/sysconfig/iptables-config配置文件中保存
firewall将配置文件存储在/usr/lib/firewall/系统中保存和/etc/firewall/用户配置地址中xml格式文件保存
2.使用iptables每一个单独更改意味着清除旧规则和从/etc/sysconfig/iptables-config读取新的规则
3.firewall不再创建任何新的规则,仅仅运行规则中的不同之处,因此firewall可以在运行时间内改变设置而不丢失现有连接

zone区域
networkmanager通知firewall一个接口所属的区域,默认新接入的接口会被分配到默认区域当中
1.trusted(信任):可以接受所有网络连接
2.home(家庭):用户家庭网络,可以信任基本网络内的其他不会危害到自己计算机的机器
3.internal(内部):用于内部网路,可以信任基本网络内的其他不会危害到自己计算机的机器
4.worker(工作):用于工作网络
5.public(公共):用于公共网络
6.external(外部):出去的ipv4网络连接通过此区域伪装或转发,
7.dmz(军事)
8.block(限制)
9.drop(丢弃)
管理防火墙:firewall-cmd命令
每一个zone就是一套规则
[root@localhost ~]# firewall-cmd —get-default-zone 获取默认区域
[root@localhost ~]# firewall-cmd —state 获取防火墙当前状态
[root@localhost ~]# firewall-cmd —get-active-zone 查看当前活动区域
[root@localhost ~]# firewall-cmd —zone=public —list-all 查看指定区域中的所有配置
[root@localhost ~]# firewall-cmd —list-all 查看所有区域的配置
[root@localhost ~]# firewall-cmd —get-service 列出所有预定服务
[root@localhost ~]# firewall-cmd —set-default-zone 设置默认区域
[root@localhost ~]# firewall-cmd —zone= —add-source= 设置网络地址到指定的区域当中
[root@localhost ~]# firewall-cmd —zone= —remove-source= 删除指定区域中的网络地址
[root@localhost ~]# firewall-cmd —add-interface= 添加网络接口

[root@localhost ~]# firewall-cmd —reload 重载防火墙(所有更改在重载后生效)
[root@localhost ~]# firewall-cmd —permanent 命令设置永久生效