当前位置: 首页 > news >正文

Linux----防火墙

一、网络安全

一、iptables 与 Netfilter

Netfilter:内核态框架(真正干活的)Linux 内核内置的数据包处理框架,在网络协议栈设置 5 个钩子 (Hook) 点位,数据包途经这些点位时可以被拦截、修改、丢弃、转发,提供防火墙、NAT、报文修改底层能力。

iptables:用户态命令工具(下发规则的)运行在用户空间的命令行程序,本身不处理数据包。作用:将管理员编写的防火墙规则,通过 Netlink 通信下发给内核的 Netfilter 框架执行。

通俗比喻: Netfilter = 大楼里 5 处安检关卡(内核); iptables = 前台填表窗口,你在这里写安检规则,交给关卡执行。

二、Netfilter 五大钩子(对应 iptables 五条链)

数据包在 Linux 内核网络通道上,有 5 个固定检查站,就是这 5 条链,数据包按固定顺序路过检查站接受规则检查

1. PREROUTING( prerouting 链)

📍位置:数据包刚从网卡进到内核,还没做路由判断,数据包刚进网卡,还没决定往哪送。

✅场景:别人发数据包到达本机网卡,第一站就是这里

💡能干啥:DNAT(目标地址转换)改数据包目标 IP,端口映射就在这

举例子:访问公网 IP:80,把流量转发到内网 192.168.1.100:8080,在这里改目标 IP

2. INPUT(input 链)

📍位置:路由判断后,确定数据包就是发给本机程序

✅场景:外部流量访问本机上运行的服务(ssh、nginx)

💡能干啥:控制外部能不能访问本机端口,管别人能不能连我这台服务器(禁 22 端口)

举例子:禁止外网访问服务器 22 端口,就在 INPUT 链写 DROP 规则

3. FORWARD(forward 链)

📍位置:路由判断后,发现包不是给本机,要经过本机转发给别的机器

✅场景:Linux 当作路由器 / 网关,流量跨网段转发

💡能干啥:过滤跨网段转发的流量

举例子:内网主机能不能访问外网,网关防火墙规则写在 FORWARD

4. OUTPUT(output 链)

📍位置:本机内部程序主动向外发包,刚生成数据包,还没路由

✅场景:服务器自己主动向外发起请求(curl、yum 更新)

💡能干啥:管控本机向外发起的流量

举例子:禁止服务器主动访问外部 80 端口

5. POSTROUTING(postrouting 链)

📍位置:数据包路由完成,即将离开网卡前最后一站

✅场景:所有要从本机网卡发出去的包(转发包、本机出站包)

💡能干啥:SNAT、MASQUERADE(源地址转换)

举例子:内网主机共享服务器公网 IP 上网,在这里修改数据包源 IP 为公网地址

1、两条完整数据流路线对照图

路线 A:外部主机 → 访问本机服务

网卡 →PREROUTING→ 路由查询 →INPUT→ 用户空间程序

路线 B:外部主机 → 经由 Linux 网关转发到另一台主机

网卡 →PREROUTING→ 路由查询 →FORWARDPOSTROUTING→ 网卡发出

路线 C:本机程序主动向外发包

用户程序 →OUTPUT→ 路由查询 →POSTROUTING→ 网卡发出

2、超简短记忆版

进网卡先PREROUTING

包是给本机 →INPUT

包要转给别人 →FORWARD

本机主动发包 →OUTPUT

出网卡最后一关POSTROUTING

3、DNAT / SNAT 一句话分清

DNAT:改目标地址,别人找进来的时候用(PREROUTING)外网用户访问网关公网 IP,我把数据包的目标 IP 偷偷换成内网服务器地址,流量就拐进内网机器。外网流量拐进内网

SNAT:改源地址,内网机器往外跑的时候用(POSTROUTING)内网电脑上网,出去的时候把数据包源 IP 换成网关公网 IP,外网只能看到网关,不知道内网机器真实地址。内网机器借用网关公网 IP 上网

前置提醒

使用 iptables 前:关闭并 mask firewalld,安装 iptables-services

systemctl stop firewalld

systemctl disable firewalld

systemctl mask firewalld

yum install -y iptables-services

systemctl start iptables

systemctl enable iptables

使用 firewalld 前:停止 iptables,解除 firewalld 锁定

systemctl stop iptables

systemctl disable iptables

systemctl unmask firewalld

systemctl start firewalld

