Firewalld 配置端口转发、SNAT、DNAT

news/2026/1/24 19:39:48/文章来源:https://www.cnblogs.com/venngair/p/19527379

Firewalld通过富规则(rich rules)和直接规则(direct rules)支持端口转发和NAT。 下面详细说明各种配置方法:

端口转发(Port Forwarding)

方法1:使用富规则(推荐)

基础端口转发(本地转发)

# 将外部访问 8080 端口的流量转发到本机 80 端口
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80# 永久生效
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80 --permanent# 转发到其他主机的端口
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.100# 转发UDP端口
firewall-cmd --add-forward-port=port=53:proto=udp:toport=53:toaddr=192.168.1.53

查看和管理端口转发规则

# 查看所有转发规则
firewall-cmd --list-forward-ports# 查看特定区域的转发规则
firewall-cmd --zone=public --list-forward-ports# 删除转发规则
firewall-cmd --remove-forward-port=port=8080:proto=tcp:toport=80
firewall-cmd --remove-forward-port=port=8080:proto=tcp:toport=80:toaddr=192.168.1.100

方法2:使用富规则的完整语法

# 更详细的转发规则
firewall-cmd --add-rich-rule='rule family="ipv4"source address="192.168.1.0/24"forward-port port="8080" protocol="tcp" to-port="80" to-addr="192.168.1.100"
'# 带日志记录的转发
firewall-cmd --add-rich-rule='rule family="ipv4"forward-port port="2222" protocol="tcp" to-port="22" to-addr="10.0.0.100"log prefix="SSH_FORWARD: " level="info"
'

SNAT配置(源地址转换)

SNAT:本地网络访问互联网

# 启用区域的IP伪装(masquerade) - 这是SNAT的简化版
firewall-cmd --zone=external --add-masquerade# 永久生效
firewall-cmd --zone=external --add-masquerade --permanent# 查看是否启用了伪装
firewall-cmd --zone=external --query-masquerade# 禁用伪装
firewall-cmd --zone=external --remove-masquerade

自定义SNAT规则

# 方法1:使用富规则
firewall-cmd --add-rich-rule='rule family="ipv4"source address="192.168.1.0/24"masquerade
'# 方法2:使用直接规则(更灵活)
# 将192.168.1.0/24的源IP转换为公网IP 203.0.113.100
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 \-s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.100# 查看直接规则
firewall-cmd --direct --get-all-rules

DNAT配置(目的地址转换)

DNAT:将外部访问转发到内部服务器

# 方法1:使用端口转发(会自动设置DNAT)
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.100# 方法2:使用直接规则
# 将访问 203.0.113.100:80 的流量 DNAT 到 192.168.1.100:80
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 \-d 203.0.113.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80# 如果是动态IP,使用MASQUERADE自动获取出口IP
firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 \-s 192.168.1.0/24 -o eth0 -j MASQUERADE

完整配置示例

示例1:家庭网关路由器

# 1. 配置接口区域
firewall-cmd --zone=external --add-interface=eth0    # WAN口
firewall-cmd --zone=internal --add-interface=eth1    # LAN口# 2. 启用IP伪装(SNAT)
firewall-cmd --zone=external --add-masquerade# 3. 设置端口转发(DNAT)
# 将外网SSH访问转发到内网服务器
firewall-cmd --add-forward-port=port=2222:proto=tcp:toport=22:toaddr=192.168.1.100# 将外网Web访问转发到内网Web服务器
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=80:toaddr=192.168.1.200
firewall-cmd --add-forward-port=port=443:proto=tcp:toport=443:toaddr=192.168.1.200# 4. 允许内网访问外网
firewall-cmd --zone=internal --add-service=http
firewall-cmd --zone=internal --add-service=https# 5. 保存配置
firewall-cmd --runtime-to-permanent

示例2:Web服务器负载均衡器

# 1. 启用伪装
firewall-cmd --zone=public --add-masquerade# 2. 负载均衡:将80端口流量轮询转发到后端服务器
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 \-p tcp --dport 80 -m statistic --mode nth --every 2 --packet 0 \-j DNAT --to-destination 192.168.1.101:80firewall-cmd --direct --add-rule ipv4 nat PREROUTING 1 \-p tcp --dport 80 \-j DNAT --to-destination 192.168.1.102:80# 3. 健康检查流量放行
firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 \-s 192.168.1.0/24 -d 192.168.1.101 -p tcp --dport 80 -j ACCEPT

