nftables基础防火墙脚本核心是默认拒绝再白名单放行:先设input链policy drop,再依次放行lo、established/related连接、SSH(22)、HTTP/HTTPS(80/443);需保存至/etc/nftables.conf并启用nftables服务开机自启。

写一个基本的 nftables 防火墙过滤脚本,核心是“先设默认拒绝,再按需放行”,避免一上来就加 ACCEPT 导致漏掉关键拦截。脚本要能直接运行、可保存、可重启生效,不依赖临时命令。
明确规则逻辑:先 DROP 再白名单
安全配置的起点不是“哪些要放”,而是“默认拦一切”。INPUT 链设为 policy drop,然后逐条添加例外规则。这样即使漏写某条放行规则,也不会意外开放端口。
- 回环(lo)接口必须放行,否则本地服务通信会中断
- 已建立连接(established/related)必须放行,保证出站请求能正常回包
- SSH(22端口)必须保留,远程管理不能断——尤其对云服务器,建议提前确认控制台可访问
- HTTP/HTTPS(80/443)按需添加;Redis(6379)等敏感服务建议限制源 IP
用 nft 命令快速构建基础规则集
以下命令可一次性执行,也可写入脚本文件(如 /root/firewall-setup.sh)后 chmod +x 运行:
- 创建 inet 协议族的 filter 表:
sudo nft add table inet filter - 创建 input 链并设默认策略为 drop:
sudo nft add chain inet filter input { type filter hook input priority 0 \; policy drop \; } - 创建 output 链并设默认策略为 accept:
sudo nft add chain inet filter output { type filter hook output priority 0 \; policy accept \; } - 允许回环:
sudo nft add rule inet filter input iif "lo" accept - 允许已建立连接:
sudo nft add rule inet filter input ct state { established, related } accept - 放行 SSH:
sudo nft add rule inet filter input tcp dport 22 accept - 放行 HTTP/HTTPS:
sudo nft add rule inet filter input tcp dport { 80, 443 } accept
保存规则并启用开机自启
临时规则重启即失效,必须导出到配置文件并启用服务:
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
- 将当前规则保存到系统配置:
sudo nft list ruleset > /etc/nftables.conf - 验证配置语法是否正确:
sudo nft -f /etc/nftables.conf(无报错即成功) - 启用开机自动加载:
sudo systemctl enable nftables - 立即启动服务:
sudo systemctl start nftables
此后每次修改规则,都建议先用 nft -f 测试,再覆盖 /etc/nftables.conf 并 reload 服务。
常见补充:禁 ping 和限制 Redis 访问
增强防护时可追加这些典型规则:
- 禁止外部 ICMP 请求(禁 ping):
sudo nft add rule inet filter input icmp type echo-request counter drop - 只允许内网访问 Redis(假设内网段为 192.168.1.0/24):
sudo nft add rule inet filter input ip saddr 192.168.1.0/24 tcp dport 6379 accept - 在该规则之后加一条显式 drop,避免其他 IP 尝试连接:
sudo nft add rule inet filter input tcp dport 6379 drop
规则顺序很重要:nftables 按链中顺序匹配,一旦命中就执行动作并停止后续匹配。

















