Linux服务器防火墙配置是保障服务器安全的重要环节,防火墙作为网络安全的第一道防线,能够有效过滤恶意流量、防止未授权访问,保护服务器数据和服务安全,在Linux系统中,常见的防火墙工具包括iptables(传统工具)、firewalld(CentOS/RHEL 7+默认工具)以及nftables(新一代框架),本文将详细介绍Linux服务器防火墙的配置方法,包括基础概念、常用命令、策略规则及安全实践,帮助用户构建安全的服务器防护体系。

防火墙基础概念与工具选择
在配置防火墙前,需了解核心概念:规则(Rules)是防火墙的过滤条件,包含匹配条件(如源IP、端口)和动作(如ACCEPT允许、DROP拒绝、REJECT拒绝并返回错误);链(Chains)是规则的集合,如INPUT(入站)、OUTPUT(出站)、FORWARD(转发);表(Tables)是链的分组,如filter(过滤表,默认使用)、nat(地址转换表)、mangle(数据包修改表)。
Linux服务器常用的防火墙工具包括:
- iptables:基于内核的包过滤工具,功能强大但配置复杂,适用于大多数Linux发行版。
- firewalld:动态管理防火墙,支持区域(Zone)策略,可动态修改规则无需重启,适合CentOS/RHEL 7+、Fedora等系统。
- nftables:iptables的替代品,语法更简洁,性能更高,逐渐成为主流(如Ubuntu 20.04+、CentOS 8+默认使用)。
工具选择需根据系统版本和需求:若使用旧版系统(如CentOS 6),推荐iptables;新版系统(如CentOS 8+、Ubuntu 22.04)优先使用firewalld或nftables。
iptables防火墙配置详解
基础命令与语法
iptables命令基本格式为:
iptables [-t 表名] [选项] [链名] [匹配条件] [动作]
常用选项:

-L:列出规则-A:添加规则到链尾-I:插入规则到链首-D:删除规则-F:清空规则-p:协议(如tcp、udp、icmp)--dport:目标端口--sport:源端口-s:源IP地址-j:动作(ACCEPT、DROP、REJECT)
实际配置步骤
(1)查看当前规则
iptables -L -n -v # -n显示数字IP,-v显示详细信息
(2)设置默认策略
默认策略建议为“拒绝所有,允许特定”,避免开放过多端口:
iptables -P INPUT DROP # 默认拒绝入站 iptables -P OUTPUT ACCEPT # 默认允许出站 iptables -P FORWARD DROP # 默认拒绝转发
(3)允许本地回环
本地回环(lo)是服务器内部通信必需的,需允许访问:
iptables -A INPUT -i lo -j ACCEPT
(4)允许已建立的连接
避免已建立的连接被中断,提高效率:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
(5)开放必要端口
以开放SSH(22端口)、HTTP(80端口)、HTTPS(443端口)为例:
# 允许SSH访问(限制特定IP可选) iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT # 仅允许IP 192.168.1.100访问SSH # 允许HTTP/HTTPS iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT
(6)拒绝ICMP ping请求(可选)
为防止被网络扫描,可禁用ICMP请求:
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
(7)保存规则
不同系统保存方式不同:
- CentOS/RHEL:
service iptables save - Ubuntu/Debian:
iptables-save > /etc/iptables/rules.v4
高级配置示例
(1)限制连接频率
防止暴力破解,如限制SSH每分钟最多5个连接:
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 60 --hitcount 6 -j DROP
(2)端口转发
将本地8080端口转发到目标服务器的80端口:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.200:80 iptables -A FORWARD -p tcp -d 192.168.1.200 --dport 80 -j ACCEPT
firewalld防火墙配置详解
firewalld通过“区域”管理不同网络环境的信任级别,默认区域为public,适合配置更灵活的场景。
基础命令
systemctl start firewalld # 启动服务 systemctl enable firewalld # 开机自启 firewall-cmd --state # 查看状态 firewall-cmd --list-all # 列出当前区域规则
实际配置步骤
(1)开放端口
# 永久开放SSH端口 firewall-cmd --permanent --add-service=ssh firewall-cmd --reload # 重新加载规则 # 开放自定义端口(如8080) firewall-cmd --permanent --add-port=8080/tcp
(2)设置默认区域
firewall-cmd --set-default-zone=home # 设置默认区域为home(信任级别较高)
(3)限制特定IP访问
# 禁止IP 192.168.1.100访问所有服务 firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" reject'
(4)端口转发
firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.200
区域策略说明
firewalld默认区域及适用场景:
| 区域名称 | 信任级别 | 适用场景 |
|------------|----------|------------------------------|
| trusted | 最高 | 信任网络,允许所有访问 |
| home | 中等 | 家庭网络,允许部分常见服务 |
| public | 默认 | 公共网络,仅允许必要服务 |
| dmz | 低 | 隔离区,仅允许特定端口访问 |
| drop | 最低 | 丢弃所有包,不返回响应 |
nftables防火墙配置(Ubuntu 22.04+示例)
nftables语法更简洁,支持动态规则,逐步替代iptables。
基础命令
nft list ruleset # 查看规则集
nft add table inet filter # 创建filter表(inet支持IPv4/IPv6)
nft add chain inet filter input { type filter hook input priority 0 \; } # 添加input链
实际配置示例
# 允许本地回环 nft add rule inet filter input iif lo accept # 允许已建立的连接 nft add rule inet filter input ct state established,related accept # 开放SSH(22端口) nft add rule inet filter input tcp dport 22 accept # 默认拒绝所有 nft add rule inet filter input drop
保存规则
nft list ruleset > /etc/nftables/ruleset.nft # 保存规则 echo "nft -f /etc/nftables/ruleset.nft" >> /etc/rc.local # 开机自启
防火墙安全实践
- 最小权限原则:仅开放业务必需的端口,避免全端口开放。
- 定期更新规则:根据业务变化调整防火墙策略,及时关闭无用端口。
- 日志监控:开启防火墙日志,记录被拒绝的连接,便于分析攻击行为:
iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: "
- 测试环境验证:生产环境修改规则前,先在测试环境验证,避免误操作导致服务中断。
- 结合其他安全工具:防火墙需与入侵检测系统(如Suricata)、SELinux等配合使用,构建多层次防护。
相关问答FAQs
Q1: 如何查看防火墙是否生效?
A1: 不同工具查看方式不同:
- iptables:
iptables -L -n -v,查看规则是否正确添加,如ACCEPT或DROP计数是否变化。 - firewalld:
firewall-cmd --list-all,确认服务或端口是否在允许列表中。 - nftables:
nft list ruleset,检查规则链是否按预期配置。
可通过外部工具(如nmap)扫描服务器端口,验证开放端口是否符合预期。
Q2: 修改防火墙规则后如何使其永久生效?
A2: 不同工具的持久化方式不同:
- iptables:在CentOS/RHEL中执行
service iptables save;在Ubuntu/Debian中执行iptables-save > /etc/iptables/rules.v4,并确保iptables-persistent已安装。 - firewalld:使用
--permanent选项添加规则后,执行firewall-cmd --reload,规则会自动保存到/etc/firewalld/目录。 - nftables:将规则保存到配置文件(如
/etc/nftables/ruleset.nft),并配置开机自动加载(如通过systemctl enable nftables)。
若未正确持久化,服务器重启后规则将丢失。
