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.把网卡与防火墙策略区域进行绑定

 

posted @ 2021-09-28 14:01  天涯160  阅读(235)  评论(0)    收藏  举报