在Linux系统中,防火墙的管理通常依赖于不同的发行版和防火墙工具,常见的有iptables(传统工具)、firewalld(CentOS/RHEL 7+默认)以及nftables(较新版本),要使用命令进入防火墙配置模式,需根据具体工具和需求选择对应操作,以下将分场景详细说明各类防火墙的进入方式及基础配置逻辑。

基于iptables的防火墙进入与配置
iptables是Linux内核集成的包过滤工具,通过规则链控制数据流,进入配置模式实质是执行iptables命令进行规则管理,无需“进入”特定界面,而是直接在终端输入命令。
查看当前规则
sudo iptables -L -n -v
参数说明:-L
列出规则,-n
以数字形式显示地址和端口(避免DNS解析延迟),-v
显示详细信息(如数据包计数、网络接口)。
配置规则示例
-
允许SSH连接(默认端口22):
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
-A
表示添加规则到链尾,-p tcp
指定协议,--dport 22
目标端口,-j ACCEPT
允许通过。(图片来源网络,侵删) -
拒绝特定IP访问:
sudo iptables -A INPUT -s 192.168.1.100 -j DROP
-s
指定源IP,-j DROP
直接丢弃数据包。
保存规则(防止重启失效)
不同发行版保存方式不同:
- CentOS 6/7:使用
iptables-service
服务sudo service iptables save # CentOS 6 sudo /usr/libexec/iptables/iptables.init save # CentOS 7
- Debian/Ubuntu:安装
iptables-persistent
后自动保存sudo apt install iptables-persistent sudo netfilter-persistent save
基于firewalld的防火墙进入与配置
firewalld采用区域(Zone)概念动态管理规则,支持运行时配置和永久配置分离,进入配置模式主要通过firewall-cmd
命令实现。

检查服务状态
sudo firewall-cmd --state
若返回running
,则服务已启动。
查看当前区域及默认区域
sudo firewall-cmd --get-active-zones sudo firewall-cmd --get-default-zone
动态添加规则(临时生效,重启后失效)
- 开放HTTP服务(端口80):
sudo firewall-cmd --add-service=http --zone=public
- 开放自定义端口:
sudo firewall-cmd --add-port=8080/tcp --zone=public
永久保存规则
添加规则时使用--permanent
参数,或单独执行以下命令:
sudo firewall-cmd --runtime-to-permanent
交互式配置(可选)
通过firewall-config
图形工具(需安装)进入可视化界面:
sudo firewall-config &
基于nftables的防火墙进入与配置
nftables是iptables的替代品,语法更简洁,在Ubuntu 20.04+、CentOS 8+等新版本中默认使用。
查看当前规则集
sudo nft list ruleset
添加基础规则
- 创建链表:
sudo nft add table inet filter sudo nft add chain inet filter input { type filter hook input priority 0 \; }
- 允许SSH流量:
sudo nft add rule inet filter input tcp dport 22 ct state new,established accept
保存规则
nftables规则默认保存在/etc/nftables.conf
,修改后需手动加载:
sudo nft -f /etc/nftables.conf
防火墙规则管理通用操作
操作 | iptables命令 | firewalld命令 | nftables命令 |
---|---|---|---|
查看所有规则 | sudo iptables -L |
sudo firewall-cmd --list-all |
sudo nft list ruleset |
清空规则 | sudo iptables -F |
sudo firewall-cmd --reload |
sudo nft flush ruleset |
禁用防火墙 | sudo systemctl stop iptables |
sudo systemctl stop firewalld |
sudo systemctl stop nftables |
启用防火墙开机自启 | sudo systemctl enable iptables |
sudo systemctl enable firewalld |
sudo systemctl enable nftables |
注意事项
- 规则顺序:防火墙按规则顺序匹配,一旦匹配即停止,因此规则顺序至关重要(如拒绝规则应放在最后)。
- 远程管理安全:修改防火墙规则时,建议先通过本地终端操作,避免因SSH端口被误封导致远程连接断开。
- 日志记录:通过
-j LOG
记录被拦截的包(如sudo iptables -A INPUT -j LOG --log-prefix "DROP: "
),便于排查问题。
相关问答FAQs
Q1: 修改防火墙规则后如何立即生效?
A1: 不同工具生效方式不同:
- iptables:临时规则立即生效,永久规则需执行
sudo service iptables restart
(CentOS)或sudo netfilter-persistent reload
(Ubuntu)。 - firewalld:临时规则使用
sudo firewall-cmd --reload
重新加载,永久规则需先添加--permanent
参数再重载。 - nftables:执行
sudo nft -f /etc/nftables.conf
重新加载配置文件。
Q2: 如何确认防火墙是否成功拦截了特定连接?
A2: 可通过以下方式验证:
- 日志检查:
- iptables:查看
/var/log/messages
或/var/log/kern.log
(需先配置-j LOG
)。 - firewalld:执行
sudo journalctl -u firewalld
查看服务日志。 - nftables:使用
sudo dmesg | grep nft
查看内核日志。
- iptables:查看
- 测试连接:在客户端使用
telnet
或nc
测试目标端口,若连接失败且无防火墙放行规则,则说明拦截成功。telnet 192.168.1.10 80
。