Linux作为广泛使用的操作系统,其防火墙功能是保障系统安全的重要屏障,防火墙通过控制网络流量进出,防止未经授权的访问和恶意攻击,不同Linux发行版采用的防火墙工具有所不同,常见的有iptables、firewalld、ufw等,本文将详细介绍这些工具的开启与关闭方法,帮助用户根据实际需求管理防火墙状态。
iptables防火墙:传统工具的启闭操作
iptables是Linux内核集成的包过滤工具,广泛应用于CentOS 7及以下版本、RHEL等系统,它通过“表”(tables)和“链”(chains)规则控制数据包流向,核心功能包括过滤(filter)、网络地址转换(nat)等。
安装与检查服务
若系统未安装iptables,可通过以下命令安装(以CentOS为例):
yum install iptables-services -y # CentOS/RHEL apt-get install iptables -y # Debian/Ubuntu(部分版本需手动安装)
安装后检查服务状态:
systemctl status iptables
临时开启/关闭(不保存重启后生效)
- 开启防火墙:
systemctl start iptables
- 关闭防火墙:
systemctl stop iptables
临时操作适用于测试环境,但重启系统后会恢复原状态。
永久开启/关闭(保存配置并重启生效)
- 永久开启:
systemctl enable iptables # 设置开机自启 systemctl start iptables # 立即启动 service iptables save # 保存当前规则到配置文件(/etc/sysconfig/iptables)
- 永久关闭:
systemctl disable iptables # 禁用开机自启 systemctl stop iptables # 立即停止 service iptables save # 保存关闭状态(避免重启后自动启动)
查看防火墙状态与规则
- 查看状态:
systemctl is-active iptables # 显示active(运行)或inactive(停止) iptables -L -n # 列出当前规则(-n不解析域名,加快速度)
- 规则管理示例:
允许HTTP(80端口)流量:iptables -A INPUT -p tcp --dport 80 -j ACCEPT service iptables save # 保存规则
iptables常用命令速查表
功能 | 命令示例 | 说明 |
---|---|---|
启动服务(临时) | systemctl start iptables |
立即启动,重启后失效 |
停止服务(临时) | systemctl stop iptables |
立即停止,重启后恢复原状态 |
开机自启(永久) | systemctl enable iptables |
设置开机启动 |
禁用开机自启(永久) | systemctl disable iptables |
禁止开机启动 |
保存规则 | service iptables save |
将当前规则写入配置文件 |
查看规则 | iptables -L -n |
列出所有规则(数字形式显示IP) |
firewalld防火墙:动态管理的现代工具
firewalld是CentOS 7、RHEL 7及以上版本默认的防火墙管理工具,支持动态规则更新(无需重启服务),通过“区域”(Zone)划分不同网络环境的信任级别(如public、trusted等)。
检查与启动服务
systemctl status firewalld # 查看服务状态 systemctl start firewalld # 启动服务
临时开启/关闭
- 开启防火墙:
systemctl start firewalld
- 关闭防火墙:
systemctl stop firewalld
临时关闭后,重启系统或手动启动服务会恢复状态。
永久开启/关闭
- 永久开启:
systemctl enable firewalld # 开机自启 systemctl start firewalld # 立即启动
- 永久关闭:
systemctl disable firewalld # 禁用开机自启 systemctl stop firewalld # 立即停止
规则管理与区域配置
firewalld通过firewall-cmd
命令管理规则,支持添加/删除端口、服务等。
- 查看当前区域与规则:
firewall-cmd --get-active-zones # 查看活跃区域 firewall-cmd --list-all # 列出当前区域所有规则
- 添加允许的端口(永久生效):
firewall-cmd --add-port=8080/tcp --permanent # 添加8080端口(TCP) firewall-cmd --reload # 重新加载规则(使永久配置生效)
- 删除规则:
firewall-cmd --remove-port=8080/tcp --permanent firewall-cmd --reload
- 切换区域(如将网卡加入trusted区域):
firewall-cmd --zone=trusted --change-interface=eth0 --permanent
firewalld常用命令速查表
功能 | 命令示例 | 说明 |
---|---|---|
启动服务(临时) | systemctl start firewalld |
立即启动,无需重载规则 |
停止服务(临时) | systemctl stop firewalld |
立即停止,动态规则失效 |
开机自启(永久) | systemctl enable firewalld |
设置开机启动 |
禁用开机自启(永久) | systemctl disable firewalld |
禁止开机启动 |
重新加载规则 | firewall-cmd --reload |
应用永久配置(无需重启服务) |
添加端口(永久) | firewall-cmd --add-port=端口号/协议 --permanent |
指定端口长期开放 |
查看活跃区域 | firewall-cmd --get-active-zones |
显示当前网络接口所属区域 |
ufw防火墙:Ubuntu/Debian的简化工具
ufw(Uncomplicated Firewall)是Ubuntu、Debian等发行版提供的简化防火墙工具,底层基于iptables,但命令更直观,适合新手使用。
安装与启用
sudo apt install ufw -y # 安装ufw(Ubuntu通常已预装) sudo ufw enable # 启用防火墙(首次启用会提示“Command may disrupt existing ssh connections”,选择y继续)
开启/关闭防火墙
- 开启:
sudo ufw enable
- 关闭:
sudo ufw disable
- 查看状态:
sudo ufw status
规则管理
- 允许特定端口:
sudo ufw allow 22/tcp # 允许SSH(22端口) sudo ufw allow http # 允许HTTP(80端口,协议名自动识别)
- 拒绝流量:
sudo ufw deny 8080/tcp # 拒绝8080端口
- 删除规则:
sudo ufw delete allow 22/tcp # 删除已添加的22端口允许规则
- 启用/禁用日志:
sudo uw logging on # 启用日志记录 sudo ufw logging off # 禁用日志记录
ufw常用命令速查表
功能 | 命令示例 | 说明 |
---|---|---|
启用防火墙 | sudo ufw enable |
开启并设置开机自启 |
禁用防火墙 | sudo ufw disable |
关闭并取消开机自启 |
查看状态 | sudo ufw status |
显示规则与防火墙状态 |
允许端口/服务 | sudo ufw allow 80/tcp |
允许指定端口或服务(如http) |
拒绝端口/服务 | sudo ufw deny 22 |
拒绝指定端口或服务(如ssh) |
删除规则 | sudo ufw delete allow 80 |
根据规则内容删除(需与添加时一致) |
注意事项
- 临时与永久操作的区别:临时操作(如
systemctl stop
)仅对当前会话有效,重启系统后恢复;永久操作(如enable
、--permanent
)会修改服务配置,确保重启后状态一致。 - 安全风险:生产环境不建议关闭防火墙,若需临时关闭(如安装软件),操作后应尽快重新开启,关闭前建议备份规则(如iptables的
iptables-save > backup.rules
)。 - 规则优先级:iptables中,规则的匹配顺序从上到下,一旦匹配即执行对应动作(ACCEPT/DROP),因此规则顺序至关重要;firewalld和ufw通过区域/策略简化了优先级管理。
相关问答FAQs
Q1:为什么使用systemctl stop iptables
关闭防火墙后,重启系统防火墙又开启了?
A:这是因为systemctl stop
仅临时停止服务,而防火墙服务可能被设置为开机自启(通过systemctl enable iptables
),若需永久关闭,需执行systemctl disable iptables
(禁用开机自启)并保存规则(service iptables save
),确保重启后不会自动启动。
Q2:如何查看Linux防火墙当前允许的端口规则?
A:根据不同防火墙工具,命令如下:
- iptables:
sudo iptables -L -n --line-numbers
(--line-numbers
可显示规则序号,方便删除) - firewalld:
sudo firewall-cmd --list-all
(显示当前区域的所有规则,包括开放端口) - ufw:
sudo ufw status numbered
(numbered
参数为规则编号,便于管理)
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/24721.html