示例3:开发环境端口转发

# 将本地开发服务器暴露给局域网
# 1. 启用伪装(如果需要)
firewall-cmd --zone=public --add-masquerade# 2. 转发外部3000端口到本机3000端口
firewall-cmd --add-forward-port=port=3000:proto=tcp:toport=3000# 3. 转发多个开发服务
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=8080
firewall-cmd --add-forward-port=port=9000:proto=tcp:toport=9000# 4. 限制只允许内网访问
firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.0.0/16"forward-port port="3000" protocol="tcp" to-port="3000"log prefix="DEV_FORWARD: "
'

高级NAT配置

一对一NAT(静态NAT)

# 将整个外部IP映射到内部IP
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 \-d 203.0.113.100 -j DNAT --to-destination 192.168.1.100firewall-cmd --direct --add-rule ipv4 nat POSTROUTING 0 \-s 192.168.1.100 -j SNAT --to-source 203.0.113.100

多端口范围转发

# 转发端口范围
for port in {5000..5010}; dofirewall-cmd --add-forward-port=port=$port:proto=tcp:toport=$port:toaddr=192.168.1.100
done# 或者使用直接规则
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 \-p tcp -m multiport --dports 5000:5010 \-j DNAT --to-destination 192.168.1.100

条件转发(基于源IP)

# 只允许特定IP访问转发服务
firewall-cmd --add-rich-rule='rule family="ipv4"source address="10.0.0.0/8"forward-port port="3389" protocol="tcp" to-port="3389" to-addr="192.168.1.150"
'# 拒绝其他IP访问
firewall-cmd --add-rich-rule='rule family="ipv4"source address="0.0.0.0/0"port port="3389" protocol="tcp"reject
'

持久化配置

方法1:使用永久标志

# 添加规则时直接永久保存
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80 --permanent# 或者先添加运行时规则,再永久化
firewall-cmd --add-forward-port=port=8080:proto=tcp:toport=80
firewall-cmd --runtime-to-permanent

方法2:直接编辑XML配置文件

# 端口转发规则存储在区域配置中
sudo nano /etc/firewalld/zones/public.xml# 添加如下内容:
<forward-port port="8080" protocol="tcp" to-port="80"/># 重载配置
firewall-cmd --reload

查看和验证配置

查看所有NAT相关配置

# 查看转发端口
firewall-cmd --list-forward-ports# 查看富规则
firewall-cmd --list-rich-rules | grep forward-port# 查看直接规则
firewall-cmd --direct --get-all-rules# 查看伪装状态
firewall-cmd --zone=public --query-masquerade# 查看完整的区域配置
firewall-cmd --zone=public --list-all

验证规则是否生效

# 1. 查看iptables规则(Firewalld底层生成)
sudo iptables -t nat -L -n -v# 2. 检查具体的NAT规则
sudo iptables -t nat -L PREROUTING -n -v
sudo iptables -t nat -L POSTROUTING -n -v# 3. 使用tcpdump监控流量
sudo tcpdump -i eth0 -n port 8080# 4. 测试端口转发
# 从另一台机器测试
telnet 网关IP 8080

故障排除

常见问题解决

# 1. 端口转发不工作
# 检查是否启用了伪装
firewall-cmd --query-masquerade# 2. 规则没保存
# 检查运行时和永久配置
firewall-cmd --list-forward-ports
firewall-cmd --list-forward-ports --permanent# 3. 直接规则丢失
# 直接规则需要单独持久化
firewall-cmd --direct --add-rule ipv4 nat PREROUTING 0 ... --permanent# 4. 冲突规则
# 检查是否有重复或冲突规则
iptables -t nat -L -n --line-numbers

调试命令

# 跟踪数据包路径
sudo iptables -t nat -L -n -v --line-numbers# 清除并重新加载
sudo firewall-cmd --reload# 临时关闭防火墙测试
sudo firewall-cmd --panic-on   # 紧急模式(拒绝所有)
sudo firewall-cmd --panic-off  # 恢复正常# 查看日志
sudo journalctl -u firewalld -f
sudo tail -f /var/log/messages | grep firewalld

性能优化建议

