firewalld域如同Windows连接wifi, 会提示指定当前网络是什么域,根据不同的域,会选择不同的防火墙策略
默认提供的域:
drop:删除所有传入连接而不通知,而允许所有传出连接。
block:所有传入连接都被icmp-host-prohibited消息拒绝,而所有传出连接都被允许。
public:此区域旨在用于不受信任的公共区域。此网络上的其他计算机不受信任。
external:此区域旨在用于启用了NAT伪装的外部网络。
internal:当您的系统充当网关或路由器时,此区域旨在用于内部网络。该网络上的其他系统通常是可信的。
dmz:此区域旨在用于位于非军事区的计算机,这些计算机将限制访问网络的其余部分。
work:该区域用于工作机器。该网络上的其他系统通常是可信的。
home:此区域旨在用于家用机器。该网络上的其他系统通常是可信的。
trusted:接受所有网络连接,并信任其他系统。
启动防火墙 , 更改网卡的域
# 开机启用防火墙,并立即给我启动
systemctl enable firewalld --now
# 查看当前默认域
firewall-cmd --get-default-zone
# 查看当前网络使用的是什么域
firewall-cmd --get-active-zones
# 查看当前可以网络可以使用的域
firewall-cmd --get-zones
# 更改指定网卡的工作域(我这里修改虚拟机内网的一块public域网卡 , 将他改成work域)
firewall-cmd --zone=work --change-interface=eth0
配置域的规则
# 首先我们来看下指定域下面的参数配置
firewall-cmd --zone=public --list-all
# default 是区域的目标,它确定对与区域匹配但尚未由上述设置之一明确处理的数据包所采取的操作。
# public (default, active) 表示公共区域是默认区域(接口默认为默认区域),并且它处于活动状态,因为它至少有一个与之关联的接口或源。
# interfaces: eth1 列出与区域关联的接口。
# sources:列出区域的来源。现在没有,但如果有的话,它们的形式为xxx.xxx.xxx.xxx/xx。
# services: dhcpv6-client ssh列出通过防火墙允许的服务。您可以通过执行获得firewalld定义的服务的详尽列表firewall-cmd --get-services。
# ports:列出允许通过防火墙的端口目标。如果您需要允许未在firewalld中定义的服务,这将非常有用。
# masquerade: no表示该区域禁用了IP伪装。如果启用,这将允许IP转发,您的计算机充当路由器。
# forward-ports: 列出转发的端口。
# icmp-blocks: 阻止icmp流量的黑名单。
# rich rules: 高级配置,首先在区域中处理。
# 获取当前防火墙支持的服务
firewall-cmd --get-services
# 测试服务(eth1删除ssh服务,ssh无法使用,但是eth2使用的是work域所以还可以使用)
firewall-cmd --get-active-zones
firewall-cmd --zone=work --change-interface=eth2
firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --reload
# 测试服务(修改eth2为public域名, 删除ssh服务,将192.168.33.20加入内部可信网络,这将导致只有192.168.33.20可以ssh连接这台设备)
firewall-cmd --zone=public --change-interface=eth2
firewall-cmd --permanent --zone=public --add-service=dhcpv6-client
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --permanent --zone=public --remove-service=ssh
firewall-cmd --permanent --zone=internal --add-source=192.168.33.20
firewall-cmd --reload
# 测试服务(拒绝192.168.33.20的所有请求 ,放行其他,记得删除上面的内网同行规则,否则冲突报错)
firewall-cmd --permanent --zone=public --add-service=ssh
firewall-cmd --permanent --zone=internal --remove-source=192.168.33.20
firewall-cmd --permanent --zone=drop --add-source=192.168.33.20
firewall-cmd --reload