Get the FREE Ultimate OpenClaw Setup Guide →
npx machina-cli add skill chaterm/terminal-skills/firewall --openclaw
Files (1)
SKILL.md
4.7 KB

防火墙配置

概述

iptables、firewalld、nftables、ufw 防火墙配置技能。

iptables

基础命令

# 查看规则
iptables -L -n -v
iptables -L -n --line-numbers
iptables -t nat -L -n -v

# 清空规则
iptables -F
iptables -X
iptables -t nat -F

# 默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

常用规则

# 允许回环
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许 SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许 HTTP/HTTPS
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许特定 IP
iptables -A INPUT -s 192.168.1.100 -j ACCEPT

# 允许网段
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT

# 拒绝其他
iptables -A INPUT -j DROP

删除规则

# 按行号删除
iptables -D INPUT 3

# 按规则删除
iptables -D INPUT -p tcp --dport 80 -j ACCEPT

NAT 配置

# 开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward

# SNAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# DNAT 端口转发
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80
iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT

保存规则

# Debian/Ubuntu
iptables-save > /etc/iptables/rules.v4
iptables-restore < /etc/iptables/rules.v4

# CentOS/RHEL
service iptables save

firewalld

基础命令

# 状态
systemctl status firewalld
firewall-cmd --state

# 重载
firewall-cmd --reload

# 查看区域
firewall-cmd --get-zones
firewall-cmd --get-default-zone
firewall-cmd --get-active-zones

服务管理

# 查看服务
firewall-cmd --list-services
firewall-cmd --get-services

# 添加服务
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent

# 删除服务
firewall-cmd --remove-service=http --permanent

端口管理

# 查看端口
firewall-cmd --list-ports

# 添加端口
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --add-port=5000-5100/tcp --permanent

# 删除端口
firewall-cmd --remove-port=8080/tcp --permanent

富规则

# 允许特定 IP
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.100" accept' --permanent

# 允许网段访问端口
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept' --permanent

# 拒绝 IP
firewall-cmd --add-rich-rule='rule family="ipv4" source address="10.0.0.100" reject' --permanent

ufw (Ubuntu)

基础命令

# 启用/禁用
ufw enable
ufw disable

# 状态
ufw status
ufw status verbose
ufw status numbered

规则管理

# 允许端口
ufw allow 22
ufw allow 80/tcp
ufw allow 443/tcp

# 允许服务
ufw allow ssh
ufw allow http

# 允许 IP
ufw allow from 192.168.1.100

# 允许网段到端口
ufw allow from 192.168.1.0/24 to any port 3306

# 拒绝
ufw deny 23

# 删除规则
ufw delete allow 80
ufw delete 3

默认策略

ufw default deny incoming
ufw default allow outgoing

常见场景

场景 1:Web 服务器

# iptables
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -j DROP

# firewalld
firewall-cmd --add-service=ssh --permanent
firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

场景 2:数据库服务器

# 只允许应用服务器访问
iptables -A INPUT -s 192.168.1.10 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -s 192.168.1.11 -p tcp --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP

场景 3:限速防护

# 限制 SSH 连接频率
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP

故障排查

问题排查方法
连接被拒检查规则顺序、默认策略
规则不生效检查 --permanent、reload
NAT 不工作检查 ip_forward、FORWARD 链
# 查看计数
iptables -L -n -v

# 日志
iptables -A INPUT -j LOG --log-prefix "IPT_DROP: "
tail -f /var/log/messages | grep IPT_DROP

# 连接跟踪
conntrack -L

Source

git clone https://github.com/chaterm/terminal-skills/blob/main/security/firewall/SKILL.mdView on GitHub

Overview

该技能提供对 iptables、firewalld、nftables、ufw 的完整防火墙配置能力。你可以查看、添加、删除规则,设置默认策略,配置 NAT 转发,以及在 Debian/Ubuntu 与 CentOS/RHEL 等发行版上保存规则。通过模板化示例,你可以快速在开发、测试和生产环境中部署安全网关策略。

How This Skill Works

你通过该技能生成可直接执行的命令片段和配置块,覆盖基础链、常用规则、NAT、以及规则持久化。技能按工具分模块,提供 iptables 的基础命令、火墙区域管理、ufw 的简化工作流等,并给出故障排查的诊断步骤。该技能围绕四大工具(iptables、firewalld、ufw、nftables)的常用场景展开,确保你能在不同 Linux 发行版上实现一致的防火墙行为。

When to Use It

  • 需要为新服务器快速建立最小权限的防火墙并确保基本可用性
  • 需要保护常见服务端口(SSH、HTTP/HTTPS、数据库等)并实现具体访问控制
  • 需要实现 NAT 转发、端口映射或网段级访问控制
  • 在多网段环境中对流量进行分段、白名单或黑名单策略
  • 需要持久化防火墙规则并在重启后保持生效
  • 进行网络边界的合规性和日志监控相关配置时

Quick Start

  1. 备份现有防火墙配置(规则文件或当前规则)
  2. 选择目标工具(iptables、firewalld、ufw、nftables),并安装/启用相关服务
  3. 应用基础规则:允许回环、允许已建立/相关连接、设置默认策略
  4. 逐步加入应用场景中的规则,如只开放必要端口、限制源IP/网段
  5. 保存并重载防火墙配置,验证连通性与安全性

Best Practices

  • 默认策略采取最小权限原则(INPUT DROP、FORWARD DROP、OUTPUT ACCEPT,如有需要再放通)
  • 始终允许回环接口以及已建立/相关连接的流量
  • 对 SSH、HTTP/HTTPS、数据库等关键端口使用明确的允许规则,避免广域放通
  • 启用日志记录并定期轮换日志,便于故障排查与安全审计
  • 使用持久化/永久性配置(permanent、保存到规则文件),并在版本控制系统中管理规则变更
  • 在变更前后执行充分的测试(连通性、重复应用、重启后规则保持生效)

Example Use Cases

  • 场景 1:Web 服务器 ```bash # iptables iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp --dport 22 -j ACCEPT iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT iptables -A INPUT -j DROP # firewalld firewall-cmd --add-service=ssh --permanent firewall-cmd --add-service=http --permanent firewall-cmd --add-service=https --permanent firewall-cmd --reload ```
  • 场景 2:数据库服务器 ```bash # 只允许应用服务器访问 iptables -A INPUT -s 192.168.1.10 -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -s 192.168.1.11 -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP ```
  • 场景 3:限速防护 ```bash # 限制 SSH 连接频率 iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP ```
  • 场景 4:NAT/端口转发 ```bash # 开启转发 echo 1 > /proc/sys/net/ipv4/ip_forward # SNAT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # DNAT 端口转发 iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to 192.168.1.10:80 iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT ```
  • 场景 5:数据库前置网段隔离 ```bash # 只允许应用服务器网段访问 3306 iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT iptables -A INPUT -p tcp --dport 3306 -j DROP ```

Frequently Asked Questions

Add this skill to your agents

Related Skills

Sponsor this space

Reach thousands of developers