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

iptables 防火墙规则案例4:端口转发和负载均衡

端口转发和简单负载均衡详解

# 1. 本地端口转发# 将访问本机8080端口的数据转发到本机80端口iptables -t nat -A PREROUTING -p tcp --dport8080-j REDIRECT --to-port80# 2. 简单负载均衡(轮询)# 将80端口的请求分配到3台后端服务器iptables -t nat -A PREROUTING -p tcp --dport80-m statistic --mode nth --every3--packet0\-j DNAT --to-destination192.168.1.101:80 iptables -t nat -A PREROUTING -p tcp --dport80-m statistic --mode nth --every2--packet0\-j DNAT --to-destination192.168.1.102:80 iptables -t nat -A PREROUTING -p tcp --dport80\-j DNAT --to-destination192.168.1.103:80

一、本地端口转发

场景:同一台服务器,不同端口转发

iptables -t nat -A PREROUTING -p tcp --dport8080-j REDIRECT --to-port80

作用:把访问本机8080端口的流量转到80端口

实际应用场景

  1. 端口标准化:外部用8080,内部用80
  2. 权限问题:普通用户程序不能用1024以下端口
  3. 多版本并存:新版服务在8080,测试用

数据流向

用户访问:服务器IP:8080 ↓ PREROUTING链:检测到目标端口8080 ↓ REDIRECT动作:改为目标端口80 ↓ 服务器程序接收:在80端口处理请求

注意

  • 只能转本机端口
  • 必须用-t nat
  • 必须在PREROUTING

更多例子

# HTTPS测试端口转发iptables -t nat -A PREROUTING -p tcp --dport8443-j REDIRECT --to-port443# SSH备用端口iptables -t nat -A PREROUTING -p tcp --dport2222-j REDIRECT --to-port22# 开发环境转发iptables -t nat -A PREROUTING -p tcp --dport3000-j REDIRECT --to-port80

二、iptables实现简单负载均衡(轮询)

这个配置的原理解析

# 三条规则一起看:# 规则1:每3个包中的第1个包(序号0)转到101iptables -t nat -A PREROUTING -p tcp --dport80\-m statistic --mode nth --every3--packet0\-j DNAT --to-destination192.168.1.101:80# 规则2:剩下的每2个包中的第1个包转到102iptables -t nat -A PREROUTING -p tcp --dport80\-m statistic --mode nth --every2--packet0\-j DNAT --to-destination192.168.1.102:80# 规则3:剩下的所有包转到103iptables -t nat -A PREROUTING -p tcp --dport80\-j DNAT --to-destination192.168.1.103:80

执行流程(关键:按顺序匹配!)

数据包匹配过程

第1个包:匹配规则1(every 3, packet 0)→ 转到101 第2个包:不匹配规则1 → 检查规则2(every 2, packet 0)→ 转到102 第3个包:不匹配规则1 → 检查规则2(every 2, packet 1)→ 不匹配 → 规则3 → 转到103 第4个包:匹配规则1(every 3, packet 1)→ 不匹配 → 规则2(every 2, packet 0)→ 转到102 第5个包:不匹配规则1 → 检查规则2(every 2, packet 1)→ 不匹配 → 规则3 → 转到103 第6个包:匹配规则1(every 3, packet 2)→ 不匹配 → 规则2(every 2, packet 0)→ 转到102

实际分配结果(前6个包):

包序号 → 服务器 1 → 101 2 → 102 3 → 103 4 → 102 5 → 103 6 → 102

问题:分配不均匀!103服务器只收到1/3的流量


三、正确的轮询负载均衡配置

方案1:使用统计模块的正确写法

# 清理旧规则iptables -t nat -F# 方法A:使用计数器复位(需要复杂脚本控制)# 这里展示理想化的轮询(实际很难用iptables完美实现)# 方法B:使用随机概率(近似轮询)iptables -t nat -A PREROUTING -p tcp --dport80\-m statistic --mode random --probability0.33\-j DNAT --to-destination192.168.1.101:80 iptables -t nat -A PREROUTING -p tcp --dport80\-m statistic --mode random --probability0.5\-j DNAT --to-destination192.168.1.102:80 iptables -t nat -A PREROUTING -p tcp --dport80\-j DNAT --to-destination192.168.1.103:80

概率计算

  • 第一个规则:33%概率到101
  • 第二个规则:剩下的67%中的50%(即33.5%)到102
  • 第三个规则:剩下的33.5%到103