systemctl enable firewalld

三、iptables命令

命令通用格式

iptables [-t 表名] 操作指令 [链名] [匹配条件] -j 动作

-t 表名不写默认是filter 表(过滤)表:filter(防火墙)、nat(地址转换)、mangle、raw

1、核心操作参数

参数全称大白话含义重点提醒
-Llist列出所有规则搭配-n不解析域名,速度快iptables -L -n
-vverbose显示详细信息(流量统计)-Lnv标准查看组合
-Aappend追加规则,加到链最后一行匹配顺序从上往下!越靠后优先级越低
-Iinsert插入规则,默认放到第一行紧急封禁用这个,优先匹配
-Ddelete删除一条规则写法要和创建时一模一样,或者按行号删
-Fflush清空所有规则⚠️谨慎!不要随便在远程服务器执行,容易断连接
--line显示出每条规则在相应链中的序号
-Rreplace修改某一条规则

iptables -R INPUT 2 xxx修改第 2 条

-P设置整条链的默认策略默认策略不属于链内规则!iptables -F清空规则不会重置-P默认策略!

2、匹配条件

参数人话解释示例
-s ip源 IP:数据包是谁发出来的-s 192.168.1.0/24
-d ip目标 IP:数据包要发给谁-d 203.0.113.10
-p tcp/udp/icmp匹配协议-p tcp
--dport 端口目标端口(别人访问本机的端口)--dport 22
--sport 端口源端口(对方发起连接的端口)--sport 80
-i 网卡数据包从哪个网卡进来-i eth0
-o 网卡数据包从哪个网卡出去-o eth0
--to-ports 目标端口跳转目标端口

3、-j 动作(匹配成功后干什么)

  1. ACCEPT:放行,允许数据包通过
  2. DROP:直接丢掉,不回复对方(对方一直转圈等待)
  3. REJECT:拒绝,返回 “连接拒绝” 提示
  4. REDIRECT:端口重定向,只能在本机内部转发(仅在nat表使用)
  5. DNAT =目标网络地址转换作用:修改数据包的【目标 IP / 目标端口】
  6. SNAT:源网络地址转换作用:修改数据包的【源 IP 地址】一般配合 DNAT 使用,解决跨机器端口转发回程不通的问题。
  1. DNAT 负责去程改目标,SNAT 负责去程改源
  2. DNAT 和 SNAT 成对使用,缺一不可(跨机器转发场景)
  3. REDIRECT 本质可以理解成特殊的 DNAT,强制目标为本机,不能指定其他 IP

💡人话区分 DROP 与 REJECT:

DROP = 假装没看见包裹,直接扔垃圾桶;

REJECT = 收到包裹,明确回信告诉你不收。

4、常用基础命令

1. 查看规则

# 查看filter表规则(默认表) iptables -L -n -v # 查看nat表规则(SNAT/DNAT用) iptables -t nat -L -n -v

2. 放行 / 封禁本机端口(INPUT 链,别人访问本机)

# 允许所有人访问本机22端口ssh iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 禁止 192.168.1.5 访问本机80端口 iptables -A INPUT -s 192.168.1.5 -p tcp --dport 80 -j DROP # 在最顶部插入规则,优先封禁某个IP iptables -I INPUT -s 10.0.0.10 -j DROP

3. 本机主动向外访问(OUTPUT 链)

# 禁止本机主动访问外网80端口 iptables -A OUTPUT -p tcp --dport 80 -j DROP
参数含义做题口诀
-s IP数据包从这个 IP 发出出发 IP 写 - s
-d IP数据包要去到这个 IP目标 IP 写 - d
--dport 端口接收方的端口被访问端口一律 dport
--sport 端口发送方的端口对方自带端口 sport

四、iptables 端口转发(必须用 nat 表)

类型作用典型命令关键字
REDIRECT(本机端口转发)natPREROUTING本机端口转向本机另一个端口-j REDIRECT --to-port
DNAT 端口映射natPREROUTING目的 IP,外网访问内网服务器-j DNAT --to‑destination ip:port
SNAT 静态源地址转换natPOSTROUTING源 IP,内网固定 IP 上网-j SNAT --to‑source
MASQUERADE 地址伪装natPOSTROUTING动态外网 IP 内网上网-j MASQUERADE

1、Linux 开启 IPv4 内核转发(端口转发前置配置)

