Linux学习第十五节-Selinux和firewalld介绍

一、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(公共的)

--无明确允许策略,默认策略是拒绝

--富规则优先匹配,自上而下匹配

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Shun Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值