# 1. 减少直接规则数量,尽量使用富规则
# 2. 合并端口范围,减少规则数量
# 3. 使用连接跟踪优化
sysctl -w net.netfilter.nf_conntrack_max=262144# 4. 对于大量转发,考虑使用ipset
firewall-cmd --new-ipset=trusted_ips --type=hash:ip --permanent
firewall-cmd --ipset=trusted_ips --add-entry=192.168.1.100 --permanent
firewall-cmd --add-rich-rule='rule source ipset=trusted_ips forward-port port="80" to-port="8080"'

与iptables对比

功能 Firewalld方式 iptables方式
简单端口转发 --add-forward-port -A PREROUTING -j REDIRECT
SNAT --add-masquerade -A POSTROUTING -j SNAT
DNAT --add-forward-port toaddr= -A PREROUTING -j DNAT
条件转发 富规则 多个规则组合
持久化 自动/手动永久化 iptables-save/restore

总结

Firewalld配置端口转发和NAT的核心方法:

  1. 端口转发:使用 --add-forward-port
  2. SNAT:使用 --add-masquerade 或直接规则
  3. DNAT:使用 --add-forward-porttoaddr 或直接规则
  4. 复杂规则:使用富规则或直接规则

推荐策略:

  • 简单需求:使用Firewalld原生命令
  • 复杂场景:使用富规则
  • 特殊需求:使用直接规则(保持iptables语法兼容)
  • 生产环境:测试后永久保存,监控日志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1210943.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索AI原生应用领域AI工作流的新趋势

探索AI原生应用领域AI工作流的新趋势 引言:从“AI+应用”到“AI原生应用”的范式转移 2023年以来,AI原生应用(AI-Native Application)成为科技行业最热门的关键词之一。从Notion AI的智能笔记、GitHub Copilot X的全生命周期开发辅助,到Perplexity的实时知识问答,这些应…

AI智能体完全指南:无需编程基础,四步打造专属AI助手

本文详解AI智能体搭建方法&#xff0c;从入门到进阶&#xff0c;包括四步创建流程、个性化设置、知识库运用和指令迭代技巧。文章强调将AI视为协作者而非工具&#xff0c;根据场景选择适合的大模型&#xff0c;并提供多个国内免费平台推荐。无需编程基础&#xff0c;即可打造专…

指针与数组:为什么数组名是特殊的指针?

指针与数组&#xff1a;为什么数组名是特殊的指针&#xff1f; 在C编程中&#xff0c;指针与数组的关系是入门阶段的核心难点&#xff0c;也是高频考点。很多开发者会发现一个有趣的现象&#xff1a;数组名既能像普通变量一样通过下标访问元素&#xff0c;又能像指针一样进行地…

指针进阶:二级指针与指针的指针的应用场景

指针进阶&#xff1a;二级指针与指针的指针的应用场景 在C指针学习中&#xff0c;二级指针&#xff08;又称指针的指针&#xff09;是从基础指针迈向进阶的关键节点。前文我们了解到&#xff0c;一级指针存储的是普通变量的内存地址&#xff0c;而二级指针的核心是“存储一级指…

AI人工智能-RAG方法-第十四周(小白)

一、RAG到底是什么? RAG是 Retrieval Augmengted Generation(检索增强生成)的缩写,核心逻辑特别好理解——就像我们写作文时,先查资料再动笔,而不是凭脑子硬记硬写。 简单说:AI回答问题时,不会只靠自己“记住”的知识,而是从外部文档库(或搜索引擎)里检索出和问题相…

AI人工智能-Agent相关介绍-第十四周(小白)

一、Agent是什么 Agent翻译过来时“智能体”,你可以把它理解为一个“有自主能力的智能助手”——它不用人一步步指挥,能自己理解任务,规划步骤、使用工具、记住过往经历,甚至和其他Agent或人类协作,最终完成目标。 简单说:普通LLM是“你问我答”的工具,二Agent是“你交…

AI人工智能-Function Call 与MCP-第十四周(小白)

一、Function Call是什么 Function Call直译是“函数调用”,但用通俗的话讲,它就是 LLM 的 “工具箱使用能力”—— 就像我们遇到算不清的数学题会拿计算器,LLM 遇到自己搞不定的问题(比如查实时数据、复杂计算、翻译),会 “喊工具来帮忙”。 核心逻辑:LLM 当 “决策者…

基于西门子PLC1214C的三原料自动称重配料搅拌系统程序修改探讨

基于西门子PLC1214C三原料自动称重配料搅拌系统改程序仅用于学时探讨。 功能&#xff1a; 三个原料仓按照配比先称重&#xff0c;然后进入配料仓&#xff0c;配料仓有两个重量档位&#xff0c;可以手动选择&#xff0c;当原料在配料仓里满足档位要求&#xff0c;原料仓停止称重…

