系统防火墙原理-Firewalld
1. 静态防火墙与动态防火墙
1.1 静态防火墙
- 描述: 需要修改规则并进行所有规则的重新加载。例如:
iptables service
。 示例: 在CentOS中,如果我们使用
iptables
服务来配置防火墙规则,当添加或修改规则后,需要使用以下命令重新加载所有规则:systemctl restart iptables
1.2 动态防火墙
- 描述: 规则的更改不需要对整个防火墙规则列表进行重新加载,只需将变更部分保存并更新到运行中的iptables即可。例如:
firewalld
。 示例: 在CentOS中,使用
firewalld
进行配置,当添加或修改规则时,只需使用以下命令更新运行中的规则:firewall-cmd --reload
2. firewalld简介
firewalld
提供了一个daemon和service,还有命令行和图形界面配置工具,它仅仅是替代了iptables service
部分,其底层还是使用iptables
作为防火墙规则管理入口。真正利用规则进行数据包过滤是由内核中的netfilter子系统负责。
2.1 firewalld结构图
- system-config-firewall: 图形界面配置工具。
- firewall-config: 图形界面配置工具。
- firewall-cmd: 命令行配置工具。
- iptables service: 基于
iptables
的服务。 - firewalld daemon & service: 基于
firewalld
的服务。
3. Firewalld区域(Zone)
Firewalld
将网卡对应到不同的区域(zone),默认共有9个:
- block
- dmz
- drop
- external
- home
- internal
- public
- trusted
- work
3.1 区域差异
不同区域之间的差异在于其对待数据包的默认行为不同。firewalld默认每个服务是拒绝的,需要手动设置才能放行。
4. Firewalld区域默认策略规则
以下是不同区域及其默认策略规则的详细解释:
区域 (Zone) | 默认策略规则 |
---|---|
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 (丢弃) | 任何接收的网络数据包都被丢弃,仅允许发出的网络连接。 |
5. Firewalld基本命令
以下是一些常用的firewalld
命令及其功能:
命令 | 功能 |
---|---|
systemctl start firewalld | 启动防火墙 |
systemctl enable firewalld | 开机自启动防火墙 |
systemctl stop firewalld | 关闭防火墙 |
systemctl disable firewalld | 开机自动关闭防火墙 |
firewall-cmd --state | 查看防火墙状态 |
firewall-cmd --get-active-zones | 查看防火墙管理的设备 |
firewall-cmd --get-default-zone | 查看防火墙生效的区域 |
firewall-cmd --get-zones | 查看防火墙所有的区域 |
firewall-cmd --zone=public --list-all | 列出关于public区域的服务设置 |
firewall-cmd --get-services | 列出可使用的服务 |
firewall-cmd --set-default-zone=trusted | 修改默认区域为trusted |
firewall-cmd --list-all-zones | 列出所有的区域 |
firewall-cmd --set-default-zone=dmz | 设置防火墙的区域为dmz |
6. Firewalld查看状态
可以使用以下两种方法之一来查看firewalld
状态:
firewall-cmd --state
systemctl status firewalld
7. Firewalld管理命令
以下是一些firewalld
的管理命令示例:
关闭firewalld:
systemctl stop firewalld.service
启动firewalld:
systemctl start firewalld.service
把firewalld加入到系统服务:
systemctl enable firewalld.service
从系统服务移除firewalld:
systemctl disable firewalld.service
8. Firewalld区域(zone)
列出所有支持的zone和查看当前的默认zone:
firewall-cmd --get-zones
firewall-cmd --get-default-zone
9. 修改安全策略
以下是一些常见的firewall-cmd命令用于修改防火墙策略:
临时添加服务:
firewall-cmd --add-service=https
永久删除服务:
firewall-cmd --remove-service=https --permanent
临时添加端口:
firewall-cmd --add-port=80/tcp
删除接口:
firewall-cmd --remove-interface=eth0
永久更改接口区域:
firewall-cmd --permanent --change-interface=eth1 --zone=trusted
临时拒绝特定主机的所有网络连接:
firewall-cmd --add-source=172.25.254.100 --zone=block
永久移除限制:
firewall-cmd --remove-source=172.25.254.100 --zone=block --permanent
中断连接,重启防火墙策略:
firewall-cmd --complete-reload
不中断连接,重启防火墙策略:
firewall-cmd --reload
查看设置的规则:
firewall-cmd --direct --get-all-rules
10. Firewalld配置文件手动修改
防火墙配置文件也可以手动修改,修改后需重启防火墙或reload才能生效:
firewall-cmd --reload
配置文件示例:
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<service name="dhcpv6-client"/>
<service name="ssh"/>
<port protocol="tcp" port="12222"/>
</zone>
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。