1. 修改配置文件 vim /etc/sysctl.conf 在文件内添加 / 修改这一行:net.ipv4.ip_forward = 1 ⚠️ 注意:如果该行前面有#注释,需要删掉# 2. 加载生效配置(必须执行) sysctl -p /etc/sysctl.conf 3. 验证是否成功开启 cat /proc/sys/net/ipv4/ip_forward 返回 1 ✅:转发已开启(截图中就是成功状态) 返回 0 ❌:转发关闭

2、临时生效方案(重启失效)

echo 1 > /proc/sys/net/ipv4/ip_forward

适合临时测试,服务器重启后会重置为 0。

前置知识

nat表:专门处理地址转换,分三条核心链

PREROUTING:数据包刚进网卡、路由判断之前(外网 / 别的机器访问本机流量走这里)

OUTPUT本机自己访问本机产生的数据包

POSTROUTING:数据包准备离开机器、往外发的时候

两大转发模式:本地端口转发远程端口转发(跨机器 DNAT)

3、本地端口转发(本机内部端口跳转)

作用:别人访问这台机器的【端口 A】,自动转给同一台机器上的【端口 B】

例子:访问本机:4444→ 转到本机:22

① 外部 / 其他机器访问本机 4444(走 PREROUTING)

iptables-tnat-APREROUTING-ptcp--dport4444-jREDIRECT--to-ports22

数据包从外面进来,目标端口是 4444,直接重定向到本机 22 端口。

本机自己访问本机 4444(必须加 OUTPUT 规则!大坑)

iptables-tnat-AOUTPUT-ptcp--dport4444-jREDIRECT--to-ports22

⚠️重点: 外部机器连本机走PREROUTING本机 curl 127.0.0.1:4444这种流量不走 PREROUTING,只走OUTPUT链,不加这条本地访问会失效!

REDIRECT:只能用于本机内部端口跳转,不能把流量转给另一台服务器。

4、远程端口转发(跨机器转发 DNAT)

场景:流量到达机器 A (192.168.1.100:5555),转发给内网另一台机器 B (192.168.1.200:80)

需要两条配套规则同时生效,缺一不可!

规则 1 DNAT(PREROUTING:改目标地址)

iptables-tnat-APREROUTING-ptcp--dport5555-jDNAT--to-destination192.168.1.200:80

别人访问 192.168.1.100:5555,把数据包目标 IP + 端口改成 192.168.1.200:80,数据包路由发往 B 机器。

规则 2 SNAT(POSTROUTING:改源地址)

iptables-tnat-APOSTROUTING-ptcp-d192.168.1.200--dport80-jSNAT--to-source192.168.1.100

B 机器收到请求后要回包,如果不做 SNAT,B 会直接把响应包发给原始客户端,客户端不认这个连接直接断开。 SNAT 强制把请求来源 IP 伪装成转发服务器 A (192.168.1.100)。 B 回复数据只发给 A,A 再原路转发给客户端,链路闭环。

通俗链路全过程

客户端 → 【A:5555】

  1. A 收到包,DNAT:目标改成 B:80 → 包发给 B
  2. B 收到请求,看见来源 IP 是 A(SNAT 效果)
  3. B 把返回数据发给 A
  4. A 再把响应传回原始客户端
类型使用模块用到链适用场景能不能跨机器
本地端口转发REDIRECTPREROUTING + OUTPUT同一台机器端口互转❌ 只能本机
远程跨机转发DNAT+SNAT 组合PREROUTING + POSTROUTING流量转发到其他服务器

✅ 支持跨机器

五、firewalld 命令

一、九大区域(zone)优先级 & 作用

firewalld 区域本质:一套预设规则模板,网卡 / 来源地址绑定区域后,就使用该区域策略;匹配顺序:source 来源 > interface 网卡 > 默认区域。

