一、Selinux
1.SELinux:Security Enhanceed Linux,即安全增强的linux
SELinux是一个Linux内核的安全模型,提供了访问控制安全策略机制,是美国国家安全局(NSA)在Linux社区帮助下开发的一种安全访问控制体系,是Linux历史上最杰出的安全子系统。
2.系统中两种访问控制机制
①DAC:自主访问控制,即传统的用户权限控制;
②MAC:强制访问控制,通过一套安全策略来控制主体和客体之间的交互。
一个主体进程想要访问客体资源必须同时满足DAC和MAC。
3.SElinux机制
所有的进程和文件都被标记一种类型,类型定义了进程的操作域,每一个进程都被限制在自己的活动域中,SElinux 策略规则定义了进程和文件之间的访问权限,仅当有明确的策略规则时才会被允许。
4.SELinux配置文件
/etc/selinux/config 修改配置文件可以设置SELinux模式。
5.SELinux工作类型
* targeted:用来保护常见的网络服务,仅有限进程受到selinux控制,默认类型;
* minimum:targeted的修改版,只对选择的网络服务,仅对选中的进程生效;
* mls:提供mls机制的安全性,国防级别的。
6.SELinux工作模式
enforcing: 强制模式,拦截并记录非法访问;
permissive: 宽容模式,只记录不阻止;
disabled:禁用SElinux。
7.临时设置SELinux模式
--0 表示设置为permissive;
--1 表示设置为enforcing。
#setenforce 0 表示临时设置为permissive;
#setenforce 1 表示临时设置为enforcing;
#getenforce 表示查看当前SELinux模式。
8.安全上下文
所有文件、端口、进程都会被打上安全标签,这个标签就是安全上下文。
#ls -lZ 表示查看文件的上下文标签
#ps auxZ 表示查看进程的上下文标签
9.安装httpd服务,操作安全上下文
①安装httpd服务,开启服务
# yum -y install httpd
# systemctl start httpd
②在/var/www/html/目录下创建1.txt文件,并查看安全上下文
# cd /var/www/html/
#touch 1.txt
#echo hello world! > 1.txt
#ls -lZ
③关闭firewalld或者不关闭firewalld放行80端口
关闭firewalld:
#systemctl stop firewalld 表示停止防火墙
#systemctl disable firewalld 表示开机不自启动防火墙
#systemctl is-enabled firewalld 表示查看防火墙开机自启动的模式
不关闭firewall放行80端口:
#firewall-cmd --add-port=80/tcp --permanent 表示永久添加放行端口
#firewall-cmd --remove-port=80/tcp --permanent 表示永久删除放行端口
#firewall-cmd --reload 表示修改生效
#firewall-cmd --list-ports 表示查看放行端口
④通过浏览器访问http://ip/1.txt网页
10.httpd服务的配置文件位置
/etc/httpd/conf/httpd.conf 可进行默认的安全上下文的目录位置,httpd服务的默认为/var/www/html/
11.安全上下文参数解释
system_u:object_r:admin_home_t:s0
字段含义:用户:角色:类型:级别
用户:每一个系统账户都被映射到一个selinux 用户
#semanage login -l --查看系统用户与selinux账户的映射
角色:定义数据是程序、用户、还是文件资源
object_r:代表是文件或目录等文件资源
system_r:代表进程
类型:重要属性,定义何种类型的进程可以访问何种类型的文件资源对于进程和文件,类型字段意义不同
在资源文件(object)上称为type
在主体进程(subject)称为域domain
级别:安全级别,从s0到s15,s0是最低级别
12.安全上下文修改
①永久修改,修改后无法还原
# semanage fcontext [修改默认标签,修改后无法还原]
选项
-a 添加
-t 修改类型
[root@myth ~]# semanage fcontext -a -t httpd_sys_content_t '/test(/.*)?'
[root@myth ~]# ls -Z /test/index.html
-rw-r--r--. root root unconfined_u:object_r:default_t:s0 /test/index.html
[root@myth ~]# restorecon -Rv /test/* [刷新下默认值]
unconfined_u:object_r:default_t:s0- >unconfined_u:object_r:httpd_sys_content_t:s0
[root@myth ~]# ls -Z /test/index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /test/index.html
②修改标签后可以还原
#chcon [options] file [修改后的标签可以还原]
选项:
-R 递归修改-t 修改类型
-r 修改角色
-u 修改用户
[root@myth ~]# chcon -t httpd_sys_content_t /test/index.html
[root@myth ~]# ls -Z /test/index.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 /test/index.html
13.向现有的端口标签中添加新的端口
方式一:
首选修改sshd_conf配置文件,把SSH的访问端口修改为2202
[root@myth ~]# vim /etc/ssh/sshd_config
...............
Port 2202
................
重启sshd服务:
[root@difu1909 ~]# systemctl restart sshd
Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details.
方式二:
[root@difu1909 ~]# semanage port -a -t ssh_port_t -p tcp 2202 表示添加新的2202端口
[root@difu1909 ~]# semanage port --list | grep ssh 表示查看端口标签
ssh_port_t tcp 2202, 22
[root@difu1909 ~]#
[root@difu1909 ~]# systemctl restart sshd 表示重启sshd服务
[root@difu1909 ~]# semanage port -d -t ssh_port_t -p tcp 2202 表示删除新的2202端口
[root@difu1909 ~]# semanage port --list | grep ssh
ssh_port_t tcp 22
二、firewalld
1.Linux防火墙介绍
Linux防火墙工作在网络层,主要实现对数据包的过滤和限制,属于典型的包过滤防火墙。
Linux系统中的防火墙是基于内核中的netfilter实现,netfilter是内核中网络数据包过滤模块,对任何传入、传出、转发的数据包进行检查,可以对数据包进行拒绝、丢弃、修改等操作。
在RHEL6中,可以使用iptables命令工具对netfilter进行管理控制在RHEL7之后,系统默认使用firewalld工具对netfilter进行管理控制,同时也支持使用iptables, Firewalld
RHEL7、RHEL8系统默认已安装firewalld
2.firewalld
命令行配置 #firewall-cmd
图形界面配置 #firewall-config (yum -y install firewall config)
修改配置文件 /etc/firewalld/
3.firewalld区域
firewalld和iptables一个大的区别就是firewalld引入了区域概念(zone)
区域zone: 区域定义了网络连接的可信等级,数据包要进入到内核必须要通过这些zone中的一个,而不同的zone里定义的规则不一样(即信任度不一样,过滤的强度也不一样)。可以根据网卡所连接的网络的安全性来判断,这张网卡的流量到底使用哪个zone,比如eth0的流量全部使用zone1的过滤规则,eth1的流量使用zone2。一张网卡同时只能绑定到一个zone 。
# firewall-cmd --get-zones 表示查看有哪些区域、默认提供了九个zone(区域)
block dmz drop external home internal public trusted work
#firewall-cmd --get-default-zone 表示查看当前默认区域是public zone
public
#firewall-cmd --get-active-zones 表示查看当前正在使用的区域是public zone
public
4.firewalld规则
①查看规则:
#firewall-cmd --list-all 查看默认区域和活动区域的所有策略
#firewall-cmd --list-services 查看默认区域允许哪些服务
#firewall-cmd --list-ports 查看默认区域允许哪些端口
#firewall-cmd --list-all-zones 查看所有区域的默认规则
②规则配置:
#firewall-cmd --add-service=SERVICE_NAME 表示将服务添加到默认区域,即放行该服务
#firewall-cmd --zone=ZONE 表示指定区域,未指定区域都表示使用默认区
#firewall-cmd --add-port=PORT/tcp 表示放行指定的TCP端口
#firewall-cmd --add-interface=INTERFACE 表示该网卡流量引至默认区域
#firewall-cmd --change-interface=eth0 --zone=ZONE 表示修改网卡所在区域
#firewall-cmd --add-source=IP 表示将指定的源IP流量引至默认区域
#firewall-cmd --add-masquerade 表示开启地址伪装,允许地址转换
#firewall-cmd --panic-on 表示紧急模式,拒绝多有的包
#firewall-cmd --panic-off 表示取消紧急模式
#firewall-cmd --add-icmp-block=echo request 表示阻塞ICMP的echo-request报文,默认允许所有的ICMP数据包
#firewall-cmd --add-forward port=port=88:proto= tcp:to port=80 表示本地端口转发 将所有访问本机88端口的数据包转发至80端口
#firewall-cmd --add-forward port=port=22:proto= tcp:to port=22:toaddr=192.168.10.8 表示跨主机转发,需要开始地址伪装
③规则清除:
#firewall-cmd --remove-port=80/tcp 表示清除放行指定的TCP端口80
#firewall-cmd --remove-service=mysql
#firewall-cmd --remove-source=192.168.10.0/24
④规则生效时间:
默认情况添加的规则都是临时规则,会立即生效,firewalld重启或规则重新载入,临时规则会清除。添加永久规则需要重新载入配置
#firewall-cmd --add-port=80/tcp --permanent 表示规则永久生效
--timeout 表示规则超时时间
#firewall-cmd --reload 表示重新载入配置
⑤富规则/自定义规则
rich rule 自定义的防火墙规则,可以定义更加具体丰富的规则
添加富规则:
# firewall-cmd --add-rich-rule='rule [source] [destination] service|port|protocol|forward-port| [accept|drop|reject]'
富规则实例:
1.拒绝所有来自192.168.10.0/24流量
#firewall-cmd --add-rich-rule 'rule family=ipv4 source adderss=192.168.10.0/24 reject '
2.拒绝192.168.10.254 ssh 连接
#firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.10.254 service name=ssh reject'
3.将所有来自192.168.10.254访问80都转发至8080
#firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.10.254 forward-port port=80 protocol=tcp to-port=8080 '
⑥firewalld规则匹配原则
--如果一个数据包的源IP地址匹配某个zone的sources,那么该zone的规则就适用于这个数据包;一个IP源只能属于一个zone
--如果一个数据包进入服务器的某个被zone匹配的接口,那么该zone的规则就适用于这个数据包;一个接口只能属于一个zone
--如果以上两个原则都不匹配,那么默认zone规则将被应用---public(公共的)
--无明确允许策略,默认策略是拒绝
--富规则优先匹配,自上而下匹配