Firewalld配置详解
防火墙对于控制网络流量的进出十分重要。他通过定义一组防火墙规则来控制主机上的进入流量。
一、什么是Firewalld
"firewalld"是firewall daemon。它提供一个动态管理的防火墙,带有一个非常强大的过滤系统,被称为Netfilter,由Linux内核提供。
- firewalld防火墙是cnetos7系统默认的防火墙管理工具,取代了之前的iptables防火墙,也是工作在网络层,属于包过滤防火墙
- firewalld和iptables都是用来管理防火墙的工具(属于用户态)来定义防火墙的各种规则功能,内部结构都指向netfilter网络过滤子系统(属于内核态)来实现包过滤防火墙功能
- firewalld提供了支持网络区域所定义的网络连接以及接口安全等级的动态防火墙过滤工具
- 它支持IPv4、IPv6防火墙设置以及以太网桥,并且拥有两种配置模式:运行时配置、永久配置
二、与iptables的区别
Firewalld使用zones和services的概念,而iptables使用chain和rules。与iptables相比,firewall提供一种非常简单便捷的防火墙管理方式。
firewalld | iptables | |
---|---|---|
配置文件 | /usr/lib/firewall/ /etc/firewalld/ | /etc/sysconfig/iptables |
对规则修改 | 不需要全部刷新策略,不丢失现行连接 | 全部需要刷新策略,丢失连接 |
防火墙类型 | 动态防火墙 | 静态防火墙 |
三、firewalld区域的概念
firewall防火墙为了简化管理,将所有网络流量分为多个区(zone),然后根据数据包的源IP地址或者传入的网络接口等条件将流量传入相应的区域。每个区域都定义了自己打开或者关闭的端口和服务列表。
trusted(信任区域) | 允许所有的传入流量 |
---|---|
public(公共区域) | 允许与ssh或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝。是新添加网络接口的默认区域 |
external(外部区域) | 允许与 ssh 预定义服务匹配的传入流量,其余均拒绝。默认将通过此区域转发的IPv4传出流量将进行地址伪装,可用于为 路由器启用了伪装功能的外部网络 |
home(家庭区域) | 允许与ssh、ipp-client、mdns、samba-client或dhcpv6-client预定义服务匹配的传入流量,其余均拒绝 |
internal(内部区域) | 默认值时与home区域相同 |
dmz(隔离区域也称为非军事区域) | 允许与 ssh 预定义服务匹配的传入流量,其余均拒绝 |
block(限制区域) | 拒绝所有传入流量 |
drop(丢弃区域) | 丢弃所有传入流量,并且不产生包含ICMP的错误响应 |
(1)最终一个区域的安全程度是取决于管理员在此区域中设置的规则
(2)区域如同进入主机的安全门,每个区域都具有不同限制程度的规则,只会允许符合规则的流量传入
(3)可以根据网络规模,使用一个或多个区域,但是任何一个 活跃区域 至少需要关联 源地址或接口
(4)默认情况下,public区域是默认区域,包含所有接口(网卡)
四、firewall防火墙配置方法
- 使用firewall-cmd命令行工具
- 使用firewall-config图形工具
- 编辑/etc/firewall/中的配置文件
systemctl start firewalld #开启防火墙
systemctl stop firewalld #关闭防火墙
systemctl enable firewalld #开机自启动
systemctl status firewalld #查看防火墙状态
firewall-cmd --state #查看防火墙状态
查看firewall默认区
firewall-cmd --get-default-zone
firewall-cmd --set-default-zone=home #设置默认区域
将"ens33"接口分配给"home"区域
firewall-cmd --zone=home --change-interface=ens33
firewall-cmd --zone=home --list-all
firewall-cmd --get-active-zones #查看所有活动的zone
firewall-cmd --set-default-zone=home #更改默认区域为home
firewall-cmd --get-zone-of-interface=ens33 #找出与ens33接口关联的区域
开放端口和关闭端口
firewall-cmd --list-ports #获取当前区域开放的端口列表
firewall-cmd --permanent --add-port=8000/tcp #开放指定端口
firewalld-cmd --reload #重载防火墙
firewall-cmd --permanent --zone=home --add-port=80/tcp #开放特定区域端口
firewall-cmd --zone=home --remove-port=80/tcp #移除特定区域指定端口
firewall-cmd --get-zones #显示所有区域
firewall-cmd --list-service #查看默认区域内访问的所有服务
firewall-cmd --permanent --zone=home --add-service=samba #home区域放行samba服务
firewall-cmd --reload #重载防火墙
firewall-cmd --permanent --zone=home --add-service={http,https} #一次添加多个服务
端口转发是指一种将任何传入网络流量从一个端口转发到另一个内部端口或另一台机器上的外部端口方法
firewall-cmd --permanent --zone=external --add-masquerade #开启IP伪装
firewall-cmd --zone=external --query-masquerade #查看是否开启IP伪装
firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8080 #将80端口所有数据包重定向到8080端口
firewall-cmd --permanent --zone=external --add-forward-port=port=80:proto=tcp:toport=8000:toaddr=10.10.10.10 #将80端口所有流量重定向到IP为10.10.10.10的8000端口上
firewall-cmd --permanent --zone=home --add-source=192.168.0.0/24 允许特定范围的IP地址连接
#富规则
#允许来自地址 192.168.0.0/24 的访问
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" accept'
#拒绝来自192.168.10.0/24的流量访问ssh服务
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" port port=22 protocol=tcp reject'
#列出富规则
firewall-cmd --zone=public --list-rich-rules
#删除富规则
firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.0/24" accept'
firewall-cmd --zone=public --remove-rich-rule='rule family="ipv4" source address="192.168.0.0/24" service name="ssh" log prefix="ssh" level="info" accept'
#添加规则
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 8081 -j ACCEPT
#查看规则
firewall-cmd --direct --get-all-rules
#删除规则
firewall-cmd --permanent --direct --remove-rule ipv4 filter INPUT 0 -p tcp --dport 8080 -j ACCEPT
firewall-cmd --direct --remove-rules ipv4 [table] [chain]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?