区域安全等级核心用途默认放行服务理解
trusted最低信任(最宽松)全部流量允许,内网信任服务器所有流量✅完全不设防,谁来都放行;只用于百分百可信机器,生产慎用
home家庭内网,信任其他设备ssh, mdns, samba‑client, dhcpv6‑client家里 WiFi 环境,信任家里其他电脑、手机,开放较多局域网相关服务
internal内部局域网,同 homessh, mdns, samba‑client, dhcpv6‑client公司内网,信任内网设备,和 home 规则几乎一模一样
work中等办公局域网ssh, dhcpv6‑client办公室网络,信任办公设备,开放服务比 home 少一点
public中等(系统默认区域)公网服务器通用默认模板ssh, dhcpv6‑client系统默认 zone,外网环境;不信任外网,至少保留 ssh 方便远程登录管理机器
external较高作为路由器外网网卡,开启地址伪装 masqueradesshLinux 充当路由器,做 NAT 共享上网;内网主机可以通过这台机器访问外网
dmz高(隔离区)外网可访问的堡垒机、对外服务器,仅必要端口ssh对外放网站 / 服务的隔离区;默认只开 ssh,其他全部需要手动放行,就算外网访问你的服务,也不相信访问者
block很高所有入站拒绝,返回 icmp 拒绝消息无任何放行别人连你直接收到拒绝报错,明确告诉对方:不给访问
drop最高(最严格)所有入站直接丢弃,不回应无任何放行悄咪咪扔掉数据包,不给对方任何回复;对方只会一直超时,仿佛这台机器不存在

重点:区域只是模板!策略生效前提:网卡 / 源地址绑定到该 zone

二、区域切换操作(网卡归属 zone 修改)

1. 查询信息

# 查看网卡当前所在区域 firewall-cmd --get-zone-of-interface=ens33 # 查看活跃区域(网卡绑定在哪,哪个就是active) firewall-cmd --get-active-zones # 查看系统默认区域(不绑定网卡的流量走这里) firewall-cmd --get-default-zone

2. 切换网卡所属区域(两种方式)

临时生效(重启防火墙丢失) firewall-cmd --zone=dmz --change-interface=ens33 永久生效(推荐实验) firewall-cmd --permanent --zone=dmz --change-interface=ens33 # 重载配置生效 firewall-cmd --reload

3. 修改系统全局默认区域

