找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 247|回复: 2

内网架设的服务器,如何识别来自不同公网IP的流量?

[复制链接]
发表于 2024-5-26 15:56 | 显示全部楼层 |阅读模式
主路由是 OpenWrt(有公网IP),下面的内网部署了一台服务器,服务器有一些端口开放给了公网,目前用的是 OpenWrt 的端口转发功能
不过存在一个问题,来自公网的访问经过 OpenWrt 的端口转发以后,在内网服务器上看到的访问都是来自 OpenWrt 的内网地址(192.168.1.1)
这直接就导致了 fail2ban 之类的服务存在误判,来自公网的访问如果试图爆破,fail2ban 就直接把 OP 的 IP 地址给 ban 了,导致我自己也不能从公网访问……
有没有办法可以让内网的服务器的指定端口可以识别来自不同公网 IP 的访问流量?
发表于 2024-5-26 18:43 | 显示全部楼层
你这个有问题,DNAT做了后从公网过来的源地址是不会变化的,是不是openwrt做了什么策略导致都转换了,一般SLB会做代理转发才会连同SNAT和DNAT一起转换。
回复 支持 反对

使用道具 举报

发表于 2024-5-28 07:52 | 显示全部楼层
向ai请教了一下:
可以通过几种方法来解决这个问题,使内网服务器能够识别真实的外部客户端 IP 地址,而不是 OpenWrt 的内网地址。这些方法主要包括启用反向代理或者直接使用 IP 转发的方式来保留原始客户端 IP 地址。以下是几种解决方法:
方法一:使用 Nginx 作为反向代理
如果您的服务器上使用的是 HTTP 服务,您可以通过在 OpenWrt 上安装并配置 Nginx 来作为反向代理。
在 OpenWrt 上安装 Nginx
您需要首先在 OpenWrt 上安装 Nginx,可以通过包管理工具进行安装:
shell
Copy
      opkg update
   opkg install nginx
配置 Nginx 作为反向代理
编辑 /etc/nginx/nginx.conf 文件,增加如下配置:
nginx
Copy
      http {
       # ... 其他配置 ...

       server {
           listen 80;  # OpenWrt 上监听的端口

           location / {
               proxy_pass http://内网服务器IP:内网端口;
               proxy_set_header Host $host;
               proxy_set_header X-Real-IP $remote_addr;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
           }
       }
   }
这种方法适用于 HTTP 或 HTTPS 协议,Nginx 会将真实的客户端 IP 地址通过 X-Real-IP 和 X-Forwarded-For 头传递给后端服务器,后端服务器(如 Web 服务器)能够读取这些头信息以获取客户端的真实 IP。
方法二:使用 IP 转发保留客户端 IP
直接使用 IP 转发,并通过 conntrack 修改报文,可以保留客户端的真实 IP 地址:
修改 OpenWrt 防火墙配置
编辑 OpenWrt 的防火墙配置文件 /etc/config/firewall 以便保留客户端 IP:
sh
Copy
      config redirect
       option name 'Reserved Client IP'
       option src 'wan'
       option src_dport '外部端口'
       option dest 'lan'
       option dest_ip '内网服务器IP'
       option dest_port '内部服务器端口'
       option proto 'tcp udp'
       option reflection_src 'dnat'
启用 conntrack 模块
确保 OpenWrt 上启用了 xt_conntrack 模块,以便在 NAT 转发时保留原始客户端 IP:
sh
Copy
      opkg update
   opkg install kmod-ipt-conntrack
配置 OpenWrt 保留原始客户端 IP
在 OpenWrt 的防火墙设置文件中增加如下规则,以确保在 NAT 转发后保留原始客户端 IP:
sh
Copy
      config rule
       option name 'Reserved Original IP'
       option src 'wan'
       option dest 'lan'
       option proto 'tcp'
       option extra '--dport 内部服务器端口'
       option target 'ACCEPT'
方法三:使用 iptables 转发
通过 iptables 改写报文,可以实现保留客户端原始 IP:
加载 xt_TPROXY 模块:
确保 iptables 支持 TPROXY:
sh
Copy
      opkg update
   opkg install kmod-ipt-tproxy
新增 iptables 转发规则:
使用 iptables 来转发并保留客户端 IP 地址:
sh
Copy
      iptables -t mangle -N DIVERT
   iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
   iptables -t mangle -A DIVERT -j MARK --set-mark 1
   iptables -t mangle -A DIVERT -j ACCEPT
   iptables -t mangle -A PREROUTING -p tcp -m mark --mark 1 -j ACCEPT

   ip rule add fwmark 1 lookup 100
   ip route add local 0.0.0.0/0 dev lo table 100
通过这些方法之一,您可以使内网服务器识别出来自不同公网 IP 的访问,从而避免像 fail2ban 等服务的误判。如果需要确认哪种方法最适合您的情况,可以对不同的方式进行试验,并选择最稳定和简单的配置。
仅供参考
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-6-17 19:28

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com

快速回复 返回顶部 返回列表