Selinux
SElinux配置文件:/etc/sysconfig/selinux
SElinux工作类型:
targeted:用来保护常见的网络服务,仅有限进程受到selinux控制,默认类型
minimum:targeted的修改版,只对选择的网络服务,仅对选中的进程生效 mls:提供mls机制的安全性,国防级别的
SELinux工作模式:
enforcing: 强制模式,拦截并记录非法访问
permissive: 宽容模式,只记录不阻止
disabled: 禁用SElinux
setenforce 0
为零时关闭selinuxgetenforce
查看当前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默认提供了九个zonedrop(丢弃)、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'