9. RedHat认证-防火墙管理和Selinux

9. RedHat认证-防火墙管理和Selinux

Linux软防火墙

从逻辑上讲,防火墙可以大体分为主机防火墙和网络防火墙。

主机防火墙:针对于单个主机进行防护。

网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。

网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)

从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

Linux的iptables

Linux本身是不具备防⽕墙功能的。虽然Linux不具备防⽕墙功能,但是Linux的内核管控着所有的⽹络流量。
Linux的防⽕墙功能是通过内核的net_filter模块提供的。只要内核有这个模块,那么就有防⽕墙功能。

Linux的防⽕墙功能是net_filter模块提供的

iptables是⼀个客户端,客户端是⽤来接收⽤户命令的

iptables将⽤户的命令转换成对应的net_filter⾥⾯的过滤规则

# 介绍一个github开源的Linux手册(超好用)
https://wangchujiang.com/linux-command/c/iptables.html

练习iptables

首先准备两个机器,然后先关闭防火墙。
[root@server ~]# systemctl stop firewalld
[root@client ~]# systemctl stop firewalld

查看iptables的表
[root@server ~]# iptables -L
# iptables -L能看INPUT,OUTPUT和FORWARD三个规则的链
[root@server ~]# iptables -L -t nat
# iptables -L -t nat能看到prerouting和postrouting的规则
# prerouting和postrouting的规则主要是用于在数据包进入和离开本地主机时进行IP地址和端口号的转换,以确保数据包能够正确地路由到目标位置。
prerouting  用于目标地址转换 (DNAT)  
postrouting 用于源地址转换  (SNAT)  

iptables -F # 清空所有的防⽕墙规则 谨慎使用
iptables -X # 删除⽤户⾃定义的空链
iptables -Z # 清空计数


iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT/REJECT
-A表示添加 INPUT表示添加的位置
-s表示源 192.168.1.0/24表示数据包中源ip是192.168.1.0/24⽹段将会被匹配
-p表示协议 tcp就表示匹配的协议是tcp将会被匹配
--dport表示⽬的端⼝ 22就表示⽬的端⼝是22将会被匹配
-j表示动作 ACCEPT就表示接受(允许)


#iptables默认规则
iptables -P INPUT DROP # 配置默认的不让进
iptables -P FORWARD DROP # 默认的不允许转发
iptables -P OUTPUT ACCEPT # 默认的可以出去


---------------------------------------------
⿊名单和⽩名单的概念:
	⿊名单就是默认放⾏所有,把想拒绝规则写进去
	⽩名单就是默认拒绝所有,把想放⾏的规则写进去
	
⿊名单好还是⽩名单好?
⽩名单永远优于⿊名单!!!!!

注意:⼀般iptables是不会针对output和forward流量进⾏控制的,
因为⼀般服务器操作系统不会开启流量转发,第⼆就是output的流量没有必要限制

firewalld介绍和原理

firewalld是⼀个服务,这个服务提供了防⽕墙配置的⼯具。
NetworkManager是⼀个服务,这个服务提供了⽹络配置的⼯具。
只要开启了firewalld服务,那么就可以通过firewalld服务提供的⼯具来配置防⽕墙。
Linux本身不具备防⽕墙功能,⽽是通过内核的net_filter模块来实现软防⽕墙功能,⽽且你必须通过iptables才能和net_filter进⾏交互

firewalld服务提供了⼀个更加简单的⽅式来配置防⽕墙,原理就是
firewalld服务将你的防⽕墙配置命令转换成iptables规则

firewalld的zone⾥⾯有⽹卡,有规则(rule)。如果⼀个⽹卡属于
firewalld的某个zone,那么这个zone⾥⾯的所有规则都会应⽤到该zone内的⽹卡
------------------------------------------------------------------------------
命令⾏⼯具是firewall-cmd

firewalld提供了zone的概念,zone是区域的意思,firewalld将我们的系统划分成了⼀个个的zone。
 zone的边界取决于⽹卡。
 firewalld提供了zone,⼀个⽹卡只能属于⼀个zone,那zone的边界就是属于该的zone的⽹卡。
