Firewalld防火墙
- 基础概述
1.RHEL/Centos 7系统集成了许多防火墙管理工具,其中firewalld(Dynamic Firewall Manager of Linux systems, Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式.
2.我们都知道iptables的防火墙策略是交由内核层面的netfilter网络过滤器来处理的,而firewalld则是交由内核层面的nftables包过滤框架来处理。相对于传统的Iptables防火墙,firewalld支持动态更新,并加入了区域zone的概念,firewalld防火墙取代了iptables防火墙。
3.Firewalld规则配置,从外访问服务器内部-如果没有添加规则默认是阻止,从服务器内部访问服务器外部默认是允许的。
4.一个网卡仅能绑定一个区域,但一个区域可以绑定多个网卡,但一个区域可以绑定多个网卡。还可以根据来源的地址设定不同的规则。
- 启firewalld,停iptables
#停止iptables
systemctl stop iptables.service #centos 7 默认未安装
systemctl disable iptables.service
#开启firewalld
systemctl start firewalld
systemctl enable firewalld
2
3
4
5
6
7
# firewall-cmd命令
划分不同的区域,制定出不同区域之间的访问规则策略来控制不同程序区域间传送数据
- 查看有哪些规则
firewall-cmd --list-all
- 查看当前zone,默认public
firewall-cmd --get-default-zone
firewall-cmd --list-services
协议
- 添加来源是192.168.5.0/24的网段,将其加入白名单
firewall-cmd --add-source=192.168.5.0/24 --zone=trusted
- 查看当前活动的区域
firewall-cmd --get-active-zones
- 临时移除策略,临时
firewall-cmd --remove-service=ssh --remove-service=dhcpv6-client
- 查询public区域是否允许请求SSH HTTPS协议的流量
firewall-cmd --zone=public --query-service=ssh
firewall-cmd --zone=public --query-service=https
- 加载永久区域的规则
firewall-cmd --reload
# 防火墙的端口访问策略
- 允许客户端请求服务器的80/tcp端口,临时
firewall-cmd --add-port=80/tcp
firewall-cmd --add-port={80/tcp,443/tcp}
- 永久添加多个端口,需要添加--permanent,并且需要重载firewalld
firewall-cmd --add-port={80/tcp,443/tcp} --permanent
firewall-cmd --reload
如果没有执行临时的,就需要重装一下
- 查看放行的情况
firewall-cmd --list-ports
端口
- 临时移除端口策略
firewall-cmd --remove-port={80/tcp,8080/tcp}
# 防火墙服务访问策略
- 临时允许放行端口,如果是自定义服务需要添加xml 配置到改目录下:/usr/lib/firewalld/services
firewall-cmd --get-services
查看有哪些服务
firewall-cmd --add-service=http
firewall-cmd --add-service={http,htps}
- 永久添加多个端口,需要添加--permanent,并且需要重载firewalld
firewall-cmd --add-service={http,htps} --permanet
firewall-cmd --reload
- 通过--list-services检查端口放行情况
firewall-cmd --list-services
- 移除临时添加的http https协议
firewall-cmd --remove-port={http,https}
- 修改自定义端口,为对应的服务
服务文件目录存放于
cd /usr/lib/firewalld/services
cp http.xml java-app.xml
安装模板修改对应的名称,和端口
- 防火墙添加规则
firewall-cmd --permanent --add-service=java-app
查看: firewall-cmd --list-services
# 防火墙端口转发策略
端口转发是指传统的目标地址映射,实现外网访问内网资源,流量转发命令格式为:
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
- 开启masquerade,实现地址转换
firewall-cmd --add-masquerade --permanent
将本地的6666 转发到后端 192.168.5.147:22端口
firewall-cmd --permanent --zone=public --add-forward-port=port=6666:proto=tcp:toport=22:toaddr=192.168.5.147
firewall-cmd --reload
# 防火墙富规则
firewalld中的富规则表示更细致、更详细的防火墙策略配置,它可以针对系统服务、端口号、源地址和目标地址等诸多信息进行更有针对性的策略配置, 优先级在所有的防火墙策略中也是最高的。
- 查看手册
man firewall-cmd
man firewalld.richlanguage
参数 | 说明 |
---|---|
--add-rich-rule=《RULE》 | 在指定的区添加一条富规则 |
--remove-rich-rule=《RULE》 | 在指定的区删除一条富规则 |
--query-rich-rule=《RULE》 | 找到规则返回0 ,找不到返回1 |
--list-rich-rules | 列出指定区里的所有富规则 |
- 查看设定的规则
firewall-cmd --list-rich-rules
- 允许10.0.0.1主机能够访问http服务,允许172.16.1.0/24能访问8886端口
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 service name=http accept'
firewall-cmd --add-rich-rule='rule family=ipv4 source address=172.16.1.0/24 port port="8886" protocol="tcp" accept'
2
- 默认public区域对外开放所有人能通过ssh服务连接,但拒绝192.16.1.0/24网段通过ssh连接服务器
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.16.1.0/24 service name="ssh" drop'
- 允许所有人能访问http,https服务,只要192.0.0.2的主机
firewall-cmd --add-service={http,https}
firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.0.0.2/32 service name=ssh accept'
2
- 当用户来源IP地址是10.0.0.1主机,则将用户请求的5555端口转发至后端172.16.1.9的22端口
firewall-cmd --add-masquerade
firewall-cmd --add-rich-rule='rule family=ipv4 source address=10.0.0.1/32 forward-port port="5555" protocol="tcp" to-port="22" to-addr="172.16.1.6"'
2
注意
如果没有添加--permanent参数则重启firewalld会失效。富规则按先后顺序匹配,按先匹配到的规则生效
# 防火墙开启内部上网
- firewalld防火墙开启masquerade, 实现地址转换
firewall-cmd --add-masquerade --permanent
firewall-cmd --reload
设置别的主机,网关(GATEWAY=XXX.XXX.XXX.XXX)指向这台机器,重启网络
nmcli connection reload
nmcli connection down eth1 && nmcli connection up eth1
2
# 区域参数说明
- 规则策略说明
策略名称 | 说明 |
---|---|
trusted | 允许所有的数据包流入与流出 |
home | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量 |
internal | 等同于home区域 |
work | 拒绝流入的流量,除非与流出的流量数相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量 |
public | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量 |
external | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
dmz | 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量 |
block | 拒绝流入的流量,除非与流出的流量相关 |
drop | 拒绝流入的流量,除非与流出的流量相关 |
- firewall-cmd相关参数
指令参数 | 说明 |
---|---|
zone区域相关指令 | |
--get-default-zone | 查询默认的区域名称 |
--set-default-zone=《区域名称》 | 设置默认的区域,使其永久生效 |
--get-active-zones | 显示当前正在使用的区域与网卡名称 |
--get-zones | 显示总共可用的区域 |
--new-zone=《zone》 | 新增区域 |
services服务相关指令 | |
--get-services | 显示预先定义的服务 |
--add-service=《服务名》 | 设置默认区域允许该服务的流量 |
--remove-service=《服务名》 | 设置默认区域不再允许该服务的流量 |
Port端口相关指令 | |
--add-port=《端口号/协议》 | 设置默认区域允许该端口的流量 |
--remove-port=《端口号/协议》 | 设置默认区域不再允许该端口的流量 |
Interface网卡相关指令 | |
--add-interface=《网卡名称》 | 将源自该网卡的所有流量都导向某个指定区域 |
--change-interface=《网卡名称》 | 将某个网卡与区域进行关联 |
其他相关指令 | |
--list-all | 显示当前区域的网卡配置参数、资源、端口以及服务等信息 |
--reload | 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 |
# 添加自定义minio server
#添加minio xml
[root@web01 ~]# cat /usr/lib/firewalld/services/minio.xml
<?xml version="RELEASE.2021-06-17T00-10-46Z" encoding="utf-8"?>
<service>
<short>minio</short>
<description>minio is file server .</description>
<port protocol="tcp" port="29200"/>
</service>
#重载firewalld
systemctl reload firewalld
firewall-cmd --add-service=minio
2
3
4
5
6
7
8
9
10
11
12
13