NC Cloud适配WAS登录报错非法登录同时业务监控获取不到真实客户端ip的问题解决

已邀请:

一、问题现象
NCC2005 Was集群,使用IHS做分发,通过IHS端口登录NCC轻量端时会报“非法登录”的错误,通过server具体端口则没问题。
二、问题原因
NCC有个安全机制,要校验客户端IP,代码中调用request.getRemoteAddr获取客户端IP,如果通过IHS端口登录NCC,则request.getRemoteAddr返回的是IPv6地址,如果直接通过server的具体端口登录NCC,返回的是IPv4地址,NCC无法解析IPv6地址,所以报非法登录的错误。
三、NCC补丁的修改机制及存在的问题
对于这个问题,开发给过一个补丁,补丁修改方法是在校验出request.getRemoteAddr地址不合法时,从request.headers中的$WSSN去获取IP,此补丁解决了很多项目报非法登录的问题。
实际上这个补丁处理方法是不对的,$WSSN中获取到的是host信息,即应用服务器的主机信息,NC代码的本意是要获取客户端IP,这个客户端IP在NC后续处理中很多地方要用到。
如果通过一个域名去登录NCC,那么$WSSN中获取到的是主机的域名,NCC解析不了这个域名,也会报非法登录的错误。
而request.getRemoteAddr返回IPv6地址的原因是,这个方法返回的是应用服务器的IP信息,很多服务器启用了IPv6,所以返回了一个IPv6的地址。
综上所述,request中就没有包含客户端的IP信息,所以这个问题无论如何都不能通过修改代码解决,NCC2005所有使用集群的项目都存在问题。
四、获取不到客户端IP的原因
从was9.0.0.11开始,was的机制做了修改,如果请求是从proxy server分发过来的,那么was要校验这个proxy server是否可信,只有proxy server在trustedSensitiveHeaderOrigin这个属性中定义的可信proxy server列表中,才会认为是可信的,如果不可信,那么was不会把客户端IP放进request.headers中,NCC代码也就无法从request中获取到客户端IP。如果不是从proxy server分发过来的,则不会有这个校验。这也就是通过IHS端口访问报错,而通过具体端口访问不报错的原因。
可以看出,这个问题不是IHS的问题,是was server的问题,即使不使用IHS,使用其他proxy server,也会有同样的问题。
五、解决方案
解决方案是在每个server的Http Channel中增加一个定制属性,trustedSensitiveHeaderOrigin,值为proxy server的IP,如果有多台proxy server,可以定义多个IP,以逗号分开,为了处理简单,这个值也可以写成 *,即任何proxy server都是可信的,这就回到was9.0.0.11之前版本的状态。修改完后,重启was生效
具体操作步骤如下:

(一)对was中每个server增加定制属性
/uploads/answer/20210611/49993cb35f7b3e60d9860eebc863c928.png
(二)进server的配置界面,点击“Web容器传输链”
/uploads/answer/20210611/056c8974832e7d3b70bab44b72d09ddb.png
(三)在Web容器传输链界面,列表中每项资源都要点进去增加定制属性
/uploads/answer/20210611/7861c87a5ca0c422721310a429757aa9.png

(四)选中一项资源,点击进入,再点击 “HTTP入站通道”
/uploads/answer/20210611/74ee0866ddb5038b0dea2803923cb1f5.png

(五)在HTTP入站通道界面,点击“定制属性”
/uploads/answer/20210611/553236484f8371c7b0dd7d911cb0b339.png

(六)在定制属性列表界面,点击“新建”菜单
/uploads/answer/20210611/59c5ed82f4a2a667b2331f10d11edde3.png

(七)增加一个定制属性,名称为trustedSensitiveHeaderOrigin,值为proxy server的IP,建议配成*,表示信任任何proxy server,点确定、保存。
/uploads/answer/20210611/953ab14eed6d5abc3b3a3d691ea6fbf8.png

(八)对于第三步中的其他资源,重复第三到第七步的操作
(九)对于每个server,做此配置修改
(十)重启was生效

要回复问题请先登录注册