AI原生应用中的多模态交互:从理论到实践

AI原生应用中的多模态交互:从理论到实践 关键词 多模态交互、AI原生应用、跨模态对齐、多模态大模型、具身智能、用户意图理解、模态融合策略 摘要 本报告系统解析AI原生应用中多模态交互的核心技术体系,覆盖从理论基础到工程实践的全链路。通过第一性原理推导(信息论+认…

os安装-winoffice在线激活命令

1.管理员运行 power shell 2.输入如下命令(直接复制粘贴) irm https://get.activated.win | iex 3.根据提示操作即可 1 系统激活 2 office激活 ...亲测 office365激活有效 2024专业增强版

C++ 贪心算法(Greedy Algorithm)详解:从思想到实战 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

仅 10MB 开源工具,一键远程唤醒关机电脑!

UpSnap 是一款开源、轻量的 Wake-on-LAN (WOL) 网页应用,旨在让用户通过直观的界面轻松管理、唤醒和控制网络设备。该项目基于现代化的技术栈构建,支持跨平台部署,兼顾易用性与扩展性,适用于家庭、小型办公场景或个…

马斯克又开源了。。。

B站&#xff1a;啥都会一点的研究生公众号&#xff1a;啥都会一点的研究生 最近一周AI科技圈又发生了啥新鲜事&#xff1f; Qwen3-TTS全家桶开源 Qwen3-TTS系列模型正式开源&#xff0c;包含1.7B和0.6B两种参数规模&#xff0c;基于自研Qwen3-TTS-Tokenizer-12Hz多码本语音编…

大数据领域中RabbitMQ的消息积压问题解决

大数据领域中RabbitMQ的消息积压问题解决关键词&#xff1a;RabbitMQ、消息积压、吞吐量优化、消费者负载、流量控制、死信队列、分布式架构摘要&#xff1a;在大数据处理场景中&#xff0c;RabbitMQ作为主流的消息中间件&#xff0c;常因流量突增、消费者处理能力不足等问题导…

拒绝“疯狂截屏”:我用 Python 撸了一个自动化神器,把 200 分钟网课无损压榨成 PDF 笔记

一、真实痛点引入:买网课如山倒,做笔记如抽丝 作为一个长期坚持技术输入的人,我经常在周末刷各类高阶架构和 AI 课程。但看视频学习有一个极大的痛点——信息密度极低,复习极其痛苦。 遇到硬核的架构图或者核心公式,传统的做法是:暂停 -> Win + Shift + S 截图 ->…

我用 Python 监听了自己的键盘,生成击键热力图,看看每天到底在“摸鱼”还是“搬砖”?

一、真实痛点引入:你的“努力”,需要可视化的证明 作为程序员,每天下班时总是感觉头昏脑涨、手指僵硬,觉得自己今天疯狂输出了几千行代码。但转头写日报的时候却陷入沉思:“我今天到底干了啥?” 向老板证明工作饱和度,靠字数是不够的。极客的最高浪漫,是用数据量化自…

导师推荐9个AI论文软件,MBA毕业论文轻松搞定!

导师推荐9个AI论文软件&#xff0c;MBA毕业论文轻松搞定&#xff01; AI 工具助力论文写作&#xff0c;轻松应对学术挑战 随着人工智能技术的不断进步&#xff0c;越来越多的 M BA 学生开始借助 AI 工具来提升论文写作效率。尤其是在当前 AIGC&#xff08;人工智能生成内容&…

若依多租户版 - 请求接口 clientId 与 Token 不匹配

一、问题现象接口请求返回 401&#xff1a;{ "code": 401, "msg": "认证失败, 无法访问系统资源" }日志提示&#xff1a;- 请求地址/system/user/list,认证失败客户端ID与Token不匹配&#xff1a;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dp…

若依多租户版 - @ApiEncrypt, api接口加密

1. 接口加密是什么使用 ApiEncrypt 注解开启后&#xff1a;请求体要加密响应数据会加密常用于 生产环境防抓包2. 核心开关&#xff08;最重要&#xff09;api-decrypt:enabled: true # 开启接口加密&#x1f449; 不需要接口加密时&#xff0c;直接关&#xff1a;api-decryp…

实用指南:Python函数:从定义到调用的实用指南

实用指南:Python函数:从定义到调用的实用指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…