linux防火墙核心命令

firewalld 核心操作命令

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

bash 复制代码
systemctl start firewalld

停止 firewalld 服务:

bash 复制代码
systemctl stop firewalld

查看 firewalld 运行状态:

bash 复制代码
systemctl status firewalld

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

bash 复制代码
systemctl reload firewalld

设置 firewalld 开机自启:

bash 复制代码
systemctl enable firewalld

关闭 firewalld 开机自启:

bash 复制代码
systemctl disable firewalld

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

bash 复制代码
firewall-cmd --state

预定义资源查询

查看所有预定义区域

bash 复制代码
firewall-cmd --get-zones

查看所有预定义服务

bash 复制代码
firewall-cmd --get-services

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

bash 复制代码
firewall-cmd --get-services | tr ' ' '\n'

查看所有预定义 ICMP 类型

bash 复制代码
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)管理

显示默认区域

bash 复制代码
firewall-cmd --get-default-zone

设置默认区域

bash 复制代码
firewall-cmd --set-default-zone=<区域名>

显示已激活的所有区域

bash 复制代码
firewall-cmd --get-active-zones

显示指定网卡绑定的区域

bash 复制代码
firewall-cmd --get-zone-of-interface=<网卡名>

为指定区域绑定网卡

bash 复制代码
firewall-cmd --zone=<区域名> --add-interface=<网卡名>

更改指定区域绑定的网卡

bash 复制代码
firewall-cmd --zone=<区域名> --change-interface=<网卡名>

为指定区域解绑网卡

bash 复制代码
firewall-cmd --zone=<区域名> --remove-interface=<网卡名>

显示所有区域的完整规则

bash 复制代码
firewall-cmd --list-all-zones

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

bash 复制代码
firewall-cmd [--zone=<区域名>] --list-all

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

显示区域内允许的服务

bash 复制代码
firewall-cmd [--zone=<区域名>] --list-services

为区域添加允许的服务

bash 复制代码
firewall-cmd [--zone=<区域名>] --add-service=<服务名>

从区域移除允许的服务

bash 复制代码
firewall-cmd [--zone=<区域名>] --remove-service=<服务名>

端口管理(自定义端口)

显示区域内允许的端口

bash 复制代码
firewall-cmd [--zone=<区域名>] --list-ports

为区域添加允许的端口

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

从区域移除允许的端口

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

ICMP 类型管理

显示区域内拒绝的 ICMP 类型

bash 复制代码
firewall-cmd [--zone=<区域名>] --list-icmp-blocks

为区域添加拒绝的 ICMP 类型

bash 复制代码
firewall-cmd [--zone=<区域名>] --add-icmp-block=<ICMP类型>

从区域移除拒绝的 ICMP 类型

bash 复制代码
firewall-cmd [--zone=<区域名>] --remove-icmp-block=<ICMP类型>

富规则(精细化控制)

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

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

查看区域内的富规则

bash 复制代码
firewall-cmd [--zone=<区域名>] --list-rich-rules

配置模式与重载

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

bash 复制代码
firewall-cmd --reload

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

bash 复制代码
firewall-cmd --permanent [其他选项]

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

bash 复制代码
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 基本命令

查看规则

bash 复制代码
iptables -L -n -v

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

bash 复制代码
iptables -L INPUT -n -v

清空规则

bash 复制代码
iptables -F

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

bash 复制代码
iptables -F INPUT

删除所有自定义链

bash 复制代码
iptables -X

重置所有链的计数器

bash 复制代码
iptables -Z

添加规则

bash 复制代码
iptables -A INPUT -s 192.168.1.100 -j ACCEPT

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

bash 复制代码
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

拒绝来自特定 IP 的访问

bash 复制代码
iptables -A INPUT -s 192.168.1.101 -j DROP

删除规则

bash 复制代码
iptables -D INPUT 2

根据匹配条件删除规则

bash 复制代码
iptables -D INPUT -p tcp --dport 22 -j ACCEPT

默认策略

bash 复制代码
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

保存与恢复规则

bash 复制代码
service iptables save

或(Ubuntu/Debian)

bash 复制代码
iptables-save > /etc/iptables.rules

恢复规则

bash 复制代码
iptables-restore < /etc/iptables.rules

NAT 规则

bash 复制代码
sysctl -p

源地址转换(SNAT)

bash 复制代码
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

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

bash 复制代码
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.100:80

其他常用选项

bash 复制代码
iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

记录被丢弃的数据包

bash 复制代码
iptables -A INPUT -j LOG --log-prefix "IPTables-Dropped: "
相关推荐
噜啦噜啦嘞好6 小时前
Linux——网络概念
linux·网络
OurBMC社区6 小时前
玩转OurBMC第二十三期:OurBMC之PCIe接口应用(下)
linux·运维·网络
初圣魔门首席弟子7 小时前
核心 Bug:客户端与服务器端口不匹配(导致请求无法送达)
linux·网络
是垚不是土7 小时前
基于Blackbox Exporter的网络服务黑盒监控体系实践
网络·数据库·安全·http·微服务·prometheus
福尔摩斯张7 小时前
TCP协议深度解析:从报文格式到连接管理(超详细)
linux·c语言·网络·c++·笔记·网络协议·tcp/ip
那我掉的头发算什么7 小时前
【javaEE】保姆级 HTTP 全解析:请求响应 + 状态码 + Fiddler 实操
网络·http·java-ee·fiddler
代码不行的搬运工7 小时前
交换机和网卡的 PFC 机制工作原理与实例解析
运维·服务器·网络·算力网络
Sleepy MargulisItG7 小时前
【Linux网络编程】UDP Socket
linux·网络·udp
一条懒鱼6667 小时前
k8s-网络
网络·容器·kubernetes