linux - firewalld

本文详细介绍了防火墙的概念及其在网络安全中的作用,并提供了具体的firewalld命令操作指南,包括设置防火墙区域、添加服务和端口策略等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是防火墙?
所谓防火墙指的是一个由 软件硬件设备组合而成、在 内部网外部网 专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法,它是一种计算机硬件和软件的 结合,使 InternetIntranet之间建立起一个 安全网关(Security Gateway),从而保护内部网免受非法用 的侵入,防火墙主要由服务访问规则、验证工具、 包过滤应用网关4个 部分组成,防火墙就是一个位于 计算机和它所连接的 网络之间的 软件硬件。该计算机流入流出的所有 网络通信数据包均要经过此防火墙。
在网络中,所谓“ 防火墙”,是指一种将 内部网和公众访问网(如Internet)分开的方法,它实际上是一种 隔离技术。防火墙是在两个网络通讯时执行的一种 访问控制尺度,它能允许你“同意”的人和数据进入你的网络,同时将你“不同意”的人和数据拒之门外,最大限度地阻止网络中的 黑客来访问你的网络。换句话说,如果不通过防火墙,公司内部的人就无法访问Internet,Internet上的人也无法和公司内部的人进行通信。

防火墙的不同区域zone 有不同的权限


(1) 要使用防火墙,我们首先需要打开防火墙 并设置为开机自动开启



(2) 以下列出了一些常见的firewalld 的命令
firewall-cmd --get-zones                                       #查看可用区域
firewall-cmd --state                                           #查看firewalld的状态

firewall-cmd --get-default-zone                                #查看当前默认活动的区域

firewall-cmd --get-default-zone=trusted                        #修改默认区域为trusted,可以接受任何连接



 

经zone 设置为 trusted  这样就可以接受各种连接了


然后再在另外一台主机访问http


firewall-cmd --list-all             #查看所有防火墙的策略
firewall-cmd --add-service=http     #添加http服务可以通过防火墙策略
firewall-cmd --reload               #重新加载
列出策略

添加服务 (临时,重新加载后会删除)


永久添加服务



使用配置文件添加防火墙通过服务
vim /etc/firewalld/zones/public.xml


删除添加的服务




设置防火墙通过某个端口




Direct Rules

例:firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 ! -s 172.25.16.216 -p tcp --dport 22 -j ACCEPT   

除了172.25.16.216 其他的人都可以访问22端口


firewall-cmd --reload 

将添加策略命令中的add 还成remove可以删除某条策略

不同网卡接口的访问设置





添加 Rich Rules

实验所用的 服务端有两个网卡,ip 分别是 172.25.254.116 和 172.25.16.116      客户端 的ip是172.25.16.216  真机的ip是 172.25.254.16

端口转换,从客户端到真机

服务端添加策略



测试 : 从客户机连真机


 
地址伪装 真机到客户机




客户端登陆真机,显示域名为服务端116主机,伪装成功




