系统防火墙原理-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多平台发布


逼格高的汤圆
10 声望2 粉丝