---------------------------------------------------------------------------------
 我们想把firewalld学明⽩,就搞定下⾯三个概念和操作就ok了。
 zone
 ⽹卡
 规则
 zone的概念⽐较简单,将⽹卡划⼊zone也很简单,复杂的只剩规则了

firewalld操作

# 列出所有的zones
$ firewall-cmd --list-all-zones
只要不是特别复杂的⽹络场景,基本上⼀个zone可以解决我们的所有问题。

 $ firewall-cmd --list-all # firewall-cmd --list-all是列出缺省zone的规则
 [
 	firewall-cmd添加规则正常来说必须要指定zone,因为规则是在zone⾥⾯的,
 	那你肯定添加规则的时候要指定这个规则在哪个zone⾥⾯。
 	有些时候如果每⼀次添加规则都指定zone会显得⽐较复杂。因为⼤多数情况⼀个zone就能满⾜我的需求。
	所以firewalld给我们提供⼀个缺省的zone,没指定zone的操作,都相当于操作缺省的zone.
 ]
 
 $ firewall-cmd --list-all --zone=public
 
默认Linux的所有⽹卡都在默认的zone⾥⾯。
注意:像我们讲的这种防⽕墙,⽆论是iptables还是firewalld,都只
能应⽤于内核管理的⽹卡,有些⽹卡如果不受内核管理,那防⽕墙的规则也⽆法应⽤。


[root@server ~]# firewall-cmd --list-interfaces
ens160 ens161

[root@server ~]# firewall-cmd --list-interfaces --
zone=public
ens160 ens161

[root@server ~]# firewall-cmd --remove-interface=ens161
success

[root@server ~]# firewall-cmd --list-interfaces
ens160
 
[root@server ~]# firewall-cmd --add-interface=ens161
success
firewalld的规则

[root@server ~]# firewall-cmd --list-interfaces
ens160 ens161

firewalld的规则

#查看所有规则
firewall-cmd --list-all
# 查看指定的zone
firewall-cmd --list-all --zone=home
# 查看开启的service服务
firewall-cmd --list-services
# 查看开启的ports
firewall-cmd --list-ports
# 添加service规则
firewall-cmd --add-service=ftp
# 移除service规则
 firewall-cmd --remove-service=ftp
 
 
 #port规则的放⾏
 firewall-cmd --add-port=33333/tcp
 firewall-cmd --add-port=33333/udp
 
#上⾯做的所有规则都是临时的
#如果想让上⾯的临时规则变成永久规则,可以使⽤下⾯的命令
 firewall-cmd --runtime-to-permanent
 
 
 
#虽然加上--permanent规则,会让规则永久⽣效,但是并不会⽴刻⽣效
# 必须 重载防火墙规则
firewall-cmd --reload   (但不建议这样做)

#为了避免防⽕墙规则reload,建议敲两次
#一次带--permanent,一次不带--permanent
firewall-cmd --add-service=ftp --permanent
firewall-cmd --add-service=ftp

Selinux

SELinux全称是Security Enhanced Linux,由美国国家安全部(National Security Agency)
领导开发的GPL项目,它拥有一个灵活而强制性的访问控制结构,旨在提高Linux系统的安全性,提供
强健的安全保证,可防御未知攻击,相当于B1级的军事安全性能。比MS NT的C2等高得多。
DAC和MAC
SELinux出现之前,Linux上的安全模型叫DAC,全称是Discretionary Access Control,翻译为自主访问控制。DAC的核心思想很简单,就是:进程理论上所拥有的权限与执行它的用户的权限相同。
比如,以root用户启动进程,那么该进程就有root用户的权限,在Linux系统上能干任何事情;

MAC(Mandatory Access Control),强制访问控制,即任何进程想在SELinux系统中干任何事情,都必须先在安全策略配置文件中赋予权限。凡是没有出现在安全策略配置文件中的权限,进程就没有该权限;

DAC:
1.自主访问控制
2.主体(Process)的权限Capability决定了它能访问和操作什么ROOT进程可以访问和操作一切!
3.传统(legacy)Linux的安全模式,基于UID/GID/Capability


