在CentOS 7.2系统中,默认的防火墙管理工具已经从传统的iptables
转变为更为强大和灵活的firewalld
。firewalld
(Dynamic Firewall Manager)是一个动态防火墙管理守护进程,它支持网络区域(zones)定义网络连接以及接口的信任级别,为系统管理员提供了更为精细和便捷的防火墙策略管理方式,相较于iptables
需要刷新所有规则才能生效的特性,firewalld
允许在运行时动态修改规则而无需中断现有连接,极大地提升了运维效率和系统稳定性。
核心概念:区域与服务
理解firewalld
的关键在于掌握其两个核心概念:区域和服务。
区域是firewalld
的精髓所在,它本质上是一套预先定义好的安全规则集,用于判断传入的流量是否可信,一个网络接口或连接源可以被关联到一个特定的区域,从而应用该区域的所有规则,你可以将家里的网络接口设置为home
区域,信任其中的大部分流量;而将连接到公共Wi-Fi的接口设置为public
区域,只允许极少量的服务通过,系统默认区域通常是public
。
服务则是对特定端口和协议的组合封装。http
服务就代表了TCP协议的80端口,通过管理服务,而非直接操作端口号,可以使防火墙规则更具可读性和可维护性。firewalld
也支持直接添加和移除端口。
常用操作与命令详解
管理firewalld
主要通过firewall-cmd
命令行工具完成,以下是一些最常用的操作。
查看防火墙状态与信息
需要确认防火墙是否正在运行。
firewall-cmd --state
若返回running
,则表示防火墙正在运行。
查看当前活动的区域以及绑定的接口:
firewall-cmd --get-active-zones
查看指定区域(如public
)的详细规则,包括允许的服务、端口等:
firewall-cmd --zone=public --list-all
管理区域
查看系统默认区域:
firewall-cmd --get-default-zone
设置系统默认区域(将默认区域改为work
):
firewall-cmd --set-default-zone=work
开放服务与端口
这是日常运维中最频繁的操作。firewalld
的规则修改分为运行时(runtime)和永久(permanent)两种,运行时规则立即生效但重启后失效;永久规则需要重新加载配置后才会生效,并且能持久保存。
永久开放一个服务(开放HTTP服务,即80端口):
firewall-cmd --zone=public --add-service=http --permanent
永久开放一个指定端口(开放TCP协议的8080端口):
firewall-cmd --zone=public --add-port=8080/tcp --permanent
完成永久规则的添加后,必须重新加载防火墙配置使其生效:
firewall-cmd --reload
若想移除已开放的规则,只需将--add
替换为--remove
即可,移除刚才开放的8080端口:
firewall-cmd --zone=public --remove-port=8080/tcp --permanent firewall-cmd --reload
常用区域预设策略对比表
为了更好地理解区域,下表列出了几个常用区域的默认策略:
区域名称 | 默认策略 | 说明 |
---|---|---|
trusted | 接受所有传入连接 | 最信任的区域,通常用于内部网络。 |
home | 接受大多数传入连接 | 用于家庭网络,默认允许SSH、MDNS、Samba等。 |
public | 仅接受选定的传入连接 | 默认区域,不信任网络中的大多数计算机,仅开放SSH服务。 |
dmz | 仅接受选定的传入连接 | 用于非军事区,对内网是隔离的,对外网是可访问的。 |
block | 拒绝所有传入连接 | 拒绝所有传入的网络连接,并返回ICMP-host-prohibited消息。 |
drop | 丢弃所有传入连接 | 丢弃所有传入的网络连接,不返回任何响应。 |
相关问答 (FAQs)
Q1: 我执行了firewall-cmd --add-port=...
命令,但重启服务器后规则就消失了,这是为什么?
A: 这是因为您在添加规则时没有使用--permanent
参数。firewall-cmd
默认只修改运行时配置,这些配置在防火墙服务或系统重启后会丢失,要使规则永久生效,必须在命令中加入--permanent
参数,例如firewall-cmd --add-port=10022/tcp --permanent
,添加永久规则后,还需要执行firewall-cmd --reload
命令来重新加载配置,让新规则在当前会话中立即生效。
Q2: 如何临时或永久地关闭firewalld
防火墙?
A: 关闭防火墙在某些特殊测试场景下可能是必要的,但在生产环境中强烈不建议这样做。
- 临时关闭(立即停止,重启后自动恢复):
systemctl stop firewalld
- 永久关闭(停止并禁止开机自启):
systemctl stop firewalld systemctl disable firewalld
执行这两条命令后,
firewalld
服务将停止运行,并且在下次系统启动时也不会自动启动,请务必在完成测试后重新开启它(systemctl start firewalld
&&systemctl enable firewalld
),以确保系统安全。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复