结果:大致各1/3,但不是精确轮询

方案2:更好的负载均衡方案(推荐)

# 使用更专业的工具,不要用iptables做复杂负载均衡# ---------- 方案A:使用Nginx(应用层,功能丰富) ----------# nginx.conf 部分配置upstream backend{server192.168.1.101:80;server192.168.1.102:80;server192.168.1.103:80;}server{listen80;location /{proxy_pass http://backend;}}# ---------- 方案B:使用IPVS(内核级,性能高) ----------ipvsadm -A -t 服务器IP:80 -s rr# rr=轮询算法ipvsadm -a -t 服务器IP:80 -r192.168.1.101:80 -g ipvsadm -a -t 服务器IP:80 -r192.168.1.102:80 -g ipvsadm -a -t 服务器IP:80 -r192.168.1.103:80 -g# ---------- 方案C:使用Haproxy ----------# haproxy.cfg 部分配置frontend webbind*:80 default_backend servers backend servers balance roundrobin server server1192.168.1.101:80 check server server2192.168.1.102:80 check server server3192.168.1.103:80 check

四、iptables负载均衡的局限性

缺点:

  1. 无会话保持:同一个用户的不同请求可能到不同服务器

    # 用户登录请求到101,下一个请求到102 → 登录状态丢失
  2. 无健康检查:后端服务器宕机,请求仍会发过去

    # 102服务器挂了,但iptables不知道,继续转发
  3. 算法简单:只有简单轮询,无法加权、最少连接等

  4. 配置复杂:多条规则难以管理

  5. 性能问题:规则多了影响性能

适用场景:

  • ✅ 静态文件分发(无状态)
  • ✅ 测试环境简单分流
  • ✅ 临时解决方案
  • ❌ 生产环境Web应用
  • ❌ 需要会话保持的应用
  • ❌ 需要健康检查的场景

五、实际生产环境配置示例

场景:开发测试环境用iptables简单分流

#!/bin/bash# dev_loadbalance.sh# 1. 清空规则iptables -t nat -F# 2. 根据源IP哈希分流(简单会话保持)# 相同IP总是到同一台服务器iptables -t nat -A PREROUTING -p tcp --dport80\-m state --state NEW\-m hashlimit --hashlimit-mode srcip --hashlimit-name session_sticky\-j DNAT --to-destination192.168.1.101:80 iptables -t nat -A PREROUTING -p tcp --dport80\-m state --state NEW\-j DNAT --to-destination192.168.1.102:80# 3. 允许已建立连接的流量iptables -t nat -A PREROUTING -p tcp --dport80\-m state --state ESTABLISHED,RELATED\-j ACCEPT# 由conntrack自动处理# 4. 简单健康检查(配合脚本)# 定期检查后端服务器,失败时删除规则check_server(){if!ping-c1-W1192.168.1.101&>/dev/null;theniptables -t nat -D PREROUTING -p tcp --dport80\-m state --state NEW\-m hashlimit --hashlimit-mode srcip --hashlimit-name session_sticky\-j DNAT --to-destination192.168.1.101:802>/dev/nullfi}

六、端口转发的其他用途

1. 透明代理

# 将所有80端口的流量转到本地3128代理端口iptables -t nat -A PREROUTING -p tcp --dport80-j REDIRECT --to-port3128# 代理服务器监听3128,处理请求

2. 端口伪装(防扫描)

# 实际SSH在2222端口,对外显示在22端口iptables -t nat -A PREROUTING -p tcp --dport22-j REDIRECT --to-port2222# 攻击者扫描22端口,实际连到2222

3. 协议转换

# 外部HTTPS(443),内部HTTP(80) + SSL终端iptables -t nat -A PREROUTING -p tcp --dport443-j REDIRECT --to-port80# Nginx在80端口同时处理HTTP和HTTPS(需要相应配置)

4. 多IP服务

# 不同IP的80端口转到不同内部端口iptables -t nat -A PREROUTING -d192.168.1.100 -p tcp --dport80\-j REDIRECT --to-port8080iptables -t nat -A PREROUTING -d192.168.1.101 -p tcp --dport80\-j REDIRECT --to-port8081

七、调试和监控

查看规则效果

