最大限度地减小系统中服务进程可访问的资源(最小权限原则)
[root@localhost ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 initial-setup-ks.cfg
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 公共
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 模板
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 视频
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 图片
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 文档
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 下载
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 音乐
drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 桌面
u:user;r:规则;t:type类型。
[root@localhost ~]# pstree -Z
systemd(`system_u:system_r:init_t:s0')
├─ModemManager(`system_u:system_r:modemmanager_t:s0')
│ └─2*[{ModemManager}(`system_u:system_r:modemmanager_t:s0')]
├─NetworkManager(`system_u:system_r:NetworkManager_t:s0')
│ └─2*[{NetworkManager}(`system_u:system_r:NetworkManager_t:s0')]
├─VGAuthService(`system_u:system_r:vmtools_t:s0')
├─abrt-dbus(`system_u:system_r:abrt_t:s0-s0:c0.c1023')
│ └─2*[{abrt-dbus}(`system_u:system_r:abrt_t:s0-s0:c0.c1023')]
字段 | 说明 | 含义 |
---|---|---|
u身份识别 | unconfined:不受限制的用户 | 防止本地以外的人的访问 |
system_u | 系统用户只有系统有权限 | |
r规则 | boject_r | 文件或者目录的资源 |
system_r | 系统资源,注意普通用户创建的也属于system_r | |
t类型 | 访问策略 |
1、配置文件分析
[root@localhost ~]# vim /etc/selinux/config
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=enforcing
# SELINUXTYPE= can take one of three values:
# targeted - Targeted processes are protected, //目标进程收到保护
# minimum - Modification of targeted policy. Only selected processes are protected. //修改有针对性的政策。只有选定的进程受到保护。
# mls - Multi Level Security protection. //多层安全保护
SELINUXTYPE=targeted
2、工作模式
工作模式 | 说明 |
---|---|
enforcing | 强制模式。违反 SELinux 规则的行为将被阻止并记录到日志中。 |
permissive | 宽容模式。违反 SELinux 规则的行为只会记录到日志中。一般为调试用。 |
disabled | 关闭 SELinux。 |
3、SELinux 日志的记录 |
[root@localhost ~]# systemctl status auditd.service
● auditd.service - Security Auditing Service
Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
Active: active (running) since 六 2020-05-23 12:14:40 CST; 1 weeks 3 days ago
Docs: man:auditd(8)
https://github.com/linux-audit/audit-documentation
Process: 682 ExecStartPost=/sbin/augenrules --load (code=exited, status=0/SUCCESS)
Process: 669 ExecStart=/sbin/auditd (code=exited, status=0/SUCCESS)
Main PID: 673 (auditd)
Tasks: 5
CGroup: /system.slice/auditd.service
├─673 /sbin/auditd
├─675 /sbin/audispd
└─677 /usr/sbin/sedispatch
......
4、修改上下文
[root@localhost html]# ll -Z test.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 test.html
[root@localhost html]# setenforce 0 //关闭selinux
[root@localhost html]# chcon -t admin_host_t test.html //更改安全标签
[root@localhost html]# ll -Z test.html
-rw-r--r--. root root unconfined_u:object_r:admin_host_t:s0 test.html
[root@localhost html]# setenforce 1 //打开selinux
[root@localhost html]# restorecon test.html //恢复其默认标签
[root@localhost html]# ll -Z test.html
-rw-r--r--. root root system_u:object_r:httpd_sys_content_t:s0 test.html
或者使用setroubleshoot工具
[root@localhost ~]# yum install setroubleshoot
[root@localhost ~]# tailf /var/log/messages
Jun 2 22:40:42 localhost setroubleshoot: failed to retrieve rpm info for /var/www/html/test.html
Jun 2 22:40:43 localhost setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/test.html. For complete SELinux messages run: sealert -l 1a3bed1b-1cae-4183-afd6-e2f662bc0bf9
......
[root@localhost ~]# sealert -l 1a3bed1b-1cae-4183-afd6-e2f662bc0bf9 //根据提供的方案解决问题
......
然后执行:
restorecon -v '/var/www/html/test.html'
......
1、操作顺序:从上倒下,如没有匹配则执行默认(放行或阻止)
2、规则链
规则链 | 说明 |
---|---|
filter表 | 过滤数据包 |
Nat表 | 用于网络地址转换(IP、端口) |
Mangle表 | 修改数据包的服务类型、TTL、并且可以配置路由实现QOS |
Raw表 | 决定数据包是否被状态跟踪机制处理 |
INPUT链 | 进来的数据包应用此规则链中的策略 |
OUTPUT链 | 外出的数据包应用此规则链中的策略 |
FORWARD链 | 转发数据包时应用此规则链中的策略 |
PREROUTING链 | 对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理) |
POSTROUTING链 | 对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理) |
参数 | 作用 | 参数 | 作用 |
---|---|---|---|
-P | 设置默认策略 | -F | 清空规则链 |
-L | 查看规则链 | -A | 在规则链的末尾加入新规则 |
-I num | 在规则链的头部加入新规则 | -D num | 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外 | -d | 匹配目标地址 |
-i | 网卡名称 匹配从这块网卡流入的数据 | -o | 网卡名称 匹配从这块网卡流出的数据 |
-p | 匹配协议 | –dport num | 匹配目标端口号 |
–sport num | 匹配来源端口号 | ||
1、查看已有的防火墙规则链 |
[root@localhost ~]# iptables -L
2、清空已有的防火墙规则链
[root@localhost ~]# iptables -F
3、把INPUT规则链的默认策略设置为丢弃
[root@localhost ~]# iptables -P INPUT DROP //设置后xshell等连接工具就连不上虚拟机
4、拒绝ping使不可达
[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
5、丢弃ping使超时
[root@localhost ~]# iptables -I INPUT -p icmp -j DROP
6、查看添加的规则
[root@localhost ~]# iptables-save //添加了3条针对ICMP的规则
# Generated by iptables-save v1.4.21 on Tue Jun 2 23:14:23 2020
*security
*filter
:INPUT ACCEPT [28:1588]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [22:1752]
-A INPUT -p icmp -j ACCEPT
-A INPUT -p icmp -j DROP
-A INPUT -p icmp -j REJECT --reject-with icmp-port-
unreachable
COMMIT
# Completed on Tue Jun 2 23:14:23 2020
......
7、删除添加的规则
[root@localhost ~]# iptables -D INPUT 3
8、只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量
[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
[root@localhost ~]# iptables-save
# Generated by iptables-save v1.4.21 on Tue Jun 2 23:18:26 2020
*filter
:INPUT ACCEPT [1:40]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [12:1136]
-A INPUT -s 192.168.1.0/24 -p tcp -m tcp --dport 22 -j
ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j REJECT --reject-with
icmp-port-unreachable
COMMIT
# Completed on Tue Jun 2 23:18:26 2020
区域 | 说明 |
---|---|
trusted(信任区域) | 可接收所有的网络连接 |
public(公共区域) | 允许指定的进入链接 |
work(工作区域) | 允许受信任的计算机被限制的进入链接 |
home(家庭区域) | 同work,如果流量和ssh,dhcpv6-client等服务相关,则允许 |
internal(内部区域) | 同work,范围针对所有互联网用户 |
external(外部区域) | 同public,处理伪装的进入链接,一般用于路由转发 |
dmz(隔离区域也称为军事区域) | 允许受限制的进入链接 |
block(限制区域) | 拒绝所有外部发起的链接,允许内部发起的链接 |
drop(丢弃区域) | 丢弃所有进入的包,而不给出任何回应 |
[root@localhost ~]# firewall-cmd --state //查看防火墙的状态
[root@localhost ~]# firewall-cmd --reload //重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置
[root@localhost ~]# firewall-cmd --complete-reload //重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用)
[root@localhost ~]# firewall-cmd --panic-on //紧急模式,强制关闭所有网络连接,--panic-off是关闭紧急模式
1、基本命令
查看firewalld服务当前所使用的区域
[root@localhost ~]# firewall-cmd --get-default-zone
public
显示默认区域的所有规则
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client https ssh
ports: 8080-8081/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
查询ens33网卡在firewalld服务中的区域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
将网络接口ens33对应区域更改为internal区域
[root@localhost ~]# firewall-cmd --zone=public --change-interface=ens33
success
[root@localhost ~]# firewall-cmd --zone=internal --list-interfaces
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens33
public
显示所有激活区域
[root@localhost ~]# firewall-cmd --get-active-zones
public
interfaces: ens33
2、服务管理
显示默认区域内允许访问的所有服务
[root@localhost ~]# firewall-cmd --list-services
dhcpv6-client ssh
设置默认区域允许访问http服务
[root@localhost ~]# firewall-cmd --add-service=http
success
查询public区域是否允许请求SSH和HTTPS协议的流量
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no
把firewalld服务中请求HTTPS协议的流量设置为永久允许,并立即生效
[root@localhost ~]# firewall-cmd --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --add-service=https --permanent
success
[root@localhost ~]# firewall-cmd --list-all --zone=public
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client http https ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
禁止ping
[root@localhost ~]# firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent
success
3、端口管理
在internal区域打开443/TCP 端口
[root@localhost ~]# firewall-cmd --zone=internal --add-port=443/tcp
success
把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp
把原本访问本机888端口的流量转发到22端口,要且求长期有效且立即生效
[root@localhost ~]# firewall-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22 --permanent
success
rule [family="" ]
[ source address="" [invert="True"] ]
[ destination address="" [invert="True"] ]
[ <element> ]
[ log [prefix="" ] [level="" ] [limit value="rate/
duration"] ]
[ audit ]
[ accept|reject|drop ]
参数 | 解释 |
---|---|
source | 限制源IP地址,源地址可以是—个IPv4,IPv6地址或者一个网络地址段 |
destination | 限制目标地址,目标地址使用跟源地址相同的语法 |
log | 注册有内核曰志的连接请求到规则中。如系统曰志 |
audit | 审核,审核类型可以是accept, reject或drop中的一种 |
accept reject drop | 指定accept时所有新的连接请求都将被允许。指定reject时连接将被拒绝,发起端将接到—个拒绝信息。指定drop时所有数据包会被丢弃并且不会向发起端发送任何信息 |
element | 要素 |
service | 服务名称。命令格式为service name = service_name |
port | 端口。命令格式为port port = number _or _range protocoI = protocoI |
protocol | 协议。命令格式为 protocol value = protocol_name_or _ID |
icmp-block | 阻断—个或多个 ICMP类型。命令格式为icmp-block name = icmptype_name |
masquerade | 规则里的IP伪装。 |
forward-port | 将指定的TCP或UDP协议的数据包转发到本机的其他端口。 |