端口转发导致403错误的解决办法

一、业务背景

有一位客户,目前是要做三级等保,原来的服务器直接在网闸上做了端口映射即可。

客户规划现在将该服务器放到纯内网环境中,内网连接网闸,若需要访问外网,内网访问网闸映射到 可以访问外网的跳板机。这些规则我们无法改变,我们只能考虑一下如何实现即可。

二、实现方式

做法呢,就是在这个跳板机上做一个端口映射

比如内网机器(内网IP是:172.16.2.98)要访问某服务的API,例如要访问 api.jiucool.org,跳板机的IP是:192.168.8.88 , 我们则在 192.168.8.88 机器上做一个端口映射,这里端口映射工具我们可以使用 rinetd、socat、nginx 的socket转发均可。

配置好以后,我们只需要在内网机器上修改 /etc/hosts文件 ,将api.jiucool.org 解析至网闸(网闸映射到192.168.8.88),这样我们访问api.jiucool.org的请求,就转到了 192.168.8.88 机器,然后再将请求转发至真正的服务器。

三、出现的问题

之前有客户提出类似的需求,这种方案是没有问题的,但这次需要访问的API当中,部分正常,部分异常报出403的错误。

四、解决办法

有问题的API服务,经过检查,正常非转发请求,是完全正常的,一旦经过转发就是会报403,对比一下,其实只有header请求的不同。

我们在请求API时,显示的来指定header当中的Host值即可。 因为出问题的这些API是在服务端检查了host绑定关系 ,若与server当中配置的不相等则返回403异常码。

假如该api服务器绑定的ip地址是:223.5.5.5,我们则进行显示绑定,绑定之后,则一切正常。

curl -k -H "Host: 223.5.5.5" https://192.168.8.88

Leave a Reply


正在读取数据……