# 查看NAT规则iptables -t nat -L -n -v# 查看连接跟踪(看到实际转发)conntrack -L|grep:80# 测试端口转发telnet localhost8080# 应该连到80端口# 查看数据包计数(看每条规则匹配次数)iptables -t nat -L -n -v --line-numbers

性能监控

# 查看每秒转发包数watch-n1'iptables -t nat -L -n -v | grep DNAT'# 查看CPU使用(iptables消耗)top-p$(pgrep -f"iptables")

八、重要注意事项

  1. 规则顺序:iptables按顺序匹配,第一条匹配后就不看后面的了
  2. 连接跟踪:确保开启,否则回包可能有问题
    lsmod|grepnf_conntrack
  3. FORWARD链:如果是转发到其他机器,需要允许FORWARD
    iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -j ACCEPT# 或更精确的控制
  4. 保存配置
    # CentOS/RHELserviceiptables save# Ubuntu/Debianiptables-save>/etc/iptables/rules.v4

结论

  • 端口转发:iptables很适合,简单高效
  • 负载均衡:iptables只能做最简单的,生产环境用Nginx/Haproxy/IPVS
http://www.jsqmd.com/news/358095/

相关文章:

  • 少走弯路:自考必备的AI论文平台,千笔写作工具 VS 学术猹
  • 2026年控油蓬松洗发水红榜:实测这5款效果好,跟着选就对了 - 华Sir1
  • 2026废气处理喷淋塔活性炭选购,盈和环保高性价比产品推荐 - myqiye
  • 2026年质量好的数控双驱高速CBN磨床/数控随动磨床高评价直销厂家采购指南推荐(高评价) - 行业平台推荐
  • 网页端大文件上传插件如何支持视频文件的秒传和断点续传?
  • 2026 年 GEO 优化行业趋势解析,力荐智推时代契合趋势创价值 - 速递信息
  • 2026年评价高的轴类磨床自动生产线/数控轧辊磨床供应商采购指南选哪家 - 行业平台推荐
  • 细软发质必看:2026年5款控油蓬松洗发水横向评测,谁真正值得买? - 华Sir1
  • 2026年中医治脱发案例分析,靠谱的脱发治疗中医机构哪家好 - mypinpai
  • 信创办公套件如何实现Word批注的完整Web转存?
  • 2026年口碑好的针织衬布/无纺衬布供应商采购指南选哪家 - 行业平台推荐
  • 2026年渭南食品级生石灰供应商,费用多少心中有数 - 工业推荐榜
  • 基于ResNet50网络的时间序列预测,对未来时间步进行多步预测,MATLAB代码
  • 2026别错过!9个AI论文网站测评:自考毕业论文+开题报告高效写作指南
  • 2026年河南高性价比环卫设备公司盘点,聊聊有美工贸口碑好吗 - myqiye
  • 学长亲荐!更贴合研究生需求的AI论文网站,千笔写作工具 VS 学术猹
  • 探讨2026年专业的家装电线供应企业,重庆昂翡线缆好用吗 - 工业品网
  • 2026年高口碑控油蓬松洗发水精选:专为油性发质设计,唤醒清爽发根活力 - 华Sir1
  • 摆脱论文困扰! 降AI率平台 千笔 VS 知文AI,本科生专属神器!
  • 2026年质量好的数据中心感烟火灾探测器/极早期感烟火灾探测器真实参考销售厂家参考怎么选 - 行业平台推荐
  • 国内AI Agent部署安全合规指南:法规框架、核心风险与前瞻性防控策略
  • 如何选购工程瓷砖批发,具备价格优势且售后好的品牌盘点 - 工业设备
  • 这世界就是个巨大的草台班子-你的飞牛nas中招了吗
  • 内核态颠覆者:GhostKatz重构Windows凭据提取新范式,告别Mimikatz时代的用户态对抗
  • 计算机毕业设计springboot财务管理系统 基于SpringBoot框架的企业财务信息化平台构建与实现 基于Java的企业资金流转与账务核算智能管理系统
  • 【微科普】纠缠双光梳(EDCS)AI 深度解析:原理、技术细节与行业规范(纯干货版)
  • 计算机毕业设计springboot基于的蔬菜市场在线交易系统 基于微服务架构的社区生鲜配送管理平台 Spring Boot框架下的智慧农贸数字化交易系统
  • 2026-02-08 GitHub 热点项目精选
  • 现代Web应用的预渗透测试:平衡高风险漏洞与细节安全
  • 实现AI Agent的动态上下文管理