firewalld的开启
systemctl stop iptables
systemctl disable iptables
systemctl mask iptables
systemctl unmask firewalld
systemctl enable --now firewalld
为什么要使用mask呢?iptables可能是其他服务的依赖性,如果其他服务需要开启iptables时,iptables也会开启。
补充: 在rehl7中可以使用图形化工具firewall-config进行配置,而rehl8中没有这个工具,它把这个工具集成到了cockpit中,但是在cockpit中只能进行简单的设置。
在rehl8中安装cockpit
firewalld的域
trusted:接受所有的网络连接
home:用于家庭网络,允许接受ssh、mdns、ipp-client samba-client、dhcp-client
work:工作网络 ssh、ipp-client、dhcp-client
public:公共网络 ssh、dhcp-client
dmz:军级网络 ssh
block:拒绝所有
drop:丢弃,所有数据全部丢弃无任何回复
internal:内部网络 ssh、mdns、ipp-client、samba-client dhcp-client
external:ipv4网络地址伪装转发 sshd
这里注意:libvirt是安装完虚拟化才有的
实验步骤:
(1)查看虚拟机1(192.168.9.100)的默认域
默认域为public,public支持ping。
(2)在虚拟机3(172.25.254.101)中ping虚拟机1
发现可以ping通
(3)更改虚拟机1的默认域为block
(4)在虚拟机3中ping虚拟机1
发现失败
(5)更改虚拟机1的默认域为drop
(6)在虚拟机2中查看效果
firewalld的设定原理及数据存储
/etc/firewalld:火墙配置目录
/lib/firewalld:火墙模块目录
知识点:
1.查看/etc/firewalld/firewalld.conf文件
注意我们之前使用set-default-zone的方式,其实是修改了/etc/fiewalld/firewalld.conf主配置文件。
2.深入理解以下命令
firewall-cmd --add-service=http
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
(1)我们使用firewall-cmd --add-service=http命令
发现更改之后立即生效,但重启服务后又没有http了,这是因为这个命令只是更改缓存信息。
(2)如果要永久更改,需要修改/etc/firewalld/ zones .p ublic .xml文件中的信息,这个过程就是firewall-cmd --permanent --add-service=http命令的含义。
我们使用firewall-cmd --permanent --add-service=http之后查看效果
(3)firewall-cmd --reload命令就是将刚才修改好的/etc/firewalld/zones/public.xml文件重新加载
3.如何将自己写的服务加上去呢?
(1)要注意不能直接添加,必须新建服务的.xml文件(xml将数据封装成一个文件)
(2)修改/etc/firewalld/zones/public.xml文件
(3)重载firewall
发现服务成功添加
firewalld的管理命令
firewall-cmd --state #查看火墙状态
firewall-cmd --get-active-zones #查看当前防火墙中生效的域
firewall-cmd --get-default-zone #查看默认域
firewall-cmd --list-all #查看默认域中的防火墙策略
firewall-cmd --list-all --zone=work #查看指定域的防火墙策略
firewall-cmd --set-default-zone=trusted #设定默认域
firewall-cmd --get-services #查看所有可以设定的服务
firewall-cmd --permanent --remove-service=cockpit #移除服务
firewall-cmd --reload
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block#指定数据来源访问指定域
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block#删除指定域中的数据来源
firewall-cmd --permanent --remove-interface=ens224 --zone=public#删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens224 --zone=block#添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens224 --zone=public#更改网络接口到指定域
命令展示:
(1)state、get-active-zones、get-default-zone、list-all、list-all --zone、set-default-zone
(2)get-services、remove-service、reload
(3)add-source、remove-source
设定之前虚拟机3(172.25.254.101)可以ping通虚拟机1
设定虚拟机1
发现虚拟机3不能ping通虚拟机1
而虚拟机2(192.168.9.101)仍可以正常ping虚拟机1
现在删除指定域的数据来源
(4)remove-interface、add-interface、change-interface
发现在虚拟机2中可以正常ping通虚拟机1
在虚拟机3中无法ping通虚拟机1的172网段,因此也无法ping通虚拟机1的192网段。
现在将ens224移回去
补充: systemctl reload firewalld和firewall-cmd --reload的区别,第一个命令使用后会生成一个kill的进程,而第二个命令是firewall的内部命令,不会生成kill的进程,响应速度更快,但这两个命令的作用是一样的。
firewalld的高级规则
firewall-cmd --direct --get-all-rules #查看高级规则
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.0/24 -p tcp --dport 22 -j ACCEPT
实验步骤:
(1)设置之前,发现虚拟机2(192网段)可以ssh连接虚拟机1
(2)在虚拟机1中设置规则
注意链INPUT后必须加数字
(3)测试
发现虚拟机2不能ssh连接虚拟机1,而虚拟机3可以正常连接。
firewalld中的NAT
SNAT
firewall-cmd --permanent --add-masquerade
firewall-cmd --reload
DNAT
firewall-cmd --permanent --add-forward-port=port=22:proto=tcp:toaddr=172.25.254.101
firewall-cmd --reload
实验步骤:
1.SNAT
(1)在开启masquerade之前,在虚拟机2中ping虚拟机1(172网段)无法ping通,ping虚拟机1(192网段)可以ping通。
(2)在虚拟机1中添加masquerade之后
(3)在虚拟机2中测试
发现在虚拟机2中可以ping通虚拟机1的172网段和192网段
2.DNAT
当访问我的22端口时,转发至172.25.254.101。
(1)在设置DNAT之前,在虚拟机2中连接虚拟机1,会真的连接上虚拟机1。
(2)在虚拟机1中设置DNAT之后
(3)在虚拟机2中测试
在虚拟机2中连接虚拟机1,发现实际连接上的是虚拟机3。
🌱