1.selinux简介
Security-Enhanced Linux简称SELinux,它是一个Linux内核模块,也是Linux的一个安全子系统。
SELinux的结构及配置非常复杂,而且有大量概念性的东西,学习难度较大。很多Linux系统管理员嫌麻烦都把SELinux关闭了。
系统资源都是通过进程来读取更改的,为了保证系统资源的安全,传统的Linux使用用户、文件权限的概念来限制资源的访问,通过对比进程的发起用户和文件权限以此来保证系统资源的安全,这是一种自由访问控制方式(DAC);但是随着系统资源安全性要求提高,出现了在Linux下的一种安全强化机制(SELinux),该机制为进程和文件加入了除权限之外更多的限制来增强访问条件,这种方式为强制访问控制(MAC)。这两种方式最直观的对比就是,采用传统DAC,root可以访问任何文件,而在MAC下,root只能访问设定允许的文件。
2.selinux的作用及权限管理机制
SELinux主要作用就是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。
主要是通过context上下文的概念。
可以使用ls -Z查看
[root@snow ~]# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
u:user
r:rule
t:type
每一个进程都有自己的selinux
[root@snow ~]# yum -y install psmisc
[root@snow ~]# pstree -Z
systemd(`system_u:system_r:init_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') ├─agetty(`system_u:system_r:getty_t:s0-s0:c0.c1023') ├─anacron(`system_u:system_r:system_cronjob_t:s0- s0:c0.c1023')
...
context简介
上下文是SELinux的核心。
上下文其实可以分为「进程安全上下文」和「文件安全上下文」。
一个「进程安全上下文」一般对应多个「文件安全上下文」。
只有两者的安全上下文对应上了,进程才能访问文件。它们的对应关系由政策中的规则决定。
文件安全上下文由文件创建的位置和创建文件的进程所决定。而且系统有一套默认值,用户也可以对默认值进行设定。
需要注意的是,单纯的移动文件操作并不会改变文件的安全上下文。
context的结构及意义
安全上下文有四个字段,分别用冒号隔开。
system_u:object_r:admin_home_t:s0
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
第一段:u身份识别
unconfined:不受限制的用户,它主要是为了防止本地以外的人的访问,所以一般本地的shell设置的环境变量不受影响。selinux管不着。
system_u:系统用户只有系统有权限。
第二段:r规则
判断这个目录或者文件是属于哪个应用程序。
boject_r:文件或者目录的资源
system_r:系统资源,不过注意普通用户创建的也属于system_r
第三段:t类型(最重要)
访问策略,一个进程是否能够读取数据就看这里了。
配置文件分析
[root@snow ~]# 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=disabled
# 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
selinux有三种工作模式
(1)enforcing:强制模式。违反SELinux规则的行为将被阻止并记录到日志中;
(2)permissive:宽容模式。违反SELinux规则的行为只会记录到日志中,一般为调试用;
(3)disabled:关闭SELinux;
SELinux工作模式可以在/etc/selinux/config中设定。
如果想从disabled切换到enforcing或者permissive的话,需要重启系统。反过来也一样。
enforcing和permissive模式可以通过setenforce 1|0命令快速切换。
需要注意的是,如果系统已经在关闭SELinux的状态下运行了一段时间,在打开SELinux之后的第一次重启速度可能会比较慢。因为系统必须为磁盘中的文件创建安全上下文。
SELinux日志的记录需要借助auditd.service这个服务,不要禁用它。
[root@snow ~]# systemctl status auditd
● auditd.service - Security Auditing Service
Loaded: loaded (/usr/lib/systemd/system/auditd.service; enabled; vendor preset: enabled)
Active: active (running) since 六 2020-11-07 02:01:12 EST; 1 day 1h ago
Docs: man:auditd(8)
https://github.com/linux-audit/audit-documentation
Main PID: 629 (auditd)
CGroup: /system.slice/auditd.service
└─629 /sbin/auditd
...
上下文的修改
1.给文件打安全标签
相关语法
1)chcon [OPTION]... CONTEXT FILE...
2)chcon [OPTION]... [-u USER] [-r ROLE] [-t TYPE] FILE...
3)chcon [OPTION]... --reference=RFILE FILE...
4)-R选项:可递归进行打安全标签
2.还原文件的默认标签
restorecon [-R] /path/to/file
示例演示
1.启用httpd服务,打开对应端口:80,并在其对应目录下创建文件,查看其安全标签。
[root@snow ~]# yum -y install httpd
[root@snow ~]# systemctl start httpd
[root@snow ~]# firewall-cmd --add-port=80/tcp --permanent
[root@snow ~]# firewall-cmd --reload
[root@snow ~]# firewall-cmd --list-ports
80/tcp
[root@snow ~]# cd /var/www/html/
[root@snow html]# vim test.html
<h1>testing</h1>
<div id="datetime">
<script>
setInterval("document.getElementById('datetime').innerHTML =new Date().toLocaleString();", 1000);
</script>
</div>
[root@snow html]# ll -Z test.html
-rw-r--r--. root root unconfined_u:object_r:httpd_sys_content_t:s0 test.html
2.关闭selinux,更改其安全标签,再打开selinux,此时已经浏览器无法访问页面
[root@snow html]# setenforce 0
[root@snow html]# chcon -t admin_host_t test.html
[root@snow html]# setenforce 1
3.恢复其默认标签
[root@snow html]# restorecon test.html
或者可以通过另外的方式解决,通过linux系统给我们的一个工具。
再次关闭selinux,更改其安全标签之后打开selinux,此时是不可访问状态。
[root@snow html]# setenforce 0
[root@snow html]# chcon -t admin_host_t test.html
[root@snow html]# setenforce 1
下载对应的工具
[root@snow html]# yum -y install setroubleshoot
使用浏览器访问触发日志
[root@snow html]# tailf /var/log/messages
...
May 13 16:49:49 localhost setroubleshoot: SELinux is
preventing httpd from getattr access on the file
/var/www/html/test.html. For complete SELinux messages
run: sealert -l 8a9781e5-8305-4030-8f8a-2266deecb8ae
...
[root@snow html]# sealert -l 8a9781e5-8305-4030-8f8a-2266deecb8ae
...
***** Plugin restorecon (82.4 confidence) suggests ************************
# /sbin/restorecon -v /var/www/html/test.html
...
此时可以看到它提供了各种解决方案。除此之外,还可以设置selinux的布尔值。
查看系统中的sebool值。影响程序的访问文件,通过安全上下文来控制的,影响程序的服务程序功能,通过sebool值来控制的。
1.防火墙管理工具iptables简介
众所周知,相较于企业内网,外部的公网环境更加恶劣。在公网与企业内网之间充当保护屏障的防火墙虽然有软件或硬件之分,但主要功能都是依据策略对穿越防火墙自身的流量进行过滤。
防火墙策略可以基于流量的源目标地址、端口号、协议、应用等信息来定制,然后防火墙使用预先定制的策略规则监控出入的流量,若流量与某一条策略规则相匹配,则执行相应的处理,反之则丢弃。这样一来,就可以保证仅有合法的流量在企业内网和外部公网之间流动了。
其实iptables与firewalld都不是真正的防火墙,它们都只是用来定义防火墙策略的防火墙管理工具而已。或者说它们只是一种服务。
iptables服务会把配置好的防火墙策略交由内核层面的netfilter网络过滤器来处理,而firewalld服务则是把配置好的防火墙策略交由内核层面的nftables包过滤框架来处理。
换句话说,当前在Linux系统中其实存在多个防火墙管理工具,旨在方便运维人员管理Linux系统中的防火墙策略,只需要配置好其中一个就可以了。虽然这些工具各有优劣,但它们在防火墙策略的配置思路上是保持一致的。
在早期的Linux系统中,默认使用的是iptables防火墙管理服务来配置防火墙。尽管新型的firewalld防火墙管理服务已经被投入使用多年,但是大量的企业在生产环境中依然出于各种原因而继续使用iptables。更何况,各个防火墙管理工具的配置思路是一致的,在掌握了iptables后再学习其他防火墙管理工具时,也有借鉴意义。
2.策略与规则链
操作顺序:
从上到下,如果没有匹配则执行默认(放行或阻止)。
防火墙会从上至下的顺序来读取配置的策略规则,在找到匹配项后就立即结束匹配工作并去执行匹配项中定义的行为。如果在读取完所有的策略规则之后没有匹配项,就去执行默认的策略。
一般而言,防火墙策略规则的设置有两种:一种是“通”(即放行),一种是“堵”(即阻止)。
当防火墙的默认策略为拒绝时,就要设置允许规则,否则谁都进不来;如果防火墙的默认策略为允许时,就要设置拒绝规则,否则谁都能进来,防火墙也就失去了防范的作用。
iptables服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类,具体如下:
规则链 | 作用 |
---|---|
filter表 | 过滤数据包 |
Nat表 | 用于网络地址转换(IP、端口) |
Mangle表 | 修改数据包的服务类型、TTL、并且可以配置路由实现QOS |
Raw表 | 决定数据包是否被状态跟踪机制处理 |
INPUT链 | 进来的数据包应用此规则链中的策略 |
OUTPUT链 | 外出的数据包应用此规则链中的策略 |
FORWARD链 | 转发数据包时应用此规则链中的策略 |
PREROUTING链 | 对数据包作路由选择前应用此链中的规则(所有的数据包进来时,都先由这个链处理) |
POSTROUTING链 | 对数据包作路由选择后应用此链中的规则(所有的数据包出来时,都先由这个链处理) |
一般来说,从内网向外网发送的流量一般都是可控且良性的。因此我们使用最多的就是INPUT规则链,该规则链可以增大黑客人员从外网入侵内网的难度。
比如在你居住的社区内,物业管理公司有两条规定:禁止小商小贩进入社区;各种车辆在进入社区时都要登记。显而易见,这两条规定应该是用于社区的正门的(流量必须经过的地方),而不是每家每户的防盗门上。根据前面提到的防火墙策略的匹配顺序,可能会存在多种情况。比如来访人员是小商小贩,则直接会被物业公司的保安拒之门外,也就无需再对车辆进行登记。如果来访人员乘坐一辆汽车进入社区正门,则“禁止小商小贩进入社区”的第一条规则就没有被匹配到,因此按照顺序匹配第二条策略,即需要对车辆进行登记。如果是社区居民要进入正门,则这两条规定都不会匹配到,因此会执行默认的放行策略。
但是仅有策略规则还不能保证社区的安全,保安还应该知道采用什么样的动作来处理这些匹配的流量,比如“允许”、“拒绝”、“登记”、“不理睬”。
这些动作对应到iptables服务的术语中分别是ACCEPT(允许流量通过)、REJECT(拒绝流量通过)、LOG(记录日志信息)、DROP(拒绝流量通过)。“允许流量通过”和“记录日志信息”都比较好理解。但是就DROP来说,它是直接将流量丢弃而且不响应;REJECT则会在拒绝流量后再回复一条“您的信息已经收到,但是被扔掉了”信息,从而让流量发送方清晰地看到数据被拒绝的响应信息。
当把Linux系统中的防火墙策略设置为REJECT拒绝动作后,流量发送方会看到端口不可达的响应;而把Linux系统中的防火墙策略修改成DROP拒绝动作后,流量发送方会看到响应超时的提醒。但是流量发送方无法判断流量是被拒绝,还是接收方主机当前不在线。
3.基本的命令参数
iptables是一款基于命令行的防火墙策略管理工具,具有大量参数,学习难度较大。好在对于日常的防火墙策略配置来讲,大家无需深入了解诸如“四表五链”的理论概念,只需要掌握常用的参数并做到灵活搭配即可,这就足以应对日常工作了。
iptables命令可以根据流量的源地址、目的地址、传输协议、服务类型等信息进行匹配,一旦匹配成功,iptables就会根据策略规则所预设的动作来处理这些流量。
防火墙策略规则的匹配顺序是从上至下,需要把较为严格、优先级较高的策略规则放到前面,以免发生错误。
参数 | 作用 |
---|---|
-P | 设置默认策略 |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链的末尾加入新规则 |
-l num | 在规则链的头部加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加"!"表示除这个IP外 |
-d | 匹配目标地址 |
-i | 网卡名称,匹配从这块网卡流入的数据 |
-o | 网卡名称,匹配从这块网卡流出的数据 |
-p | 匹配协议,如TCP、UDP、ICMP |
–dport num | 匹配目标端口号 |
–sport | 匹配来源端口号 |
4.查看已有的防火墙规则链
[root@snow ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
5.清空已有的防火墙规则链
[root@snow ~]# iptables -F
6.把INPUT规则链的默认策略设置为丢弃
[root@snow ~]# iptables -P INPUT DROP
注意:设置过此命令后,xshell等连接工具就连不上虚拟机了。需要在VMware workstation里进行更改。
如前面所提到的防火墙策略设置无非有两种方式,一种是“通”,一种是“堵”,当把INPUT链设置为默认拒绝后,就要往里面写入允许策略了,否则所有流入的数据包都会被默认拒绝掉,需要留意规则链的默认策略拒绝动作只能是DROP,而不能是REJECT。
7.向INPUT链中添加允许ICMP流量进入的策略规则
ICMP(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
在日常运维工作中,经常会使用ping命令来检查对方主机是否在线,而向防火墙的INPUT规则链中添加一条允许ICMP流量进入的策略规则就默认允许了这种ping命令检测行为。
base1 | base2 |
---|---|
192.168.1.60 | 192.168.1.61 |
默认是可以ping通的。
[root@base1 ~]# ping 192.168.1.61
PING 192.168.1.61 (192.168.1.61) 56(84) bytes of data.
64 bytes from 192.168.1.61: icmp_seq=1 ttl=64 time=0.433ms
64 bytes from 192.168.1.61: icmp_seq=2 ttl=64 time=0.339ms
64 bytes from 192.168.1.61: icmp_seq=3 ttl=64 time=0.341ms
...
在base2中添加拒接策略,得到的是不可达。
[root@base2 ~]# iptables -I INPUT -p icmp -j REJECT
再次ping,显示不可达。
[root@base1 ~]# ping 192.168.1.61
PING 192.168.1.61 (192.168.1.61) 56(84) bytes of data.
From 192.168.1.61 icmp_seq=1 Destination Port Unreachable
From 192.168.1.61 icmp_seq=2 Destination Port Unreachable
From 192.168.1.61 icmp_seq=3 Destination Port Unreachable
...
添加丢弃策略,页面会卡住,最后会得到超时。
[root@base2 ~]# iptables -I INPUT -p icmp -j DROP
再次ping
[root@base1 ~]# ping 192.168.1.61
PING 192.168.1.61 (192.168.1.61) 56(84) bytes of data.
注意:防火墙策略规则是按照从上到下的顺序匹配的,因此一定要把允许动作放到拒绝动作前面,否则所有的流量就将被拒绝掉,从而导致任何主机都无法访问我们的服务。
base2添加允许访问,查看添加的规则。
[root@base2 ~]# iptables-save
# Generated by iptables-save v1.4.21 on Fri May 15 09:55:10 2020
*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 Fri May 15 09:55:10 2020
这时可以看到,针对于icmp有3条规则,一个允许,一个丢弃,还有一个拒绝,那么谁在最上边,就以谁为准,现在尝试着把DROP信息和REJECT信息删除。
[root@base2 ~]# iptables -D INPUT 3
8.将INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量。
[root@base2 ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@base2 ~]# iptables -A INPUT -p tcp --dport 22 -j REJECT
[root@base2 ~]# iptables-save
# Generated by iptables-save v1.4.21 on Fri May 15 09:58:47 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
...
(1)如果只允许192.168.1.100和192.168.1.110的PING命令,应该怎么添加?
[root@base2 ~]# iptables -I INPUT -s 192.168.1.100 -p icmp -j ACCEPT
[root@base2 ~]# iptables -I INPUT -s 192.168.1.110 -p icmp -j ACCEPT
[root@base2 ~]# iptables -A INPUT -p icmp -j DROP
(2)如果只允许192.168.1.0/24网段的,但拒绝192.168.1.100和192.168.1.110的PING命令,应该怎么添加?
[root@base2 ~]# iptables -I INPUT -s 192.168.1.0/24 -p icmp -j ACCEPT
[root@base2 ~]# iptables -I INPUT -s 192.168.1.110 -p icmp -j DROP
[root@base2 ~]# iptables -I INPUT -s 192.168.1.100 -p icmp -j DROP
(3)向INPUT规则链中添加拒绝所有人访问本机12345端口的策略规则。
[root@base2 ~]# iptables -I INPUT -p tcp --dport 12345 -j REJECT
[root@base2 ~]# iptables -I INPUT -p udp --dport 12345 -j REJECT
(4)向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则。
[root@base2 ~]# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
[root@base2 ~]# iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
9.TCP和UDP的区别
(1)TCP是面向连接的(在客户端和服务器之间传输数据之前要先建立连接),UDP是无连接的(发送数据之前不需要先建立连接);
(2)TCP提供可靠的服务(通过TCP传输的数据无差错、不丢失、不重复、且按序到达),UDP提供面向事务的简单的不可靠的传输;
(3)UDP具有较好的实时性,工作效率比TCP高,适用于对高速传输和实时性比较高的通讯或广播通信。随着网速的提高,UDP使用越来越多;
(4)每一条TCP连接只能是点到点的,UDP支持一对一、一对多和多对多的交互通信;
(5)TCP对系统资源要求比较多,UDP对系统资源要求比较少;
(6)UDP程序结构更加简单;
(7)TCP是流模式,UDP是数据报模式;
10.base2中向INPUT规则链中添加拒绝192.168.1.208主机访问本机80端口(Web服务)的策略规则
除了刚才的两台机器,这里又新开了一台主机:192.168.1.208。
[root@base2 ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Mon 2020-05-11 14:50:38 CST; 3 days ago
...
[root@base2 ~]# echo "The test web" > /var/www/html/index.html
[root@base2 ~]# curl 127.0.0.1
The test web
默认都能访问到界面,下面开始添加规则。
[root@base2 ~]# iptables -I INPUT -p tcp -s 192.168.1.208 --dport 80 -j REJECT
[root@base1 ~]# curl 192.168.1.61
The test web
[root@centos7 ~]# curl 192.168.1.61
curl: (7) Failed to connect to 192.168.1.61 port 80: 拒绝连接
1.firewalld简介
RHEL 7系统中集成了多款防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。
相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。
简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。
例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。之前我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。
2.区域默认规则策略
区域策略 | 作用 |
---|---|
drop | 丢弃所有进入的包,而不给出任何回应 |
block | 拒绝所有外部发起的连接,允许内部发起的连接 |
public | 允许指定的进入连接 |
external | 同public,处理伪装的进入连接,一般用于路由转发 |
dmz | 允许受限制的进入连接 |
work | 允许受信任的计算机被限制的进入连接 |
home | 同work,如果流量和ssh,dhcpv6-client等服务相关,则允许 |
internal | 同work,范围针对所有互联网用户 |
trusted | 信任所有连接 |
不同的区域之间的差异是其对待数据包的默认行为不同,firewalld的默认区域为public。
3.firewall的状态
--state #查看防火墙的状态;
--reload #重新加载防火墙,中断用户的连接,将临时配置清掉,加载配置文件中的永久配置;
--complete-reload #重新加载防火墙,不中断用户的连接(防火墙出严重故障时使用);
--panic-on #紧急模式,强制关闭所有网络连接;
--panic-off #关闭紧急模式;
命令行终端是一种极富效率的工作方式,firewall-cmd是firewalld防火墙配置管理工具的CLI(命令行界面)版本。
与Linux系统中其他的防火墙策略配置工具一样,使用firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。
如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙策略时添加–permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启之后才能自动生效。如果想让配置的策略立即生效,需要手动执行firewall-cmd --reload命令。
--permanent #永久生效;
--reload #重新加载,立即生效;
/usr/lib/firewalld/services/ #firewalld服务默认在此目录下定义了70+种服务供我们使用,格式:服务名.xml;
/etc/firewalld/zones/ #默认区域配置文件,配置文件中指定了编写完成的规则;
4.查看firewalld服务当前所使用的区域
[root@snow ~]# firewall-cmd --get-default-zone
public
5.查询ens33网卡在firewalld服务中的区域
[root@snow ~]# firewall-cmd --get-zone-of-interface=ens33
public
6.查询public区域是否允许请求SSH和HTTPS协议的流量
[root@snow ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@snow ~]# firewall-cmd --zone=public --query-service=https
no
7.把firewalld服务中请求HTTPS协议的流量设置为永久允许并立即生效
[root@snow ~]# firewall-cmd --zone=public --add-service=https
success
[root@snow ~]# firewall-cmd --zone=public --add-service=https --permanent
success
[root@snow ~]# cat /etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="ssh"/>
<service name="dhcpv6-client"/>
<service name="https"/>
</zone>
8.把在firewalld服务中访问8080和8081端口的流量策略设置为允许,但仅限当前生效
[root@snow ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@snow ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp
9.把原本访问本机888端口的流量转发到22端口,要且求长期有效且立即生效
[root@snow ~]# firewall-cmd --zone=public --add-forward-port=port=888:proto=tcp:toport=22 --permanent
success
firewalld中的富规则是表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置。它的优先级在所有的防火墙策略中也是最高的。
10.使本机拒绝客户端192.168.1.61访问http服务
[root@snow ~]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.1.61 port port=80 protocol=tcp reject' --permanent
success
[root@snow ~]# firewall-cmd --reload
success
如果iptables和firewalld设置冲突了怎么办,其实可以看到,写的firewalld一般都会写入iptables,这里还是要注意,iptables从上到下规则。
[root@snow ~]# iptables -I INPUT -s 192.168.1.61 -p tcp --dport 80 -j ACCEPT
11.图形化管理firewalld
这里是最小化安装的系统,所以要先安装GNOME图形化界面。
安装桌面组件包
[root@snow ~]# yum groups install "GNOME Desktop"
安装完成后可以使用init 5命令切换。
当然也可以查询当前的默认运行级别,设置图形化为默认运行级别。
查看当前默认运行级别
[root@snow ~]# systemctl get-default
multi-user.target
[root@snow ~]# systemctl set-default graphical.target
12.进入图形化防火墙管理界面有两种方式
(1)命令方式
[root@snow ~]# firewall-config
(1)选择运行时(Runtime)模式或永久(Permanent)模式的配置;
(2)可选的策略集合区域列表;
(3)常用的系统服务列表;
(4)当前正在使用的区域;
(5)管理当前被选中区域中的服务;
(6)管理当前被选中区域中的端口;
(7)开启或关闭SNAT(源地址转换协议)技术;
(8)设置端口转发策略;
(9)控制请求icmp服务的流量;
(10)管理防火墙的富规则;
(11)管理网卡设备;
(12)被选中区域的服务,若勾选了相应服务前面的复选框,则表示允许与之相关的流量;
(13)firewall-config工具的运行状态;
14.示例
(1)用图形化表示拒绝192.168.1.0/24网段访问80
(2)ssh允许192.168.1.0/24网段连接
(3)添加一个路由转发:8080- - ->80