以下是 Linux 中主要防火墙工具的常用命令解析,按类别整理:

一、iptables(传统防火墙)

基本结构

iptables -t <表> <命令> <链> <规则>

常用表

  • filter:过滤数据包(默认)
  • nat:网络地址转换
  • mangle:修改数据包
  • raw:数据包跟踪

核心命令

1. 查看规则
# 查看所有规则
iptables -L -n -v
iptables -t nat -L  # 查看NAT表
iptables -L --line-numbers  # 显示规则编号

# 查看INPUT链规则
iptables -L INPUT -n
2. 清除规则
# 清除所有规则
iptables -F
iptables -t nat -F

# 删除特定链的所有规则
iptables -F INPUT

# 删除用户自定义链
iptables -X

# 重置计数器
iptables -Z
3. 设置默认策略
# 设置链的默认策略
iptables -P INPUT DROP      # 默认丢弃
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
4. 添加/删除规则
# 允许SSH(端口22)
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

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

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

# 插入规则(指定位置)
iptables -I INPUT 3 -p tcp --dport 80 -j ACCEPT

# 删除规则(按编号)
iptables -D INPUT 2

# 删除规则(按条件)
iptables -D INPUT -p tcp --dport 80 -j ACCEPT
5. 状态跟踪
# 允许已建立的连接
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许新建连接
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
6. 保存与恢复
# 保存规则(不同发行版)
iptables-save > /etc/iptables/rules.v4  # Debian/Ubuntu
service iptables save                   # RHEL/CentOS 6
iptables-save > /etc/sysconfig/iptables # RHEL/CentOS

# 恢复规则
iptables-restore < /etc/iptables/rules.v4

二、nftables(新一代防火墙)

基本结构

nft add/delete/list <表类型> <表名> <链名> { 规则 }

核心命令

1. 查看规则
# 查看所有规则集
nft list ruleset

# 查看特定表
nft list table inet filter

# 查看计数器和统计
nft list ruleset -a
2. 管理表、链、规则
# 创建表
nft add table inet filter

# 创建链
nft add chain inet filter input { type filter hook input priority 0\; }

# 添加规则
nft add rule inet filter input tcp dport 22 accept
nft add rule inet filter input ip saddr 192.168.1.0/24 accept

# 插入规则(开头)
nft insert rule inet filter input position 0 tcp dport 80 accept

# 删除规则(需指定句柄)
nft list ruleset -a  # 获取句柄
nft delete rule inet filter input handle 3

# 删除链
nft delete chain inet filter input

# 删除表
nft delete table inet filter
3. 常用规则示例
# 允许SSH
nft add rule inet filter input tcp dport 22 accept

# 允许ICMP
nft add rule inet filter input ip protocol icmp accept

# 允许已建立的连接
nft add rule inet filter input ct state established,related accept

# 记录被拒绝的数据包
nft add rule inet filter input tcp dport 22 log prefix "SSH attempt: " drop
4. 保存与加载
# 保存规则
nft list ruleset > /etc/nftables.conf

# 加载规则
nft -f /etc/nftables.conf

# 清空规则
nft flush ruleset

三、firewalld(动态防火墙管理器)

基本概念

  • zone:网络区域(public, home, internal等)
  • service:预定义的服务(ssh, http, https等)
  • port:自定义端口

核心命令

1. 状态管理
# 查看状态
firewall-cmd --state
systemctl status firewalld

# 启动/停止/重启
systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld

# 启用/禁用开机启动
systemctl enable firewalld
systemctl disable firewalld
2. 区域管理
# 查看默认区域
firewall-cmd --get-default-zone

# 查看活动区域
firewall-cmd --get-active-zones

# 查看特定接口的区域
firewall-cmd --get-zone-of-interface=eth0

# 修改接口区域
firewall-cmd --zone=public --change-interface=eth0

# 设置默认区域
firewall-cmd --set-default-zone=public
3. 服务管理
# 列出所有可用服务
firewall-cmd --get-services

# 查看区域允许的服务
firewall-cmd --zone=public --list-services
firewall-cmd --zone=public --list-all

