背景
在我们做业务或网络运维的过程中肯定会接触到外网ip,外网ip是服务和外界连接的桥梁,由此可见外网ip很重要,但与此同时它的存在也同样会带来安全上的隐患。下面我们来看看常见的安全问题。
第一:核弹级bug Log4j
,相信很多人都有所耳闻了,通过日志触发执行远程调用。
如果有外网那么黑客的代码就能在服务器上执行下载黑客程序执行与黑客服务器建立连接,此时你的业务服务器上便有了后门,也即服务器被入侵。
第二:上网行为控制,服务器有外网,即使我们限制了服务器所有端口不对外,那我们怎么限制服务不能连外网,或者有小伙伴登录服务器copy
数据到外网,我们怎么能够发现和规避这类问题。通过上网行为管理和流量分析也能实现,维护设备成本和投入金钱太多。
外网ip又不能不用,该怎么办好呢? 那就把服务器ip去掉吧! 原则上:是服务器上不能绑定外网ip,即使有外网ip出网目标ip必须在白名单里。
问题
基于上面两点原因我们需要把有外网ip的服务器去外网ip。 那问题题来了:
- 去除外网
ip
我们的业务怎么被访问? - 服务器上运行的业务需要连外网怎么办?
- 去了外网
ip
我们怎么的登录服务器进行管理? - 已知业务有连接的外网的域名通过代理后包ssl 协议版本问题,研发没有时间升级
http client
包,这种情况怎么解决? - 已知业务有连接外网ip的情况,且ip也是动态变化的,这种情况怎么解决呢?
- 跨region没有外网怎么管控?
下面就给大家一一解答。
去除外网ip使用技术
- 正向代理:解决内部服务上网问题
- 反向代理:解决服务被外部用户访问问题
- 边界防火墙:解决服务端口暴漏问题
- VPC/VPN:解决业务隔离和办公网、region直接访问问题
- iptables:解决服务器允许白名单ip进出网络,其他外部ip 禁止进出网络
业务逻辑图
上面这张图是很常见的业务被访问和业务出外网的一张架构图
- 橙色线是业务被外网用户访问的流量到业务的过程,通过防火墙,然后进过正向代理到达内部业务
- 绿色线是业务访问外网的流量过程,通过正向代理,然后经过防火墙出外网
- 蓝色线也是业务主动访问外网的流量过程,它与绿线不同的是他没有经过正向代理直接通过本机外网ip通过防火墙出的外网
1和2 业务机器没有外网ip业务能正常运转,3业务运行的主机上有外网ip,在运维工作中你肯定想把外网ip从主机上摘掉,但往往因为各种原因拿不掉(参看上面6个问题4、5)。
解决问题
首先第一问题:去除外网ip我们的业务怎么被访问?
通过反向代理的方式解决
大家看上面图,针对对外提供WEB
服务的业务,流量通过黄色箭头流入经过边界防火墙,负载均衡器,反向代理,主机上的防火墙,最终到业务。
外网IP是绑在负载均衡器上,内部代理、业务机器均没有外网ip,所以这种情况业务机器如果主动外网请求是出不了外网的。
第二个问题:服务器上运行的业务需要连外网怎么办?
通过正向代理的方式+域名和ip白名单解决
图中绿色代表业务连外网流量,业务发起外网请求,经过正向代理,边界防火墙出外网,外网IP是绑定在正向代理服务器上的或者出口网关上。
业务机器均没有外网ip,所以这种情况业务机器如果主动外网(不在白名单中的)请求是出不了外网的。
第三个问题:去了外网ip我们怎么的登录服务器进行管理?
通过VPN隧道解决
图中红色代表通过办公区连接线上服务器进行管理时,是通过点对点隧道进行建联管理业务机器的。 外网ip是在IPSecVPN设备上的,业务机器均无外网ip。
第四个问题:已知业务有连接的外网的域名通过代理后包ssl 协议版本问题,研发没有时间升级http client包,这种情况怎么解决?
通过iptables方式解决,默认所有外网不允许访问
这种情况是业务需要第三方服务,比如调用推送服务、验证码服务、地图服务等,业务是java
技术栈,项目使用的事httpclient
jar包或者引用三方SDK
里内嵌httpclient
jar包比较旧报ssl 错误不能通过自建代理出外网。
解决办法:可以在虚机上绑定公网ip,通过脚本检测域名ip,增加防火墙策略,允许域名ip出公网,内网ip段可以相互通信,其他ip DROP。
比如内部网段有:10.10.0.0/16
和 192.168.0.0/16
,假如说域名对应的公网ip是114.114.114.114
,防火墙策略如下:
iptables -I INPUT -s 10.10.0.0/16 -j ACCEPT
iptables -I INPUT -s 192.168.0.0/16 -j ACCEPT
iptables -I INPUT -s 114.114.114.114 -j ACCEPT
iptables -A INPUT -j DROP #注意这里是-A
iptables -I OUTPUT -s 10.10.0.0/16 -j ACCEPT
iptables -I OUTPUT -s 192.168.0.0/16 -j ACCEPT
iptables -I OUTPUT -s 114.114.114.114 -j ACCEPT
iptables -A OUTPUT -j DROP #注意这里是-A
,追加不是-I插入,-I默认是在行首插入
注意: 需要增加定时任务,检测域名ip变化增加防火墙策略。 这里是防止如果业务使用第三方更换ip后会影响业务。 通过定时任务方式将域名解析的新ip加白到防火墙会有一定的延迟性,需要和业务方沟通一个合理的延迟时间,业务方做好重试。
第五个问题: 已知业务有连接外网ip的情况,且ip也是动态变化的,这种情况怎么解决呢?
通过iptables方式和业务方配合解决,默认所有外网不允许访问
场景:A业务从三方代理服务商那里拿过来一堆ip,然后B业务使用这些ip访问一些数据,那这种通过正向代理nginx
出去也是不好实现的。
流程:
A业务
通过正向代理访问三方代理服务接口- 代理访问转发
A业务
请求,访问三方代理访问拿到ip 列表 A业务
调用server
接口增加和删除ip 信息,然后等待2sserver
将新增和删除的ip发布到redisclient
端从订阅redis channel
拿ip- 拿到
ip
后通过iptables 增加或删除防火墙规则 A业务
将新增IP
写入DB
B业务
从数据库里拿取可用的IP
B业务
通过此代理ip
发起抓取数据请求,因为iptables
有允许出入网的规则所以业务能正常通过此代理ip
抓取数据
解决办法:
通过上述流程我们可以知道,我们需要实现server
和 client
段对B业务
所在机器上的防火墙规则进行增删,只允B业务
许连接已知的ip
这里需要和A业务
开发一起完成,A业务
是可用ip
代理池的维护者。
第六个问题:跨region没有外网怎么管控?
通过云平台提供产品或者IpsecVPN
云平台会提供Region
联通产品,比如阿里云云企业网,优刻得云跨域通道,还有通用解决方案IpsecVPN。
注意:在做可用区VPC网段划分时网段不要重合,否则后面不同VPC联通路由上会有问题。