如何避免安全部扫描出来的高危端口

问题描述

在公司可能会遇见,自己搭建的一套环境,有可能是业务服务,也有可能是外部组件(有可能是公司没有专门维护这套组件的团队,也有可能是不能用,不好用等情况),比如:HDFS、HBase、Yarn、Spark、Mysql等等。
可能不是默认端口,只要扫描到任意端口在监听,通过一些get请求就能获取到隐私数据,可能就会被认为是高危端口。
我遇见的就是HDFS、Yarn的端口被扫描出来了(不是默认端口),理由就是直接通过url就可以访问页面。

解决办法

方法一(推荐)

直接通过防火墙禁止外部ip访问(当然可以允许集群中的其他机器访问)
优点:这种处理办法是最简单的,无需修改配置、代码,如果熟悉的话,几分钟就搞定了
缺点:这样办公网络就无法访问页面了,比如yarn的页面,这样我们开发、处理问题的成本就会很高。
注意:最好别留钩子,比如我禁用了大部分的ip,但是不禁用办公网络发出去的ip,这样确实有可能躲避安全部的扫描,但有违反公司规定的风险,慎重。

方法二

利用中间件自身的加密功能,比如mysql、es、redis等,都是可以设置密码的,无非是复杂一点,所以最好是能够在开发、系统搭建的时候就设置好密码。
优点:是一种非常安全的手段,页面访问之前需要进行权限认证,而且可以本地就可以调试代码(远程连接中间件)
缺点:如果是一开始并没有设置密码,比如es,那后面不光要为es增加密码,而且使用这个es的应用都需要增加账号和密码配置,需要修改代码,成本很高。最重要的是有些组件可能并没有提供账号密码登录,比如:HDFS、Yarn,这些组件好像官方并没有提供登录的功能。

方法三(极力推荐)

一开始想的是利用nginx相关的组件来做登录,但是后面发现还需要依赖一些httpd的底层组价,因为服务器是没法联网的,处理起来比较麻烦,所以就决定先用java能不能简单的搭建一个反向代理。
通过简单的测试,发现SpringSecurity+smiley-http-proxy-servlet就可以无需开发代码实现一个需要登录的反向代理服务器

使用方法

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mitre.dsmiley.httpproxy</groupId>
            <artifactId>smiley-http-proxy-servlet</artifactId>
            <version>1.12</version>
        </dependency>
@Configuration
public class ProxyServletConfiguration {
    @Value("${proxy.url}")
    private String url;
    @Value("${proxy.target_url}")
    private String targetUrl;

    @Bean
    public ServletRegistrationBean servletRegistrationBean() {
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new ProxyServlet(), url);
        servletRegistrationBean.setName("hello");
        servletRegistrationBean.addInitParameter("targetUri", targetUrl);
        servletRegistrationBean.addInitParameter(ProxyServlet.P_LOG, String.valueOf(true));
        return servletRegistrationBean;
    }
}
server.port=8080
spring.security.user.name=dong
spring.security.user.password=dong
server.servlet.session.timeout=10s

proxy.url=/*
proxy.target_url=https://www.baidu.com

因为都是成熟的组件,所以仅仅需要一些配置,就可以完成一个需要登录的反向代理服务器
这下可以放心的使用那些web页面了
优点:非常通用,任何服务都可以进行反向代理,成本低
缺点:需要额外占用一个端口、一些内存来做反向代理(如果用nginx也差不多);如果代码中有直接使用这些端口的代码,那就无法进行本地调试

你可能感兴趣的:(spring,boot,java,安全)