# 添加/移除服务
firewall-cmd --zone=public --add-service=http
firewall-cmd --zone=public --remove-service=http

# 永久添加(重启后生效)
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --reload  # 重新加载
4. 端口管理
# 添加/移除端口
firewall-cmd --zone=public --add-port=8080/tcp
firewall-cmd --zone=public --remove-port=8080/tcp

# 添加端口范围
firewall-cmd --zone=public --add-port=5000-5010/udp

# 永久添加端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
5. 高级配置
# 富规则(Rich Rules)
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" accept'
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="22" protocol="tcp" reject'

# 端口转发
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=8080
firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.10

# 查看所有配置
firewall-cmd --zone=public --list-all

四、UFW(简单防火墙)

核心命令

1. 状态管理
# 查看状态
ufw status
ufw status verbose  # 详细信息
ufw status numbered # 带编号显示

# 启用/禁用
ufw enable
ufw disable

# 重启
ufw reload
2. 基本规则
# 允许/拒绝服务
ufw allow ssh
ufw deny ssh

# 允许/拒绝端口
ufw allow 22
ufw deny 22

# 允许/拒绝特定协议
ufw allow 22/tcp
ufw allow 53/udp

# 允许端口范围
ufw allow 8000:9000/tcp
3. IP地址管理
# 允许/拒绝特定IP
ufw allow from 192.168.1.100
ufw deny from 192.168.1.200

# 允许特定IP访问特定端口
ufw allow from 192.168.1.100 to any port 22

# 允许网段
ufw allow from 192.168.1.0/24
4. 删除规则
# 查看规则编号
ufw status numbered

# 按编号删除
ufw delete 2

# 按条件删除
ufw delete allow ssh
ufw delete allow 22/tcp
5. 高级配置
# 设置默认策略
ufw default deny incoming   # 默认拒绝所有入站
ufw default allow outgoing  # 默认允许所有出站

# 限制连接速率(防暴力破解)
ufw limit ssh

# 允许特定网卡
ufw allow in on eth0
ufw allow in on eth0 to any port 80
6. 配置文件
# 查看应用配置文件
ls /etc/ufw/applications.d/

# 创建自定义应用配置
vim /etc/ufw/applications.d/myapp

五、命令对比速查表

操作 iptables nftables firewalld UFW
查看规则 iptables -L -n nft list ruleset firewall-cmd --list-all ufw status
允许SSH iptables -A INPUT -p tcp --dport 22 -j ACCEPT nft add rule inet filter input tcp dport 22 accept firewall-cmd --add-service=ssh ufw allow ssh
允许端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT nft add rule inet filter input tcp dport 80 accept firewall-cmd --add-port=80/tcp ufw allow 80/tcp
允许IP iptables -A INPUT -s 192.168.1.100 -j ACCEPT nft add rule inet filter input ip saddr 192.168.1.100 accept firewall-cmd --add-rich-rule='rule source ip="192.168.1.100" accept' ufw allow from 192.168.1.100
删除规则 iptables -D INPUT 2 nft delete rule inet filter input handle 3 firewall-cmd --remove-port=80/tcp ufw delete allow 80
保存配置 iptables-save > file nft list ruleset > file firewall-cmd --runtime-to-permanent ufw enable(自动保存)
重置规则 iptables -F nft flush ruleset firewall-cmd --reset-to-defaults ufw reset

六、实用建议

  1. 选择原则

    • 初学者:使用 UFW(简单直观)
    • 服务器管理:使用 firewalld(动态管理,支持区域)
    • 高级用户:直接使用 nftables(性能好,语法现代)
    • 兼容性需求:使用 iptables(广泛支持)
  2. 规则测试

    # 测试前先保持SSH连接,避免锁死
    # 添加临时规则测试
    # 使用日志记录调试
    
  3. 持久化

    • iptables/nftables:需手动保存配置文件
    • firewalld/UFW:修改自动持久化(或需 --permanent 参数)
  4. 日志监控

    # 查看防火墙日志
    tail -f /var/log/syslog | grep -i ufw
    journalctl -u firewalld
    dmesg | grep -i firewall
    

这个指南涵盖了最常用的防火墙操作,根据具体需求选择合适的工具和命令。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