MAC:
1.强制访问控制
2.系统的Policy决定了主体能操作访问哪些客体
3.即便是ROOT进程,系统Policy配置了你能做什么,你只能做什么,在下MAC模式,ROOT进程和普通
进程是无区别对待的。
设置安全上下文
对文件打标记
semanage fcontext -l | grep "/var/www"
------------------------------------------------------------------------------------------
/var/www(/.*)?                                     all files          system_u:object_r:httpd_sys_content_t:s0 
/var/www(/.*)?/logs(/.*)?                          all files          system_u:object_r:httpd_log_t:s0 
/var/www/[^/]*/cgi-bin(/.*)?                       all files          system_u:object_r:httpd_sys_script_exec_t:s0 
/var/www/apcupsd/multimon\.cgi                     regular file       system_u:object_r:apcupsd_cgi_script_exec_t:s0 
/var/www/apcupsd/upsfstats\.cgi                    regular file       system_u:object_r:apcupsd_cgi_script_exec_t:s0 
/var/www/apcupsd/upsimage\.cgi                     regular file       system_u:object_r:apcupsd_cgi_script_exec_t:s0 
/var/www/apcupsd/upsstats\.cgi                     regular file       system_u:object_r:apcupsd_cgi_script_exec_t:s0 
/var/www/calamaris(/.*)?                           all files          system_u:object_r:calamaris_www_t:s0 
/var/www/cgi-bin(/.*)?                             all files          system_u:object_r:httpd_sys_script_exec_t:s0 
/var/www/cgi-bin/apcgui(/.*)? all files          system_u:object_r:apcupsd_cgi_script_exec_t:s0 
------------------------------------------------------------------------------------------
/var/www(/.*)?   # 这种的就是匹配类型
system_u:object_r:httpd_sys_content_t:s0  # 这种的就是匹配到后变成这种格式

我们自定义自己的上下文,比如就叫,httpd_sys_content_t

[root@centos8 /]# mkdir web
[root@centos8 web]# semanage fcontext -a -t httpd_sys_content_t '/web(/.*)?'
# -a 添加的意思  -t 类型的意思
[root@centos8 web]# semanage fcontext -l | grep "^/web"
然后再Web目录下,新建的文件就会带有这个(httpd_sys_content_t)安全上下文
[root@centos8 web]# restorecon -Rv . # 如果新建后没看到的话,需要restrecon一下。 -R递归 -v详细信息

[root@centos8 web]# touch test.txt
[root@centos8 web]# ls -lZ
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 0 524 22:35 test.txt

# 上面的是永久修改

#我们来看看临时修改安全上下文
[root@centos8 web] chcon -t samba_share_t test.txt
[root@centos8 web] ls -lZ
-rw-r--r--. 1 root root unconfined_u:object_r:httpd_sys_content_t:s0 0 524 22:38 test.txt


#如果没有安装semanager,就需要下载。
[root@centos8 web]# rpm -qf /sbin/semanage 
policycoreutils-python-utils-2.9-26.el8.noarch
yum install -y policycoreutils-python-utils-2.9-26.el8.noarch
对端口号打标记
假定当我们修改httpd配置文件,将端口修改为12345,
重启httpd服务就会报错,因为你需要httpd和12345进行绑定才可以
[root@centos8 web]# semanage port -a -t http_port_t tcp 12345
SELinux的开启和关闭
# 查看selinux状态
[root@centos8 web]# getenforce 
Enforcing
# 临时设置Selinux状态
[root@centos8 web]# setenforce 0
[root@centos8 web]# getenforce 
Permissive  # 可以访问,但有一些限制
[root@centos8 web]# setenforce 1
[root@centos8 web]# getenforce 
Enforcing

#永久关闭Selinux,修改配置文件的值为disabled
[root@centos8 web]# vim /etc/selinux/config 
-------------------
SELINUX=enforcing  # 讲这个改为disabled 然后退出保存
--------------------
reboot # 然后重启。
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值