linux防火墙核心命令 - 教程

firewalld 核心操作命令

服务基础管理 启动 firewalld 服务:

systemctl start firewalld

停止 firewalld 服务:

systemctl stop firewalld

查看 firewalld 运行状态:

systemctl status firewalld

重新加载 firewalld 配置(不中断连接):

systemctl reload firewalld

设置 firewalld 开机自启:

systemctl enable firewalld

关闭 firewalld 开机自启:

systemctl disable firewalld

查看防火墙简洁状态(running/not running):

firewall-cmd --state


预定义资源查询

查看所有预定义区域

firewall-cmd --get-zones

查看所有预定义服务

firewall-cmd --get-services

格式化显示预定义服务(每行一个)

firewall-cmd --get-services | tr ' ' '\n'

查看所有预定义 ICMP 类型

firewall-cmd --get-icmptypes


预定义 ICMP 类型含义

  • destination-unreachable:目的地址不可达
  • echo-reply:应答回应(pong)
  • parameter-problem:参数问题
  • redirect:重新定向
  • router-advertisement:路由器通告
  • router-solicitation:路由器征寻
  • source-quench:源端抑制
  • time-exceeded:超时
  • timestamp-reply:时间戳应答回应
  • timestamp-request:时间戳请求

区域(Zone)管理

显示默认区域

firewall-cmd --get-default-zone

设置默认区域

firewall-cmd --set-default-zone=<区域名>

显示已激活的所有区域

firewall-cmd --get-active-zones

显示指定网卡绑定的区域

firewall-cmd --get-zone-of-interface=<网卡名>

为指定区域绑定网卡

firewall-cmd --zone=<区域名> --add-interface=<网卡名>

更改指定区域绑定的网卡

firewall-cmd --zone=<区域名> --change-interface=<网卡名>

为指定区域解绑网卡

firewall-cmd --zone=<区域名> --remove-interface=<网卡名>

显示所有区域的完整规则

firewall-cmd --list-all-zones

显示指定区域规则(省略则默认区域)

firewall-cmd [--zone=<区域名>] --list-all


服务管理(基于预定义服务)

显示区域内允许的服务

firewall-cmd [--zone=<区域名>] --list-services

为区域添加允许的服务

firewall-cmd [--zone=<区域名>] --add-service=<服务名>

从区域移除允许的服务

firewall-cmd [--zone=<区域名>] --remove-service=<服务名>


端口管理(自定义端口)

显示区域内允许的端口

firewall-cmd [--zone=<区域名>] --list-ports

为区域添加允许的端口

firewall-cmd [--zone=<区域名>] --add-port=<端口号/范围>-<协议>

从区域移除允许的端口

firewall-cmd [--zone=<区域名>] --remove-port=<端口号/范围>-<协议>


ICMP 类型管理

显示区域内拒绝的 ICMP 类型

firewall-cmd [--zone=<区域名>] --list-icmp-blocks

为区域添加拒绝的 ICMP 类型

firewall-cmd [--zone=<区域名>] --add-icmp-block=

从区域移除拒绝的 ICMP 类型

firewall-cmd [--zone=<区域名>] --remove-icmp-block=


富规则(精细化控制)

拒绝 10.0.0.1/24 网段访问 80 端口

firewall-cmd --zone=public --add-rich-rule="rule family='ipv4' source address='10.0.0.1/24' port port=80 protocol=tcp drop"

查看区域内的富规则

firewall-cmd [--zone=<区域名>] --list-rich-rules


配置模式与重载

永久配置生效,保持当前连接

firewall-cmd --reload

配置永久规则(需 reload 生效)

firewall-cmd --permanent [其他选项]

将运行时配置写入永久配置文件

firewall-cmd --runtime-to-permanent


配置文件目录

  • /etc/firewalld/:用户自定义配置目录,优先级更高
  • /usr/lib/firewalld/:默认配置目录,不建议修改

iptables 核心概念:四表五链

四表(功能分类)

  • filter(默认表):数据包过滤,控制是否允许数据包通过
  • nat:网络地址转换,修改数据包源/目标地址
  • mangle:修改数据包特殊标记(如 TTL、TOS)
  • raw:跳过连接跟踪,处理特殊数据包

五链(处理流程环节)

  • INPUT:处理进入本机的数据包
  • OUTPUT:处理从本机发出的数据包
  • FORWARD:处理经过本机转发的数据包(路由器场景)
  • PREROUTING:数据包进入防火墙前处理,用于 DNAT
  • POSTROUTING:数据包离开防火墙后处理,用于 SNAT

iptables 基本命令

查看规则

iptables -L -n -v

显示指定链的规则(如 INPUT)

iptables -L INPUT -n -v

清空规则

iptables -F

清空指定链的规则(如 INPUT)

iptables -F INPUT

删除所有自定义链

iptables -X

重置所有链的计数器

iptables -Z

添加规则

iptables -A INPUT -s 192.168.1.100 -j ACCEPT

允许特定端口的入站连接(如 SSH 的 22 端口)

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

拒绝来自特定 IP 的访问

iptables -A INPUT -s 192.168.1.101 -j DROP

删除规则

iptables -D INPUT 2

根据匹配条件删除规则

iptables -D INPUT -p tcp --dport 22 -j ACCEPT

默认策略

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

保存与恢复规则

service iptables save

或(Ubuntu/Debian)

iptables-save > /etc/iptables.rules

恢复规则

iptables-restore < /etc/iptables.rules

NAT 规则

sysctl -p

源地址转换(SNAT)

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

端口转发(将 80 端口转发到内部 IP)

iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.100:80

其他常用选项

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

记录被丢弃的数据包

iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: "

posted on 2026-02-03 14:25  ljbguanli  阅读(0)  评论(0)    收藏  举报