CentOS 7中的Firewalld是一个功能强大的动态防火墙管理工具,它通过引入“zone”概念来定义网络连接的可信等级,并支持IPv4和IPv6防火墙设置,以下是对CentOS 7 firewalld的全面介绍:
一、Firewalld简介
Firewalld是CentOS 7的一大特性,它取代了iptables service,使得软防火墙操作更加便利和人性化,Firewalld提供了动态更新功能,无需重启服务即可修改单条规则,并且加入了防火墙的“zone”区域概念,用于定义网络链接及接口的安全等级。
二、基本使用
1. 安装与启动
安装:可以通过yum install firewalld y
命令安装firewalld。
启动:使用systemctl start firewalld
命令启动firewalld服务。
查看状态:使用systemctl status firewalld
查看firewalld的运行状态。
停止:使用systemctl stop firewalld
停止firewalld服务。
禁用开机启动:使用systemctl disable firewalld
禁止firewalld在开机时自动启动。
2. 配置firewalldcmd
查看版本:使用firewallcmd version
查看firewalld的版本信息。
查看帮助:使用firewallcmd help
获取firewalld的帮助信息。
显示状态:使用firewallcmd state
显示firewalld的当前状态。
查看所有打开的端口:使用firewallcmd zone=public listports
查看在public zone下所有打开的端口。
更新防火墙规则:使用firewallcmd reload
重新加载防火墙规则。
查看区域信息:使用firewallcmd getactivezones
查看当前活动的区域。
查看指定接口所属区域:使用firewallcmd getzoneofinterface=eth0
(以eth0为例)查看指定接口所属的区域。
3. 信任级别与Zone
Firewalld通过Zone的值来指定信任级别,不同的Zone表示不同的信任等级:
Zone | 描述 |
drop | 丢弃所有进入的包,不给出任何响应 |
block | 拒绝所有外部发起的连接,允许内部发起的连接 |
public | 允许指定的进入连接 |
external | 同上,对伪装的进入连接,一般用于路由转发 |
dmz | 允许受限制的进入连接 |
work | 允许受信任的计算机被限制的进入连接,类似workgroup |
home | 同上,类似homegroup |
internal | 同上,范围针对所有互联网用户 |
trusted | 信任所有连接 |
这些Zone按照从不信任到信任的顺序排序,可以根据实际需求选择相应的Zone进行配置。
三、防火墙端口配置
1. 查看已开启端口
可以使用firewallcmd listports
或netstat ntlp
查看已开启的端口。
2. 查看防火墙规则
使用firewallcmd listall
可以查看防火墙的所有规则。
3. 查看允许协议
使用firewallcmd listprotocals
可以查看防火墙允许的协议。
4. 开启、关闭、查询端口
以开启80端口为例,可以使用以下命令:
查询端口是否开放:firewallcmd queryport=80/tcp
永久增加/开启80端口:firewallcmd permanent addport=80/tcp
重启防火墙服务:systemctl restart firewalld
删除端口:firewallcmd removeport=80/tcp
。
四、防火墙IP指向限制配置
1. 允许指定IP访问所有流量
可以使用firewallcmd permanent addrichrule="rule family="ipv4" source address="192.168.43.100" accept"
命令允许特定IP访问所有流量。
2. 允许指定IP访问指定端口
允许IPV4地址为8.8.8.8的主机连接端口80,可以使用以下命令:
firewallcmd permanent addrichrule="rule family="ipv4" source address="8.8.8.8" port protocol="tcp" port="80" accept"
3. 允许指定IP访问指定协议
阻止ICMP包,可以使用以下命令:
firewallcmd permanent addrichrule="rule protocol value="icmp" drop"
4. 允许指定IP访问指定服务
允许特定地址可以访问SSH服务,可以使用以下命令:
firewallcmd permanent addrichrule="rule family="ipv4" source address="10.168.186.25" service name="ssh" accept"
5. 防火墙移除某个服务
从允许通过防火墙的列表里移除SSH服务,可以使用以下命令:
firewallcmd removerichrule="rule family="ipv4" source address="10.168.186.25" service name="ssh" drop"
五、获取所有支持的服务
Firewalld支持多种服务,可以通过以下命令添加或删除服务:
添加服务:将smtp服务添加到work zone,可以使用firewallcmd zone=work addservice=smtp
命令。
删除服务:从work zone中删除smtp服务,可以使用firewallcmd zone=work removeservice=smtp
命令。
六、端口转发与IP地址伪装
1. IP地址伪装
查看IP地址伪装状态,可以使用firewallcmd zone=external querymasquerade
命令,开启和关闭IP地址伪装分别使用firewallcmd zone=external addmasquerade
和firewallcmd zone=external removemasquerade
命令。
2. 端口转发
首先需要开启IP地址伪装,然后进行端口转发,将TCP 22端口转发至3753端口,可以使用以下命令:
firewallcmd zone=external addforwardport=22:porto=tcp:toport=3753
如果需要将端口数据转发至另一个IP的相同端口,可以使用以下命令:
firewallcmd zone=external addforwardport=porto=tcp:toport=3753:toaddr=another_ip_address
七、FAQs
Q1: Firewalld如何实现动态更新?
A1: Firewalld通过DBUS接口提供防火墙状态的信息,使防火墙的启用、停用或查询设置成为可能,它支持动态更新,无需重启服务即可修改单条规则,当规则被修改后,只需调用firewallcmd reload
命令即可重新加载规则。
Q2: 为什么Firewalld比iptables更人性化?
A2: Firewalld在使用上比iptables更人性化,主要体现在以下几个方面:Firewalld支持动态更新,无需重启服务即可修改单条规则;Firewalld加入了防火墙的“zone”区域概念,用于定义网络链接及接口的安全等级,使得配置更加直观易懂;Firewalld提供了图形界面和字符命令界面两种管理方式,方便用户根据需要进行选择。
CentOS 7中的firewalld是一个功能强大且易于使用的动态防火墙管理工具,通过合理配置和使用firewalld,可以有效地保护系统安全并满足各种网络需求。