<think>我们正在讨论的是防火墙服务状态(firewalld)为inactive时对端口访问的影响。根据引用[2]中的信息,即使firewalld服务显示为inactive,也可能有其他防火墙规则(如iptables)在起作用。因此,我们需要分步骤检查。 步骤1:确认firewalld服务状态 我们可以使用以下命令检查firewalld的状态: systemctl status firewalld 如果状态显示为inactive(未激活),则意味着firewalld服务没有运行,因此由firewalld管理的规则当前不会生效。但是,这并不代表系统没有其他防火墙规则(如iptables规则)在运行。 步骤2:检查iptables规则 即使firewalld处于inactive状态,iptables规则可能仍然存在。我们可以通过以下命令查看当前的iptables规则: iptables -L -n 步骤3:检查端口是否被阻止 我们需要检查3306端口(或其他相关端口)是否被任何规则阻止。例如,在iptables规则中查找3306端口: iptables -L -n | grep 3306 如果没有找到相关规则,则说明没有防火墙规则阻止该端口,因此端口应该是可访问的(假设服务正在监听该端口)。 结论: 1. firewalld服务状态为inactive意味着firewalld本身没有管理任何规则,因此不会影响端口访问。 2. 但是,系统可能还存在其他防火墙规则(如iptables规则),这些规则可能会阻止端口访问。因此,需要检查iptables规则。 因此,即使firewalld是inactive,我们也不能直接断定端口访问不受影响,还需要检查是否有其他防火墙规则(如iptables)在起作用。 建议操作: 1. 检查iptables规则,确认是否有规则阻止了3306端口。 2. 如果需要开放端口,可以添加iptables规则(如果iptables服务正在使用)或者启动firewalld并添加规则(如果希望使用firewalld管理)。 注意:如果系统没有安装iptables,或者iptables没有任何规则,那么端口访问就不会被防火墙阻止。 根据引用[1]中的方法,如果我们使用firewalld来管理防火墙,那么当firewalld服务未启动时,我们之前通过firewalld添加的规则也不会生效。但是,如果之前使用的是iptables,那么即使firewalld是inactive,iptables规则仍然有效。 因此,要全面检查防火墙状态,我们需要: - 检查firewalld状态 - 检查iptables规则 如果两者都没有阻止端口,那么端口访问就不会受到防火墙的影响。 示例命令: 1. 检查firewalld状态: systemctl status firewalld 2. 检查iptables规则: iptables -L -n 如果发现iptables中有规则阻止了端口,我们可以使用以下命令开放端口(例如3306): iptables -I INPUT -p tcp --dport 3306 -j ACCEPT service iptables save # 保存规则,以便重启后生效 或者,如果我们希望使用firewalld,可以启动firewalld服务并添加规则(参考引用[1]): systemctl start firewalld firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload 注意:在操作防火墙规则时,请确保不会意外阻止其他重要端口。 总结:firewalld服务状态为inactive本身不会影响端口访问,但需要检查是否有其他防火墙规则(如iptables)在阻止端口。 相关问题: 1. 如何检查Linux系统上的防火墙状态? 2. 如何永久开放Linux服务器上的特定端口? 3. firewalld和iptables有什么区别? 4. 如何关闭iptables防火墙? 5. 如何查看Linux系统上所有开放的端口?</think>### 防火墙状态对端口访问的影响分析 #### 1. **firewalld 服务状态为 inactive 的含义** - ✅ **不直接影响端口访问**:当 `firewalld` 显示 `inactive` 时,表示该**防火墙管理服务已停止**,它管理的规则**不会生效**。 - 🔍 此时系统可能出现两种情况: ```bash # 情况1:完全无防火墙(端口直接开放) $ sudo iptables -L Chain INPUT (policy ACCEPT) # 所有流量默认放行 # 情况2:存在其他防火墙规则(如遗留的iptables规则) $ sudo iptables -L | grep REJECT REJECT all -- anywhere anywhere reject-with icmp-port-unreachable ``` #### 2. **关键检查步骤** 1. **确认实际防火墙规则**: ```bash # 检查iptables规则(即使firewalld已关闭) sudo iptables -L -n | grep 3306 # 检查nftables(新版本Linux默认防火墙) sudo nft list ruleset | grep 3306 ``` 2. **测试端口连通性**: ```bash # 本地测试 telnet 127.0.0.1 3306 # 远程测试(从其他机器) nc -zv 服务器IP 3306 ``` 3. **验证服务绑定地址**: ```bash # 检查MySQL绑定地址 sudo ss -tuln | grep 3306 ``` - 正常应显示:`tcp LISTEN 0 70 *:3306 *:*` - 若显示 `127.0.0.1:3306` 则仅限本地访问 #### 3. **典型问题场景** | 现象 | 原因 | 解决方案 | |------|------|----------| | ❌ 本地可连但远程不通 | 服务绑定到`127.0.0.1` | 修改MySQL配置 `bind-address=0.0.0.0` [^1] | | ❌ 完全无法连接 | 遗留iptables规则阻止 | `sudo iptables -D INPUT -p tcp --dport 3306 -j DROP` | | ⚠️ 连接不稳定 | 云主机安全组限制 | 检查云控制台的网络安全组规则 | > 📌 **结论**: > `firewalld inactive` **不直接等于端口可访问**,需检查: > 1. 服务是否绑定到 `0.0.0.0` > 2. 是否存在其他防火墙规则(iptables/nftables) > 3. 云环境安全组策略 > 4. 网络设备(如路由器)的ACL限制
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值