CentOS 7 firewalld
背景介绍
CentOS 7 引入了firewalld
作为默认的防火墙管理工具,取代了传统的iptables
。Firewalld
支持动态更新、基于区域(zone)的安全策略以及丰富的服务管理功能,这使得它在现代网络环境中更加灵活和易于管理,本文将详细介绍firewalld
的安装、配置和管理方法,包括其核心概念和常用命令。
firewalld简介
1.1 什么是firewalld?
firewalld
是firewall
daemon 的缩写,是一个用于管理 Linux 系统防火墙规则的服务,它提供了运行时配置和永久配置选项,并支持通过图形界面或命令行界面进行管理。firewalld
使用内核的 netfilter 来实现防火墙功能,但比传统的iptables
更易用和灵活。
1.2 firewalld的主要特点
动态更新:可以在不重启服务的情况下动态更新防火墙规则。
区域(Zone)概念:通过定义不同的区域来管理不同级别的安全策略。
服务(Service)管理:预定义了一些常见的服务(如 HTTP、FTP 等),方便用户快速配置。
丰富的命令行工具:提供了一系列命令行工具来管理和查询防火墙状态。
1.3 firewalld与iptables的关系
尽管firewalld
自身并不具备防火墙功能,但它通过调用内核的netfilter
来实现防火墙规则的管理,可以说,firewalld
是对iptables
的一种封装和扩展,使得防火墙管理变得更加直观和便捷。
firewalld的核心概念
2.1 zone的概念
firewalld
引入了“区域”(zone)的概念,每个区域代表一种信任级别或安全策略集合,公共区域(public)、家庭区域(home)、工作区域(work)等,这些区域可以根据具体的网络环境进行定制,以实现不同的安全策略。
2.1.1 常见区域类型及用途
drop:丢弃所有接收的数据包,适用于高安全性的环境。
block:拒绝所有外部连接,仅允许内部发起的连接。
public:默认区域,不信任任何外部连接,仅接受经过选定的网络连接。
external:为路由器启用了伪装功能的外部网络,不信任其他计算机。
internal:内部网络,通常信任所有连接。
home:类似家庭组,通常信任所有连接。
work:工作区,通常信任所有连接。
trusted:完全信任所有连接。
dmz:非军事区,限制外部访问,仅接受特定连接。
2.2 service的概念
firewalld
中的服务是指一组预定义的规则集合,通常对应于某种特定的应用或协议(如 HTTP、FTP 等),通过启用或禁用服务,用户可以快速调整防火墙规则而无需手动配置端口和协议。
2.2.1 预定义服务列表
在/usr/lib/firewalld/services/
目录下,firewalld
提供了多种预定义的服务配置文件,HTTP 服务对应的文件是http.XML
,其中包含了 HTTP 协议使用的端口(通常是80和443)。
安装与启动firewalld
3.1 安装firewalld
在大多数情况下,CentOS 7 默认已经安装了firewalld
,如果没有安装,可以使用以下命令进行安装:
sudo yum install firewalld
3.2 启动、停止与禁用firewalld
启动firewalld:
sudo systemctl start firewalld
查看状态:
sudo systemctl status firewalld
停止firewalld:
sudo systemctl stop firewalld
禁用开机启动:
sudo systemctl disable firewalld
启用开机启动:
sudo systemctl enable firewalld
配置与管理firewalld
4.1 基本配置命令
4.1.1 查看版本与帮助
查看版本:
firewallcmd version
查看帮助:
firewallcmd help
4.1.2 查看防火墙状态与设置信息
显示当前状态:
firewallcmd state
查看所有打开的端口:
firewallcmd listports
查看活动的区域:
firewallcmd getactivezones
4.2 管理区域与接口
4.2.1 查看与设置默认区域
查看默认区域:
firewallcmd getdefaultzone=public
设置默认区域:
firewallcmd setdefaultzone=home
4.2.2 添加接口到区域
假设有一个接口eth0
,将其添加到public
区域:
firewallcmd zone=public addinterface=eth0
若要永久生效,需加上permanent
参数:
firewallcmd zone=public addinterface=eth0 permanent
然后重新加载防火墙配置:
firewallcmd reload
4.3 开放端口与服务
4.3.1 开放单个端口
开放 HTTP(80端口):
firewallcmd zone=public addport=80/tcp permanent firewallcmd reload
4.3.2 开放多个端口
同时开放 HTTP(80端口)和 HTTPS(443端口):
firewallcmd zone=public addport=80/tcp permanent firewallcmd zone=public addport=443/tcp permanent firewallcmd reload
4.3.3 开放服务
开放 HTTP 服务:
firewallcmd zone=public addservice=http permanent firewallcmd reload
4.4 高级配置与自定义规则
4.4.1 拒绝所有包(紧急模式)
启用紧急模式,拒绝所有传入和传出的流量:
firewallcmd panicon
取消紧急模式:
firewallcmd panicoff
4.4.2 自定义复杂规则
只允许特定 IP 访问某个端口:
firewallcmd permanent addrichrule='rule family="ipv4" source address="192.168.1.100" port protocol="tcp" port="80" accept' firewallcmd reload
常见问题解答(FAQs)
Q1: 如何查询是否开启6379端口?
A1: 你可以使用以下命令查询6379端口的状态:
firewallcmd queryport=6379/tcp
如果返回yes
,则表示6379端口已开放;如果返回no
,则表示6379端口未开放。
Q2: 如何开启6379端口?
A2: 你可以使用以下命令开启6379端口:
firewallcmd zone=public addport=6379/tcp permanent firewallcmd reload