Selinux和Firewalled

Posted 向阳-Y.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Selinux和Firewalled相关的知识,希望对你有一定的参考价值。

Selinux

SElinux配置文件:/etc/sysconfig/selinux

SElinux工作类型:
targeted:用来保护常见的网络服务,仅有限进程受到selinux控制,默认类型
minimum:targeted的修改版,只对选择的网络服务,仅对选中的进程生效 mls:提供mls机制的安全性,国防级别的

SELinux工作模式:
enforcing: 强制模式,拦截并记录非法访问
permissive: 宽容模式,只记录不阻止
disabled: 禁用SElinux

setenforce 0为零时关闭selinux
getenforce查看当前selinux的模式
安全上下文的组成:
所有文件、端口、进程都会被打上安全标签
查看文件的上下文标签:ls -lZ
查看进程的上下文标签:ps auxZ

ps auxZ | grep *可以检索想要的标签


上图为ls -lZ后的效果
system_u:object_r:etc_t:s0为例:分别表示为用户:角色:类型:级别
每一个系统账户都被映射到一个selinux用户

用户:semanage login -l可以查看用户类型

角色:定义数据是用户、程序、还是文件资源object_r表示文件或目录等资源,system_r表示进程

类型:重要属性,定义何种进程可以访问何种类型的文件,对于进程和文件,类型字段意义不同
在资源文件(object)上称为type
在主体进程(subject)上称为domain

级别:s0级别最低,s15级别最高

举例,创建一个httpd服务的网站index.html,当selinux服务开启时网站不能正常访问,因为标签为admin_home_t,但创建index2.html时,标签类型为httpd_sys_content_t时则可以正常访问

修改文件标签方法一(修改后不可还原):

semanage fcontext -a -t httpd_sys_content_t index.html   #其中-a为添加 -t为修改类型

类型修改完后刷新:restorecon -Rv index.html此时访问index.html则可以成功访问
修改文件标签方法二(修改后可以还原)
chcon [options] file
选项:
-R 递归修改
-t 修改类型
-r 修改角色
-u 修改用户

chcon -t httpd_sys_content_t index.html

下面将用ssh的端口的安全标签举例:

ssh默认端口22
下面将修改ssh默认配置文件

vim /etc/ssh/sshd_config


例如图上将其修改为2202

这时使用systemctl restart sshd,发现服务重新启动不了

这是因为selinux察觉到一个陌生的端口正在尝试访问ssh,所以直接被拒绝了.
以下命令可以查看selinux仅接受哪些端口访问sshd

semanage port --list | grep ssh

可以看出仅接受22号端口

那么我们怎么让selinux接受2202的端口呢?
继续往下看!

semanage port -a -t ssh_port_t -p tcp 2202 

这时再查看,发现端口已经增加了2202

再次重启sshd服务:systemctl restart sshd发现重启成功了!
可以使用netstat -tunlp | grep ssh查看监听端口进行检验
最后,使用xshell连接Linux虚拟机,发现连接不上了(因为配置文件中,已经把端口改成2202了

连接时把端口改诚2202即可,ssh root@IP_ADDR:2202
使用以下命令可以将添加的端口标签删除

semanage port -d -t ssh_port_t -p tcp 2202

Firewalled

查看firewalled状态

systemctl status firewalld.service

firwalld管理配置方法

命令行配置:firewall-cmd
图形界面配置:firewall-config(yum -y install firewall-config)
修改配置文件/etc/firewalld/
查看防火墙区域:
查看默认区域firewall-cmd --get-default-zone
查看当前区域firewall-cmd --get-active-zone
firewalld默认提供了九个zone
drop(丢弃)、block(限制)、public(公共)、external(外部)、dmz(非军事区)、work(工作)、home(家庭)、internal(内部)、trusted(信任)
查看防火墙规则:

firewalled-cmd --list-all


其中,service:cockpit dhcpv6-client ssh可以通过浏览器访问,例如,systemctl start cockpit,之后浏览器访问ipaddr:9090
firewalld添加一个服务:

firewall-cmd --add-service=http --permanent
firewall-cmd --reload

firewalld紧急模式

firewall-cmd --panic-on  #拒绝所有包

阻塞所有ICMP包

firewall-cmd --add-icmp-block=echo-request

富规则/自定义规则

1.拒绝所有来自192.168.1.100流量

firewall-cmd --add-rich-rule 'rule family=ipv4 source adderss=192.168.1.100 reject'#注意是单个ip就不能加/24

2.拒绝192.168.1.100 ssh连接

firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.100 service name =ssh reject'  #允许为access

3.将所有来自192.168.1.100访问的80端口都转换为8080

firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.100 forward-port port =80 protocol=tcp to-port=8080 '

富规则举例:

firewall-cmd --add-port=8080/tcp
firewall-cmd --add-rich-rule=' rule family=ipv4 source address=192.168.1.100/24 forward-port port=80 protocol=tcp to-port=8080'

以上是关于Selinux和Firewalled的主要内容,如果未能解决你的问题,请参考以下文章

Docker-CentOS开启防火墙firewalled映射Docker端口

Android : 为系统服务添加 SELinux 权限 (Android 9.0)

Linux下SELinux的原理架构及代码解析

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

linux 权限

微信小程序代码片段