CentOS下nftables该如何配置以实现体验优化?

代码编程 2025-07-22 1075

CentOS系统下nftables防火墙配置全攻略

最近在折腾CentOS服务器的时候,发现不少朋友还在用老旧的iptables做防火墙配置,其实从CentOS 8开始,系统默认就集成了更先进的nftables框架,不仅性能更好,语法也更现代化,今天就跟大家分享下我在实际部署中总结的nftables配置经验,保证看完就能上手。

CentOS nftables配置方法-体验优化-体验优化

为什么选择nftables?

先说说为啥要换掉用了二十多年的iptables,最直观的感受就是配置文件更清晰了,以前用iptables写规则,动不动就是几十行链式规则,看着就头大,nftables采用类似编程语言的语法结构,支持变量定义、条件判断,甚至还能写循环(虽然实际部署中很少用)。

举个栗子,以前要开放80和443端口,iptables得写两条规则:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

换成nftables就简洁多了:

nft add rule inet filter input tcp dport { http, https } accept

基础环境准备

在CentOS 8/9上,nftables是默认安装的,但建议先检查版本:

nft --version

输出类似nftables v1.0.0就说明没问题,如果版本过低,可以通过EPEL源升级。

CentOS nftables配置方法-体验优化-体验优化

配置前记得备份现有规则:

nft list ruleset > /root/nftables_backup.nft

核心配置步骤

创建基础表和链

nftables的核心概念是表(table)和链(chain),表相当于命名空间,链是规则容器,先创建基础结构:

nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0 \; }
nft add chain inet filter forward { type filter hook forward priority 0 \; }
nft add chain inet filter output { type filter hook output priority 0 \; }

这里创建了inet协议族的filter表,包含input、forward、output三个标准链。

设置默认策略

建议把INPUT链的默认策略设为DROP,这样只有明确允许的流量才能通过:

nft add rule inet filter input iifname "lo" accept
nft add rule inet filter input ct state { established, related } accept
nft add rule inet filter input ip protocol icmp accept
nft add rule inet filter input drop

解释下这几条规则:

  • 允许本地回环接口流量
  • 允许已建立连接和相关联的流量
  • 允许ICMP协议(ping命令依赖这个)
  • 默认丢弃所有其他流量

开放常用端口

根据实际需求开放端口,比如Web服务器:

nft add rule inet filter input tcp dport { http, https } accept

SSH服务建议修改默认端口:

nft add rule inet filter input tcp dport 2222 accept

记得修改/etc/ssh/sshd_config里的Port配置,然后重启SSH服务。

高级配置技巧

动态IP白名单

可以结合shell脚本实现动态IP白名单:

WHITELIST_IP="192.168.1.100"
nft add rule inet filter input ip saddr $WHITELIST_IP accept

实际部署中可以把IP列表存在文件里,用脚本循环添加。

限制连接速率

防止DDoS攻击的好办法:

nft add rule inet filter input tcp dport 80 limit rate 100/second burst 200 accept

这条规则限制HTTP请求速率,超过100次/秒的连接会被丢弃。

日志记录

需要调试时可以添加日志规则:

nft add rule inet filter input tcp dport 22 log prefix "SSH Attempt: "

这样所有SSH连接尝试都会被记录到系统日志。

常见问题排查

  1. 配置不生效:检查是否忘记执行nft flush ruleset清除旧规则,或者规则顺序是否正确
  2. SSH连接断开:确保白名单规则在DROP规则之前
  3. 性能问题:复杂规则建议用nft monitor实时查看匹配情况

自动化部署建议

建议把nftables配置文件化,比如放在/etc/nftables.conf,然后设置开机启动:

systemctl enable nftables
systemctl start nftables

每次修改配置后执行nft -f /etc/nftables.conf重新加载即可。

经过这些配置,我的CentOS服务器安全性提升了不少,而且管理起来比iptables方便多了,特别是需要频繁调整规则时,nftables的语法优势就体现出来了,建议大家逐步迁移到nftables,毕竟iptables已经进入维护模式,未来新特性都会优先支持nftables。

最后提醒,防火墙配置直接关系到服务器安全,修改前一定要做好备份,最好在测试环境先验证,如果对某些规则不确定,可以先用nft add rule ... counter添加计数规则,观察流量情况再决定是否正式启用。

CentOS firewalld使用标准流程是怎样的?
« 上一篇 2025-07-22
CentOS启动失败该如何排查?
下一篇 » 2025-07-22

文章评论