0 spark集群web功能被攻击
在使用aws提供的spark集群时,经常会用到spark集群的web功能,以便于查看集群上任务的运行情况以及相关日志。最初使用时,为了可以在浏览器中访问到spark集群的各个web功能,设置了一个开放所有端口的安全组(是极其不安全的)。最近一段时间使用时,发现集群中启动了非常多的无效任务,这些任务再启动起来之后马上被kill了。经过追查,原因是集群web功能的网址被泄漏了,导致集群被攻击。攻击者可以通过集群的web功能直接向yarn的ResourceManager发送请求来启动任务。虽然可以这种方式可以提交任务,但是因为这种方式无法获取到集群的运行权限,最后导致了其任务再启动的时候就会被kill。虽然攻击者无法使用集群资源,但是频繁的启动这些无效任务对集群也是一种资源上的消耗。
要解决集群被攻击的问题很简单,只需要删除开发所有端口的配置删除掉就可以了。但是这种方式也直接导致了我们自己使用集群web功能遭到限制,为了方便我们自己使用集群的web功能,参考aws的使用文档,可以使用下一节的方式来解决。
1 解决集群web功能访问受限问题
主要的解决办法是建立ssh通道,然后使用浏览器的proxy功能,具体步骤如下所示:
- 首先,通过建立ssh通道,使用端口转发功能将本地端口映射到集群的master机器上,这里使用本地的8157端口具体代码如下所示:
ssh -i your_private_key.pem -ND 8157 hadoop@ec2-*****.compute.amazonaws.com
需要注意的是,当这条指令执行之后会一只处于阻塞状态,执行的终端也是不能关闭的。在日常使用时这是很不方便的,为了后续使用,最好使用nohup来启动这个指令让其在后台持续运行。后续使用时,每次断网或者电脑重启之后可能都需要重新运行这条指令,这里可以为这个ssh通道创建一个crontab任务,让其检查这个指令的运行是否正常,当这条指令运行不正常时重启指令。
- 然后使用浏览器proxy,将浏览器的流量转发的本地8157端口。因为之前已经建立好了本地8157端口到集群master的ssh通道,这样浏览器的请求就会转发到master这台机器上,在master本机上访问集群的web功能就没有任何限制的。通过这种方式就可以访问到集群的web功能了。
2 使用chrome浏览器上设置proxy
这里使用的是chrome应用商店上的foxyproxy插件,通过如下步骤进行设置:
-
在chrome中安装foxyproxy插件,搜索foxyproxy,选择FoxyProxy Stadard添加到CHROME中即可,如下图所示
chrome安装foxyproxy -
打开foxyproxy中的options选项,进入3中所示的界面
进入foxyproxy设置 -
点击下图中的Add New Proxy按钮
添加新的proxy -
按照下面所示,对其中的内容进行设置
General中,修改color为绿色,默认是蓝色
修改proxy颜色为绿色
Proxy Details中,做如下修改
修改proxy details
最后添加URL Patterns
添加URL Patterns
3 访问集群web功能
只需要打开foxyproxy中的刚刚设置好的Use Proxy india_spark for all URLs既可以访问集群的web功能。需要注意的是,打开这个proxy之后,在访问其他网页的时候速度会变的非常慢,主要原因可能是其他的网页也会转发到master机器上了,这样访问其他网站就会变慢。为了解决这个问题,可以打开foxyproxy中的Use proxies based on their pre-defined patterns and priorities。这样当访问其他网站是就会按照默认配置走正常流程,当访问到集群的web功能网站时会按照配置好的india_spark proxy配置。