SElinux和iptables介绍
目录
实验要求
思路总结
实验步骤
启用httpd修改安全上下文标签
SElinux补充
实验一:搭建web服务,设置任何人能够通过80端口访问。
实验二:禁止所有人ssh远程登录该服务器
实验三:禁止某个主机地址ssh远程登录该服务器,允许该主机访问服务器的web服务。
iptables补充
实验要求
要求使用SELinux
1、启用httpd服务,打开对应端口:80,并在其对应目录下创建文件,查看其安全上下文标签。
要求使用iptables
1、建web服务,设置任何人能够通过80端口访问。
2、禁止所有人ssh远程登录该服务器。
3、禁止某个主机地址ssh远程登录该服务器,允许该主机访问服务器的web服务。
服务器地址为172.24.8.128。
SELinux工作原理
SELinux是通过MAC的方式来控制管理进程,
它控制的主体是进程,而目标则是该进程能否读取的文件资源。
最终文件的成功访问还是与文件系统的rwx权限设置有关 。
主体(subject):就是进程
目标(object):被主体访问的资源,可以是文件、目录、端口等。
策略(policy):SELinux会依据某些服务来制定基本 的访问安全策略。
安全上下文(security context):主体与目标的安全上下文必须一致才能够顺利访问。
iptables四表五链
思路总结
SELinux 思路
- 安装并启动 httpd 服务,通过 firewall-cmd 放行 80 端口并重启防火墙,确保 web 服务基础运行环境就绪。
- 在 /var/www/html/ 目录下创建 test.html 文件并写入内容,重启 httpd 服务后,用浏览器验证 web 访问是否正常。
- 查看文件安全上下文标签,通过关闭 SELinux、更改标签再开启的操作,观察浏览器访问状态变化,最后恢复默认标签使访问恢复,以此验证 SELinux 安全上下文的作用。
iptables 思路
- 搭建 web 服务时,关闭 firewalld 并启动 iptables,配置规则允许任何人通过 80 端口访问,完成后进行网页访问测试;删除规则可使用相应删除命令。
- 禁止所有人 ssh 远程登录,通过 iptables 写入拒绝规则,用 xshell 测试连接是否失败,需删除规则时执行对应删除操作。
- 针对特定主机(如 192.168.48.128),设置 iptables 规则禁止其 ssh 远程登录,同时允许其访问 web 服务,精准控制该主机的访问权限。
实验步骤
启用httpd修改安全上下文标签
安装httpd服务启用并且放行
[root@stoki ~]# yum -y install httpd #安装httpd
[root@stoki ~]# systemctl start httpd #打开httpd
[root@stoki ~]# firewall-cmd --add-port=80/tcp --permanent #放行端口80
[root@stoki ~]# firewall-cmd --reload #重启防火墙
[root@stoki ~]# firewall-cmd --list-ports #查看放行端口列表
编辑http访问文件并且重启
[root@stoki ~]# cd /var/www/html/ #切换目录
[root@stoki html]# vim test.html #编辑web文件<h1>testing</h1> #写入内容<div id="datetime"><script>setInterval("document.getElementById('datetime').innerHTML =new Date().toLocaleString();", 1000);</script></div>[root@stoki html]# systemctl restart httpd #重启服务
浏览器访问验证
查看其上下文
关闭selinux,更改其安全标签,再打开selinux,此时已经浏览器无法访问页面
测试
最后恢复其默认标签可以访问
[root@stoki html]# chcon -t httpd_sys_content_t test.html
SElinux补充
安全上下文用冒号分为四个字段:Identify :role:type:MLS
身份标识(Identify):相当于账号方面的身份标识,主要有以下三种常见的类型:
root:表示root的账号身份;
system_u:表示程序方面的标识,通常就是进程;
unconfined_u:代表的是一般用户账号相关的身份。
角色(role):通过角色字段,可知道这个数据是属于程序、文件资源还是代表用户。一般角色有:
object_r:代表的是文件或目录等文件资源;
system_r:代表的是进程。
类型(type):在默认的targeted策略中,Identify与role字段基本上是不重要的,重要的在于
这个类型字段。而类型字段在文件与进程的定义不太相同,分别是:
type:在文件资源上面称为类型。
domain:在主体程序中则称为域。
domain需要与type搭配,则该程序才能够顺利读取文件资源。
最后一个字段是和MLS和MCS相关的东西,代表灵敏度,
一般用s0、s1、s2来命名,数字代表灵敏度的分级。数值越大、灵敏度越高。SELinux三种模式
- enforcing: 强制模式,代表SELinux正在运行中,开始限制domain/type。
- permissive:宽容模式,代表SELinux正在运行中,不过仅会有警告信息并
不会实际限制domain/type的访问。
- disabled:关闭,SELinux并没有实际运行。
实验一:搭建web服务,设置任何人能够通过80端口访问。
关闭firewalld启动iptables,并且写入规则(启动iptables后,不写入默认是拒绝的)
网页测试
删除规则使用
[root@localhost ~]# iptables -D INPUT 1 #删除编号为1的input规则
实验二:禁止所有人ssh远程登录该服务器
使用iptables写入规则
测试使用xshell连接失败
删除规则
实验三:禁止某个主机地址ssh远程登录该服务器,允许该主机访问服务器的web服务。
服务地址(192.168.48.130) 主机地址(192.168.48.128)
拒绝192.168.48.128通过ssh远程连接服务器:
[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.48.128 --dport 22 -j DROP
允许192.168.48.128访问服务器的web服务:
[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.48.128 --dport 80 -j ACCEPT
iptables补充
让iptables规则永久生效
默认iptables的规则在重启后会失效,所以需要将规则持久化。
iptables-save > /etc/iptables.rules
将 iptables 规则保存到 /etc/iptables.rules 文件中,可以使用以下命令来加载。
iptables-restore < /etc/iptables.rules
为了在系统启动时自动加载 iptables 规则,可以将上述命令添加到 /etc/rc.local 文件中。
该文件中的命令将在每次系统启动时自动执行。