SELinux
安全增强型linux(Security-Enhanced Linux)简称SELlinux,它是一个Linux内核模块,也是Linux的一个安全子系统
SELinux的结构配置非常复杂,而且有大量概念性的东西,要学精的话花费的精力比较大
系统资源都是通过进程来读取更改的,为了保证系统资源的安全,传统的Linux使用用户,文件权限的概念来限制资源的访问,通过对比进程的发起用户和文件权限以此来保证系统资源的安全,这是一种自由访问控制方式;但是随着系统资源安全性要求提高,出现了在Linux下的一种安全强化机制(SELinux),该机制为进程和文件加入了除权限外更多的限制来增强访问条件,这种方式为强制访问控制(MAC)这两种方式最直观的对比就是采用传统DAC,root可以访问任何文件,而在MAC下就算是root也只能访问设定允许的文件
SELinux的作用及权限管理机制
SELinux主要作用就是最大限度的减少系统中服务进程可访问的资源(最小权限原则)
主要是通过context上下文的概念
可以使用ls -Z查看
u:user
r:规则
t:type类型
每一个进程都有自己的selinux
什么是上下文?context
上下文是SELinux的核心
上下文可分为【进程安全上下文】和【文件安全上下文】
一个【进程安全上下文】一般对应多个【文件安全上下文】
只有两者的安全上下文对应上了,进程才能访问文件,它们的对应关系由政策中的规则决定
文件安全上下文由文件创建的位置和创建文件的进程所决定,而且系统有一套默认值,用户也可以对默认值进行设定
注意:单纯的移动文件操作并不会改变文件的安全上下文安全上下文的结构及含义
安全上下文有四个字段,分别用冒号隔开
- 第一段:u身份识别
unconfined:不受限制的用户,它主要是为了防止本地以外的人的访问,所以一般本地设置的环境变量不受影响,selinux管不着
system_u:系统用户只有系统有权限- 第二段:r规则
判断这个目录或者文件是属于哪个应用程序的
object_r,文件或者目录的资源
system_r,系统资源,不过注意普通用户创建的也属于system_r- 第三段:t类型(最重要的)
访问策略,一个进程能否读取数据,就看这里了配置文件分析
selinux配置文件?
- SELinux有三种工作模式
1)enforcing:强制模式。违反SELinux规则的行为将被阻止并记录到日志中
2)permissive:宽容模式。违反SELinux规则的行为只会记录到日志中
3)desable:关闭SELinux。
SELinux工作模式可以在/etc/selinux/config中设定
如果想从disable切换到enforcing或者permissive的话,需要重启系统,反过来也一样
enforcing和permissive模式通过setenforce 1 | 0 命令快速切换
注意,如果系统已经在关闭SELinux的状态下运行了一段时间之后再打开SELinux启动速度可能会比较慢,因为系统要为磁盘中的文件创建安全上下文
SELinux日志记录需要借助auditd.service这个服务,请不要禁用
上下文的修改
“给文件打安全标签”
相关语法:
1)chcon [OPTION]… CONTEXT FILE…
2)chcon [OPTION]… [-u USER] [-r ROLE] [-t TYPE] FILE…
3)chcon [OPTION]… --reference=RFILE FILE…
4)-R选项:可递归进行打安全标签
还原文件的默认标签:restorecon [-R] /path/to/file
iptables 防火墙管理工具
众所周知,相较于企业内网,外部的公网环境非常恶劣,罪恶丛生。在公网与企业内网之间充当保护屏障的防火墙虽然有软硬件之分,但主要功能都是依据策略对穿越防火墙的流量进行过滤。防火墙策略可以基于流量的源地址,目标地址,端口号,协议,应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。这样一来就可以保证仅有合规的流量在企业内网和外部公网之间流动了
其实iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已,或者说它们只是一种服务。iptables服务会把配置好的防火墙策略交给内核层面的nftables包过滤框架来处理。换句话说,当前在linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理linux系统中的防火墙策略,我们只需要配置妥当其中一个就足够了。虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是一致的
在早期的linux系统中,默认是用的是iptables防火墙管理服务来配置防火墙。尽管新型的firewalld防火墙已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因继续使用iptables。考虑到iptables在当前生产环境中仍然有顽强的生命力,为了在遇到iptables问题的时候可以胸有成竹,觉得还是有必要好好地了解一下这项技术。而且各个防火墙配置思路是大致相同的,在掌握了iptables后再学习其他的防火墙管理工具时也有借鉴意义策略与规则链
操作顺序:从上到下,如果没有匹配则执行默认(放行或阻止)
防火墙会从上至下的顺序来读取配置中的策略规则,在找到匹配项后就立即结束匹配并去执行匹配项中定义的行为(即放行或阻止)如果在读取完所有的策略规则之后没有匹配项,就去执行默认策略。以一般普遍性理论而言,防火墙规则的设置有两种:一种是“放行”一种是“阻止”当防火墙的默认策略为拒绝时,就要设置允许规则,否则谁都进不来,反之亦然
iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下:
- filter表——过滤数据包
- nat表——用于网络地址转换(ip,端口)
- mangle表——修改数据包的服务类型,ttl,并且可以配置路由实现QoS
- raw表——决定数据包是否被状态跟踪机制处理
- input链——进来的数据包应用此规则链中的策略
- output链——外出的数据包应用此规则链中的策略
- forward链——转发数据包时应用此规则链中的策略
- prerouting链——对数据包作路由选择前应用此链中的规则(所有数据包进来的时候都先由这个链处理)
- postrouting链——对数据包作路由选择后应用此链中的规则(所有数据包出来的时候都先由这个链处理)
以一般普遍理性而论,从内网到外网的流量都是良性且可控的,因此我们用的最多的就是input链,该规则链可以增大黑客人员从外网入侵内网的难度
基本命令参数
iptables是一款基于命令行的防火墙策略管理工具,具有大量参数,学习难度较大。好在对于日常的防火墙策略配置来讲,我们还无需特别深入的了解如“四表五链”这样的理论概念,只需要掌握常用的参数并且做到灵活搭配即可,这就足以应对日常工作了
iptables命令可以根据流量的源地址,目的地址,传输协议,服务类型等信息进行匹配,一单匹配成功iptables就会根据策略所预设的动作来处理这些流量。另外,防火墙规则策略是从上至下执行的,因此要把较为严格,优先级较高的策略规则放在前面,以免发生错误
参数:
-P:设置默认策略
-F:清空规则链
-L:查看规则链
-A:在规则链的末尾加入新规则
-I num:在规则链头部加入新规则
-Dnum:删除某一条策略
-s:匹配来源地址ip/mask,加感叹号“!”表示反选
-d:匹配目标地址
-i:网卡名称匹配从这块网卡流入的数据
-o:网卡名称匹配从这块网卡流出的数据
-p:匹配协议,如tcp,udp,icmp
–dport num:匹配目标端口号
–soprt num:匹配来源端口号TCP与UDP的区别
1)tcp是面向连接的(在客户端和服务器之间传输数据之前要建立连接)udp是无连接的(发送数据之前不需要建立连接)
2)tcp提供可以靠服务(通过tcp传输的数据,无差错,不丢失,不重复,且按序到达)udp提供面向事务的简单的不可靠的传输
3)udp具有比较好的实时性,工作效率比tcp高,适用于对高速传输和实时性要求比较高的通讯或者广播通信。随着网速的提高,udp使用越来越多
4)每一条tcp连接只能是点到点的,udp支持一对一,一对多和多对多的交互通信
5)tcp对系统资源要求比较多,udp相对较少
6)udp程序结构更加简单
7)tcp是流模式,udp是数据报模式
Firewalld
RHEL 7系统中继承了多款防火墙工具其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板)用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。区域 默认规则策略
drop:丢弃所有进入的包,而且不给出任何回应
block:拒绝所有外部发起的链接,允许内部发起的链接
public:允许指定的进入链接
external:同public,处理伪装的进入链接,一般用于路由转发
dmz:允许受信任的计算机被限制的进入链接
work:允许受信任的计算机被限制的进入链接
home:同work,如果流量和ssh,dhcpv6-client等服务相关,则允许
internal:同work,范围针对所有互联网用户
trusted:信任所有链接
不同区域间的差异是对待数据包的默认行为不同,firewalld的默认区域为publicfirewalld的状态
–state:查看防火墙的状态
–reload:重新加载防火墙,中断用户的连接,将临时配置清除,加载配置文件中的永久配置
–complete-reload:重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
–panic-reload:紧急模式,强制关闭所有网络连接,–panic-off是关闭紧急模式
令行终端是一种极富效率的工作方式,firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本
–permanent:永久生效
–reload:重新加载,立即生效
查看firewalld服务当前所使用的区域:
[root@base1 ~]# firewalld-cmd --get-default-zone
查询网卡ens33在firewalld服务中的区域:
[root@base1 ~]# firewalld-cmd --get-zone-of-interface=ens33
查询public区域是否允许请求和https协议的流量:
[root@base1 ~]# firewalld-cmd --zone=public --query-service=ssh
[root@base1 ~]# firewalld-cmd --zone=public --query-service=https
把firewalld服务请求https协议的流量设置为永久允许,并立即生效:
[root@base1 ~]# firewalld-cmd --zone=public --add-service=https --permanent
把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效:
[root@base1 ~]# firewalld-cmd --zone=public --add-port=8080-8081/tcp
把原本访问本机888端口的流量转发到22端口,要求长期有效且立即生效
[root@base1 ~]# firewalld-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22 --permanent
使本机拒绝客户端192.168.1.1访问http服务
[root@base1 ~]# firewalld-cmd --add-rich-rule='rulefamily=ipv4 source address=192.168.1.1 port port=80 protocol=tcp reject' --permanent
图形化管理firewalld
需要操作系统安装有图形化界面
命令行打开firewalld图形化管理界面:[root@base1 ~]# firewall-config
或者:
1)选择运行时(runtime)模式或永久(permanent)模式的配置
2)可选的策略集合区域列表
3)常用的系统服务列表
4)当前正在使用的区域
5)管理当前被选中区域中的服务
6)管理当前被选中区域中的端口
7)开启或者关闭snat(地址转换协议)
8)设置端口转发策略
9)控制icmp服务的流量
10)管理防火墙规则
11)管理网卡设备
12)被选中区域的服务,若勾选了相应服务前面的复选框,则表示允许与之相关的流量
13)firewalld-config工具的运行状态