23.firewalld
一、基础知识
firewalld 支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是 firewalld 预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。例如,我们有一台笔记本电脑,每天都要在办公室、咖啡厅和家里使用。按常理来讲,这三者的安全性按照由高到低的顺序来排列,应该是家庭、公司办公室、咖啡厅。当前,我们希望为这台笔记本电脑指定如下防火墙策略规则:在家中允许访问所有服务;在办公室内仅允许访问文件共享服务;在咖啡厅仅允许上网浏览。在以往,我们需要频繁地手动设置防火墙策略规则,而现在只需要预设好区域集合,然后只需轻点鼠标就可以自动切换了,从而极大地提升了防火墙策略的应用效率。firewalld 中常见的区域名称(默认为 public)以及相应的策略规则firewalld 中常用的区域名称及测了规则。
区域 默认策略规则
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 拒绝流入的流量,除非与流出的流量相关
firewalld-cmd 命令中使用的参数以及作用
参数 作用
--get-default-zone 查询默认的区域名称
--set-default-zone=<区域名称> 设置默认的区域,使其永久生效
--get-zones 显示可用的区域
--get-services 显示预先定义的服务
--get-active-zones 显示当前正在使用的区域与网卡名称
--add-source= 将源自此 IP 或子网的流量导向指定的区域
--remove-source= 不再将源自此 IP 或子网的流量导向某个指定区域
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域进行关联
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
--list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
--reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
--panic-on 开启应急状况模式
--panic-off 关闭应急状况模式
用firewall-cmd配置的策略为Runtime模式,即当前生效,重启失效。
要永久保存需在配置时添加--permanent参数;加了这个参数需要执行firewall-cmd --reload使其生效,否则只有在OS重启之后才能生效。
二、实验
1.查看firewalld服务当前所使用的区域
firewall-cmd --get-default-zone

2.查询网卡eth0在firewalld服务中的区域
firewall-cmd --get-zone-of-interface=eth0

3.把 firewalld 服务中 eth0 网卡的默认区域修改为 external,并在系统重启后生效。分别查看当前与永久模式下的区域名称:
firewall-cmd --permanent --zone=external --change-interface=eth0 firewall-cmd --get-zone-of-interface=eth0 firewall-cmd --permanent --get-zone-of-interface=eth0
4.把firewalld服务的当前默认区域设置为public
firewall-cmd --set-default-zone=public
5.启动/关闭firewalld的应急状况模式,阻断一切网络连接
firewall-cmd --panic-on
firewall-cmd --painc-off
6.查询public区域是否允许请求ssh和https协议的流量
如果用--query-port=22/tcp,不会显示22port在这个区域被允许放行。
firewall-cmd --zone=public --query-service=ssh firewall-cmd --zone=public --query-service=https
7.把https协议流量设置为永久允许,并立即生效
firewall-cmd --zone=public --add-service=https firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
8.拒绝http流量
firewall-cmd --permanent --zone=public --remove-service=http
9.在当前允许8080、8081的流量进入
firewall-cmd --zone=public --add-port=8080-8081/tcp
10.把访问本机888端口的流量转发到22端口
流量转发命令格式为 firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标 IP 地址>
firewall-cmd --permanent --zone=public --add-forward-port= port=888:proto=tcp:toport=22:toaddr=192.168.10.10
客户端ssh 192.168.10.10的888端口,会被转发到22端口上
富规则---更详细的规则策略;优先级最高
11.拒绝192.168.10.0/24 网段的所有用户访问本机的 ssh 服务(22 端口):
firewall-cmd --permanent --zone=public --add-rich-rule=" rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject"
三、图形工具
firewall-config
客户端上安装图形工具 GNOME;
报类拟错误(firewall-config:2148): Gtk-WARNING **: 15:23:40.595: cannot open display:
解决:用户不对;xhost +
如果远程主机没有安装gnome,可以在本地完装了GNOME的linux主机上执行
ssh -Y username@远程IP firewall-config
1.配置SNAT

2.配置本地端口转发

3.配置富规则,让 192.168.10.20 主机访问到本机的 1234 端口号

4.把网卡与防火墙策略区域进行绑定


浙公网安备 33010602011771号