文章目录
firewalld是在rhel7之后新加的对火墙的管理方式。
与iptables不同的是,firewalled里的大部分东西模块化集成。更偏向于“傻瓜化”,趋近于window的火墙管理方式。
firewalld的开启
将iptables的管理方式切换到firewalld的管理方式:
方法同farewelld的管理方式切换到iptables管理方式相同:
关闭iptables服务:
systemctl stop iptables.service ##停止iptables服务
systemctl disable iptables.service ##禁止开机自启iptables服务
systemctl mask iptables ## 冻结iptables服务
提问:为什么要使用mask将其冻结?
##这是因为iptables可能是其他服务的依赖项,可能会随服务的启动而启动。使用mask将其冻结后,就不会再启动。
启动firewalld:
systemctl unmask firewalld.service ##解冻firewalld服务
systemctl enable --now firewalld ##启动firewalld并设置为开机启动
启动firewalld:
systemctl unmask firewalld.service ##解冻firewalld服务
systemctl enable --now firewalld ##启动firewalld并设置为开机启动
关于firewalld的域
firewall-cmd --get-active-zones 查看当前火墙中所有的域:
名称 | 含义及作用 |
---|---|
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 |
关于firewalld的设定原理及数据存储
火墙配置目录 :/etc/firewalld
主配置文件:/etc/firewalld/firewalld.conf
域的设定目录:/etc/firewalld/zones/
默认域puiblic的相关设定:
在使用firewall-cmd --add-service=xxxx
方式 将服务添加进火墙的策略就是将信息写入此域的文件。
/etc/firewalld/zones/public.xml就是当前域的策略文件。
可以直接在此文件中添加策略信息:
当前策略信息:
则例直接在文件中添加https服务:
编辑完成后保存退出,并使用命令重新firewall-cmd --reload
加载火墙信息。
重加载成功,再次使用命令 firewall-cmd --list-all
查看火墙策略:
添加成功!
那么问题来了,如果我们在文件里添加一个本来就没有的服务,那么会不会被添加火墙策略呢?
在文件里添加xxxxx:
同样的方法重加载火墙信息,并重新查看火墙策略:
这是问什么?
这是因为系统对类似于‘https’服务的字符串已经做过定义,对其有描述,且描述信息以xml(可扩展标记语言)的方式进行封装。
xxxxx没有在火墙策略显示的原因就是系统缺少对xxxxx的描述,无法识别。描述文件的位置为: /lib/firewalld/services里:
所以我要在此建立对xxxxx的描述文件:
首先随便复制一个文件作为模板:
cp -p https.xml xxxxx.xml
编辑完成后,保存退出。重加载火墙信息。查看火墙策略:
成功添加了我们自定义的名称。
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=xxxxx ##移除服务
firewall-cmd --reload ##重加载火墙信息
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block ##指定数据来源访问指定域
指定来自172.25.254网段的数据使用的域为block
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block ##删除自定域中的数据来源
删除设定的 指定来自172.25.254网段的数据使用的域为block
如果为双网卡主机,可以单独指定某块网卡接口使用的域:
firewall-cmd --permanent --remove-interface=ens224 --zone=public ##删除指定域的网络接口 (删除public域的ens224
接口)
firewall-cmd --permanent --add-interface=ens224 --zone=work##添加指定域的网络接口(为work添加ens224接口
)
work 域的网卡接口:ens224
public域的网卡接口:ens160:
也可以使用firewall-cmd --permanent --change-interface=ens224 --zone=public
更改网络接口到指定域(更改ens224网卡接口到public域)
firewalld的高级规则
在火墙的策略规则中,当前允许ssh连接:
若使用firewall-cmd permenat --remove-service=ssh将ssh服务从火墙策略中移除,那么对于当前的双网卡主机来说,通过ens160和ens224的ssh来连接的所有数据会被拒绝,那么这显然不合理。
那么如果说要求只允许172.25.254网段的主机来进行连接,该怎样实现?
当前172.25.254网段主机可以ssh连接双网卡主机:
当前12.168.0网段主机可以ssh连接双网卡主机:
在双网卡主机若使用firewall-cmd permenat --remove-service=ssh将ssh
服务从火墙策略中移除:
此时172.25.254网段主机不能ssh连接双网卡主机:
此时192.168.0网段主机不能ssh连接双网卡主机
现使用firewalld的高级规则进行设置:
使用命令:
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.0/24 -p tcp --dport 22 -j ACCEPT
设置允许172.25.254网段主机使用22端口访问双网卡主机。
使用命令:
firewall-cmd --direct --get-all-rules
查看当前高级规则:
172.25.254网段主机可以ssh连接双网卡主机。
192.168.0网段主机不能连接双网卡主机
firewalld中的NAT
SNAT
172.25.254网段主机是不能ping同双网卡主机的192.168.0网段网卡。当双网卡的内核路由功能打开后就可以与192.168.0网段网卡进行通信。