解决CentOS7关闭/开启防火墙出现Unit iptables.service failed to load: No such file or directory.

本文介绍了在CentOS7中如何使用firewalld管理和配置防火墙的方法,包括添加临时及永久生效的端口规则,以及如何恢复到传统的iptables管理方式。

转载地址:https://blog.youkuaiyun.com/c233728461/article/details/526795588

CentOS7中执行

service iptables start/stop  

会报错Failed to start iptables.service: Unit iptables.service failed to load: No such file or directory.

在CentOS 7或RHEL 7或Fedora中防火墙由firewalld来管理,

如果要添加范围例外端口 如 1000-2000
语法命令如下:启用区域端口和协议组合
firewall-cmd [--zone=<zone>] --add-port=<port>[-<port>]/<protocol> [--timeout=<seconds>]
此举将启用端口和协议的组合。端口可以是一个单独的端口 <port> 或者是一个端口范围 <port>-<port> 。协议可以是 tcp 或 udp。
实际命令如下:

添加

firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,没有此参数重启后失效)

firewall-cmd --zone=public --add-port=1000-2000/tcp --permanent 

重新载入

firewall-cmd --reload

查看

firewall-cmd --zone=public --query-port=80/tcp

删除

firewall-cmd --zone=public --remove-port=80/tcp --permanent

当然你可以还原传统的管理方式。

执行一下命令:

systemctl stop firewalld  
systemctl mask firewalld  
并且安装iptables-services:
yum install iptables-services  

设置开机启动:

systemctl enable iptables  
systemctl stop iptables  
systemctl start iptables  
systemctl restart iptables  
systemctl reload iptables  

保存设置:

service iptables save  

OK,再试一下应该就好使了

开放某个端口 在/etc/sysconfig/iptables里添加

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT


<think>嗯,用户遇到了关于firealld.service启动失败的问题,提示"Unit firealld.service failed to load: No such file or directory"。需要结合用户提供的引用信息和系统知识来解决这个问题。 首先查看用户提供的引用资料,发现引用[1][2][3]都涉及类似错误,但针对的是mysql服务。这些引用中提到错误原因是服务文件缺失或路径错误。引用[4]提到CentOS 7用mariadb替代mysql的背景,引用[5]则展示了docker.socket文件配置示例。这些引用虽然服务不同,但错误本质是一致的:systemd找不到对应的服务单元文件。 考虑到firealld.service这个服务名称不太常见,初步判断可能是用户拼写错误或者服务名称变更。firewalld才是Linux系统中常见的防火墙服务名称。因此首先需要确认服务名称的正确性。 接下来思考解决方案路径:第一步要确认系统中是否存在firewalld服务;第二步检查服务文件路径是否有效;第三步处理可能的拼写错误;第四步重建服务文件链接;最后尝试启动服务。这个解决思路也适用于其他类似"Unit ... failed to load"的错误。 用户可能是在配置防火墙时遇到这个问题,或者尝试启动某个依赖防火墙的服务。ta复制服务名称时可能出现拼写错误,或者在较旧的Linux版本中使用了不同的防火墙方案。需要提醒用户注意不同发型版的差异,特别是CentOS/RHEL和Ubuntu在防火墙服务上的区别。 在整理回复时需要特别注意:所有命令行操作都要用$...$格式包裹;分步骤说明时要清晰;要包含验证命令如$systemctl status firewalld$;最后要生成相关问题帮助用户延伸学习。 </think>根据引用信息和系统服务管理原理,"Unit firealld.service failed to load"错误通常由服务文件缺失或路径错误引起,以下是完整解决方案: ### 🔧 解决步骤 1. **确认服务名称正确性** ```bash $ systemctl list-unit-files | grep -i fire ``` 多数系统使用**firewalld**而非firealld,可能是拼写错误。CentOS/RHEL/Fedora的标准防火墙服务为 `firewalld.service` [^4] 2. **检查服务文件存在性** ```bash $ ls /usr/lib/systemd/system/firewalld.service # 标准路径 $ ls /etc/systemd/system/firewalld.service # 自定义路径 ``` 3. **重建服务配置(若文件缺失)** ```bash $ sudo dnf reinstall firewalld # RHEL/CentOS/Fedora $ sudo apt --reinstall install firewalld # Ubuntu/Debian ``` 4. **重载systemd配置** ```bash $ sudo systemctl daemon-reload ``` 5. **启动并验证服务** ```bash $ sudo systemctl start firewalld $ sudo systemctl status firewalld ``` ### ⚠️ 关键注意事项 1. **发行版差异** - CentOS 8+ 默认使用 `firewalld` - Ubuntu 需手动安装:`$ sudo apt install firewalld` - 禁用旧防火墙:`$ sudo systemctl stop ufw` 2. **服务文件验证** 正常文件应包含类似内容: ```ini [Unit] Description=firewalld - dynamic firewall daemon ... [Service] ExecStart=/usr/sbin/firewalld --nofork --nopid ``` 3. **错误场景处理** ```bash # 若提示"Unit not found": $ sudo firewall-cmd --state # 检查防火墙状态 $ rpm -qf $(which firewalld) # 确认安装包 ``` ### 📝 服务管理参考命令 | 功能 | 命令 | |------|------| | 启用开机启动 | `$ sudo systemctl enable firewalld` | | 查看日志 | `$ journalctl -u firewalld` | | 检查配置 | `$ firewall-cmd --list-all` | --- ### ❓相关问题 1. 如何正确配置firewalld的开放端口? 2. systemd出现"Unit not found"错误时有哪些通用排查方法? 3. CentOS和Ubuntu在防火墙管理上有哪些主要区别? 4. 如何将firewalld服务添加到特定systemd target? > 注:引用[4][5]表明,Linux发行版的服务管理机制可能导致默认服务变更(如MySQL被MariaDB替代)。firewalld作为主流防火墙方案,通常需显式安装启用[^4][^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值