firewall-cmd --permanent --set-default-zone=public firewall-cmd --reload
查询 (get)设置 (set)功能
--get-default-zone--set-default-zone=xxx查询 / 设置全局默认 zone
--get‑zone‑of‑interface=ens33--change‑interface=ens33查询 / 修改网卡所属 zone(注意这里不用 set!
--get‑active‑zones查看当前激活 zone,没有 set 版本

三、基础规则:放行服务 / 端口(普通规则)

语法统一:--permanent永久配置 +firewall-cmd --reload重载

1. 放行预定义服务(推荐,使用 services 目录 xml)

预定义服务 xml 模板目录:/usr/lib/firewalld/services/

用户自定义存放目录:/etc/firewalld/services/

拿系统现成 xml 当模板,复制到 /etc/firewalld/services 下面改端口

1.复制http模板,新建myweb服务

cp /usr/lib/firewalld/services/http.xml /etc/firewalld/services/myweb.xml

2.编辑vim /etc/firewalld/services/myweb.xml

<?xml version="1.0" encoding="utf-8"?>

<service>

<short>myweb</short>

<description>自定义8080服务</description>

<port protocol="tcp" port="8080"/>

</service>

自己写出协议和端口号

⚠️坑:不要直接修改 /usr/lib 下面的 xml,升级软件会把你的修改冲掉。

# dmz区域放行http服务(临时去掉--permanent) firewall-cmd --permanent --zone=dmz --add-service=http # 删除服务 firewall-cmd --permanent --zone=dmz --remove-service=http

2. 放行自定义端口 / 协议

# 放行tcp 8080端口 firewall-cmd --permanent --zone=dmz --add-port=8080/tcp # 放行端口范围 firewall-cmd --permanent --zone=dmz --add-port=3000-4000/tcp # 删除端口 firewall-cmd --permanent --zone=dmz --remove-port=8080/tcp

3. 查询区域全部规则

firewall-cmd --zone=dmz --list-all

四、富规则 rich-rule(高级规则,细粒度控制,重点考点)

普通规则:只能全局放行端口,无法限制来源 IP富规则:可精准控制【源地址、目标地址、端口、协议、动作(允许 / 拒绝)、日志】

通用模板

firewall-cmd --permanent --zone=dmz --add-rich-rule='规则内容'

参数含义
firewall-cmdfirewalld 防火墙管理工具
--permanent永久配置,写入配置文件;不立即生效,需要执行firewall‑cmd --reload重载才会真正启用;不加此参数只在内存临时生效,服务重启丢失
--zone=dmz这条富规则作用于dmz 区域,只对归属 dmz 的网卡流量生效(你机器 ens33 就在 dmz)
--add-rich-rule='xxx'添加一条富规则(rich‑rule)。富规则可以实现更精细控制,普通--add‑service做不到按源 IP 限制;单引号包裹完整规则内容
高频实验示例

示例 1:仅允许 192.168.42.0/24 访问 ssh (22 端口),其他 IP 禁止 ssh

firewall-cmd -permanent --zone=dmz --add-rich-rule='rule family="ipv4" source address="192.168.42.0/24" service name="ssh" accept'
片段解释
rule富规则的起始关键字,代表定义一条规则
family="ipv4"协议族,作用于IPv4 流量;写ipv6就匹配 ipv6 数据包
source address="192.168.42.0/24"源地址,只匹配来自192.168.42.0/24网段的数据包;/24子网掩码 255.255.255.0
service name="ssh"匹配 ssh 服务,对应 22 端口;也可以用port protocol="tcp" port="22"写法
accept动作:允许通过;其他动作:reject拒绝回复报错、drop丢弃不回复

示例 2:拒绝指定 IP 访问 80 端口

firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" source address="10.0.0.5" port protocol="tcp" port="80" reject'
片段含义
rule富规则起始标记,代表定义一条规则
family="ipv4"匹配 IPv4 协议的数据包
source address="10.0.0.5"源 IP 地址:只匹配来自主机10.0.0.5的流量
port protocol="tcp" port="80"匹配目标端口:TCP 协议的 80 端口(http)
reject动作:拒绝,返回错误应答包给对方。对比:drop直接丢弃数据包,不给任何回应

示例 3:允许单个 IP 访问 3306 数据库端口

firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" source address="192.168.42.100" port protocol="tcp" port="3306" accept'

示例 4:带日志记录访问行为

firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="8080" protocol="tcp" log prefix="http-access:" accept'
片段含义
rule富规则开始标记,定义一条规则
family="ipv4"只匹配 IPv4 数据包
source address="192.168.1.0/24"源网段:来自192.168.1.0/24整个网段的主机
port port="8080" protocol="tcp"匹配本机目标端口TCP 8080
log prefix="http-access:"日志记录;匹配该规则的数据包写入系统日志,日志行开头打上标记http-access:,方便过滤查看日志
accept动作:允许数据包通过防火墙
富规则管理
# 列出zone内所有富规则 firewall-cmd --zone=dmz --list-rich-rules # 删除富规则(复制完整规则字符串替换) firewall-cmd --permanent --zone=dmz --remove-rich-rule='完整规则文本' # 重载生效 firewall-cmd --reload

实验必背操作流程总结

  1. 查看防火墙状态systemctl status firewalld
  2. 确认网卡所在 zonefirewall-cmd --get-active-zones
  3. 将网卡切换至目标区域 dmz(永久)
  4. 添加基础放行规则 / 编写富规则限制来源 IP
  5. firewall-cmd --reload重载配置
  6. --list-all校验规则

常见排错点

  1. 添加规则忘记加--permanent,重启丢失;
  2. 未指定--zone=,操作默认 public,网卡在 dmz 导致规则无效(你截图报错场景);
  3. 添加规则后没有执行 reload
  4. 富规则引号:外层单引号,内部参数双引号,符号不能写错。

firewall‑cmd 常用参数总表

提示:带--permanent写入配置,需--reload才生效;不带为内存临时规则,重启丢失

分类参数功能说明
全局基础--permanent设置为永久配置,写入配置文件,不立即生效
--reload重载防火墙,加载永久配置,已有连接不中断
--complete‑reload完全重启防火墙,断开全部现有连接
--get‑zones列出 firewalld 全部 9 个区域
--get‑active‑zones查看活跃区域(绑定网卡的 zone)
--get‑default‑zone查询系统全局默认区域
--set‑default‑zone=<zone>设置系统全局默认区域
网卡接口--get‑zone‑of‑interface=ens33查询指定网卡所属 zone
--change‑interface=ens33 --zone=<zone>修改网卡归属 zone,自动从旧 zone 移出
区域查看(需配合--zone=xxx--list‑all输出该 zone 完整配置(服务、端口、富规则等)
--list‑services查看 zone 放行的预定义服务
--list‑ports查看 zone 放行端口
--list‑rich‑rules查看 zone 下所有富规则
预定义服务--add‑service=<服务名> --zone=<zone>在指定 zone 放行某服务
--remove‑service=<服务名> --zone=<zone>移除 zone 的服务放行规则
--get‑services列出全部可用预定义服务
端口操作--add‑port=端口/协议 --zone=<zone>放行指定端口,例:80/tcp
--remove‑port=端口/协议 --zone=<zone>删除端口放行规则
富规则 rich‑rule--add‑rich-rule='规则内容' --zone=<zone>添加精细控制富规则
--remove‑rich-rule='规则内容' --zone=<zone>删除富规则,规则字符串必须与添加完全一致
NAT / 转发--add‑masquerade --zone=<zone>开启地址伪装(SNAT 共享上网)
--remove‑masquerade --zone=<zone>关闭地址伪装
--add‑forward‑port=port=80:proto=tcp:toaddr=IP:toport=xxx --zone=<zone>配置端口转发

高频考点备注

  1. --change‑interface自动解绑网卡旧区域,无需单独执行移出命令
  2. --set‑default‑zone仅修改全局默认,不会改变已经绑定网卡的 zone
  3. 删除富规则,引号内部文本必须一字不差,否则删除失败。
  4. NAT 转发功能,内核net.ipv4.ip_forward=1必须开启,否则转发无效。

六、firewalld IP 转发、limit 限流、云安全组

1、IP 转发(开启转发,值为 yes)

Linux 内核 IP 转发开关,必须开启才能做 NAT / 端口转发

临时开启(内存,重启失效) echo 1 > /proc/sys/net/ipv4/ip_forward 永久开启 编辑 /etc/sysctl.conf -----> net.ipv4.ip_forward = 1 生效命令:sysctl -p ✅验证是否开启: sysctl net.ipv4.ip_forward #输出 net.ipv4.ip_forward = 1 → yes,转发已激活 注意:firewalld 做 SNAT、DNAT、端口转发,内核 ip_forward 必须打开,否则转发不工作。

类比:家里路由器,得开启转发,手机的流量才能经过路由器上网。

firewall-cmd端口转发

语法模板:--add-forward-port=port=外部端口:proto=协议:[toaddr=目标IP:toport=目标端口]

  • 不写toaddr本机端口转发(REDIRECT)
  • 写上toaddrDNAT 端口映射,转发到别的机器
  • 永久配置:--permanent,执行完必须firewall‑cmd --reload

① 本机端口转发:访问本机 8080 → 本机 80

# 添加 firewall-cmd --permanent --add-forward-port=port=8080:proto=tcp:toport=80 firewall-cmd --reload # 删除 firewall-cmd --permanent --remove-forward-port=port=8080:proto=tcp:toport=80 firewall-cmd --reload

② DNAT 端口映射:访问本机 9000 → 内网 192.168.184.100:80

# 添加 firewall-cmd --permanent --add-forward-port=port=9000:proto=tcp:toaddr=192.168.184.100:toport=80 firewall-cmd --reload # 删除 firewall-cmd --permanent --remove-forward-port=port=9000:proto=tcp:toaddr=192.168.184.100:toport=80 firewall-cmd --reload

查看端口转发规则

firewall-cmd --list-forward-ports

知识点总结

  1. port=:本机对外监听端口
  2. proto=:协议 tcp /udp
  3. toport=:目标端口
  4. toaddr=:目标 IP;省略 toaddr 就是本机端口重定向 REDIRECT
  5. 端口转发同时会自动放行对外端口,不需要额外--add‑port

对比 iptables:

  • 无 toaddr → iptables-j REDIRECT --to‑port
  • 有 toaddr → iptables-j DNAT --to‑destination IP:port

2、limit 模块 限流策略(防范恶意刷量、低频攻击)

firewalld 富规则可以使用limit做连接频率限制,限制每秒 / 每分钟请求次数,抵御扫描、恶意刷访问。

#允许ssh,最多3次/分钟,超出拒绝 firewall-cmd --permanent --zone=dmz --add-rich-rule='rule family="ipv4" service name="ssh" limit value="3/m" accept' firewall-cmd --reload
  • limit value="3/m":m=minute 分钟;s=second 秒;h=hour 小时
    • 10/s:每秒最多 10 个新连接
    • 20/m:每分钟最多 20 个新连接

逻辑:匹配的流量,在频率限额内 accept 放行;超过频率则不匹配本条规则,交由 zone 默认策略处理(一般拒绝)。 作用:防暴力破解、恶意刷量、低频扫描攻击。

类比:门禁,一分钟最多允许 3 个人刷卡,再来的人直接拦在门外。

3、云服务器防火墙注意点(安全组)

云服务器(阿里云 / 华为云等)存在两层防火墙

  1. 系统内部防火墙:firewalld /iptables(操作系统层面)
  2. 云平台安全组(云防火墙)(云厂商外网网关层面,在实例外面)

⚠️关键考点: 即使 Linux 系统 firewalld 已经放行端口,如果云平台安全组没有开放对应端口,外部依然访问不到服务

  • 入方向:开放外部进来的端口(80、22、8080 等)
  • 出方向:控制服务器向外访问

排查思路:外部访问不通,依次检查 ①云安全组是否放行端口 → ②系统 firewalld 是否放行 → ③服务本身是否监听 0.0.0.0,不是 127.0.0.1

类比:你家房门打开了,但是小区大门锁死,外人还是进不来。

简答版

  1. IP 转发:内核参数net.ipv4.ip_forward=1,值为 1 (yes) 代表 IP 转发开启,NAT、端口转发依赖该功能。修改/etc/sysctl.confsysctl -p永久生效。IP 转发 = 路由器功能,不开就不能转发数据包。
  2. limit 限流模块:在 rich‑rule 富规则中配置limit value="次数/单位",限制新连接频率,防范暴力破解、恶意刷量攻击。limit 限流 = 限速,短时间访问次数太多直接拦住,防恶意攻击。
  3. 云服务器双防火墙:除操作系统 firewalld,还有云平台安全组;只有安全组与系统防火墙同时放行端口,外部才能正常访问服务。云服务器:安全组 + 系统防火墙两个都要放端口,外部才能连上
http://www.cnnetsun.cn/news/4000296.html

相关文章:

  • 深度复盘:新手如何开一家网站建设公司从零到一的生存法则与实战指南
  • 【电商项目】新手CRUD踩坑记录与问题复盘——删除
  • 南昌网站建设公司怎么选才能不掉坑?南昌做网站公司深度避坑指南与真实心声
  • 基于LSTM的时间序列服务器负载预测:从数据预处理到模型部署的完整实战
  • AI工程化实践:破解效率悖论,从Prompt工程到RAG架构的落地指南
  • 加密音乐打不开?5分钟上手Unlock-Music,免费解锁12种主流加密格式
  • 英雄联盟客户端终极辅助工具 League Akari:从排位连跪到把把稳赢的免费上分神器
  • Sunshine游戏串流:如何搭建你的私人云游戏服务器终极指南
  • 我那3个G的B站缓存差点白下:用m4s-converter格式转换合并MP4的真实通关记录
  • BFS算法详解:从迷宫寻路到社交网络的最短路径实现
  • 《从零入门Linux系统篇(十九):进程篇·三——僵尸进程与孤儿进程:深入理解进程退出与回收机制》
  • 基于工作过程的商务网站建设 网页制作实战指南:如何打造高转化的商业级官网
  • 阿里云-cdn的证书到期-续期
  • Processing结合Blender打造水下生物质感:从代码生成到3D渲染全流程
  • 项目建设网站大全:资深从业者推荐的32个权威资源汇总与深度避坑指南
  • AI Agent核心技术栈与垂直领域开发实战指南
  • 神奇代码岛辅助功能实践:从ARIA到键盘导航的无障碍编程探索
  • 网站建设需要考虑因素有哪些?新手必看避坑指南及全流程解析
  • SQL Server图片存储实战:VARBINARY(MAX)方案设计与性能优化
  • 洛雪音乐自定义解析源 lx-source:3 步搭建你的专属音乐解析服务
  • 非技术人如何看懂大模型技术方案
  • Python网络爬虫实战:从天眼查高效采集企业数据的技术解析
  • 揭秘宿迁城乡建设监督网站:百姓身边的透明窗与便民通
  • Mac 本地安装 MySQL 学习指南
  • FanControl 风扇控制软件完整指南:5 步调校 Windows 风扇转速
  • 【字串】【困难】滑动窗口最大值
  • 【收藏必看2026版】普通人零门槛入局AI!大模型成程序员高薪最优解
  • Python环境搭建与核心语法实战:从入门到工程化的十年经验总结
  • 打造真正有利于优化的网站建设方案,从底层逻辑重构你的网站流量
  • Perplexity Agent API与Kimi K3实战:构建自主任务执行AI智能体