【问题标题】:How to secure Jetty to only allow access from loopback(localhost)如何保护 Jetty 仅允许从环回(本地主机)访问
【发布时间】:2010-12-29 15:40:28
【问题描述】:

我如何确保jetty 只允许来自本地主机的连接?这意味着从系统 B 上的 客户端 B 到系统 A 上的服务器 A 的连接 必须失败。我知道我可以通过配置我的防火墙来做到这一点(所以请不要回答这个问题)。我只想让 Jetty 只监听 localhost(loopback)。

【问题讨论】:

    标签: security jetty localhost


    【解决方案1】:

    经过一点点googling,我自己找到了我的问题的答案。

    答案是(在 jetty-distribution-7.0.1.v20091125 上测试):

    1. 找到 jetty.xml (etc/jetty.xml)
    2. 搜索<Call name="addConnector">
    3. <Set name="port"><SystemProperty name="jetty.port"/></Set> 行之前设置<Set name="Host"><SystemProperty name="jetty.host" default="127.0.0.1"/></Set>
    4. 就是这样。重启码头服务器(java -jar start.jar)。服务器应输出如下内容:

    2009-12-23 23:02:09.291:INFO::Started SelectChannelConnector@127.0.0.1:8080

    重要的是它应该说 127.0.0.1 而不是 0.0.0.0,0.0.0.0 意味着监听机器上的所有 ips。

    P.S:我想保护apache solr(即 使用码头)可以实现 同样的方式。

    您还可以通过以下方式以编程方式(嵌入码头)绑定到 localhost:

    Server server = new Server();
    Connector connector = new SelectChannelConnector();
    connector.setHost("localhost");
    connector.setPort(80);
    server.addConnector(connector);
    

    【讨论】:

    • 如果找不到<Call name="addConnector"> 怎么办。有没有更全面的例子?
    【解决方案2】:

    对于嵌入式 Jetty 9,此代码有效。

        Server server = new Server();                                       
        ServerConnector connector=new ServerConnector(server);
        connector.setPort(80);
        connector.setHost("localhost");        
        server.setConnectors(new Connector[]{connector});
    

    【讨论】:

    • 更简单的是使用new Server(InetSocketAddress.createUnresolved("127.0.0.1", port))
    【解决方案3】:

    我没有尝试过,但通常的方法是将服务器绑定到本地主机(即到 IP 127.0.0.1)。这意味着 Jetty 服务器将只侦听以 localhost 作为其目标地址的连接。

    快速谷歌搜索发现了这个http://old.nabble.com/How-to-make-Jetty-bind-to-specific-IP-address---to11667378.html#a11669524

    将此条目添加到 SelectChannelConnector 例如:

    <Set name="Host">127.0.0.1</Set>

    【讨论】:

    • 是的,经过一番搜索后,我也发现了类似的东西。现在我们应该提供关于 stackoverflow 的良好文档。我现在正在自己写东西。
    • 如果你在 Debian/Ubuntu/etc 中使用标准的 Jetty 包,方法是编辑 /etc/default/jetty 并将 JETTY_HOST 设置为 127.0.0.1。
    【解决方案4】:

    您可以在虚拟机启动时设置jetty.host属性:

    java -Djetty.host=127.0.0.1 -jar start.jar
    

    顺便说一句,jetty.port 也一样。

    【讨论】:

      【解决方案5】:

      我可以使用 .htaccess 做到这一点,但由于某种原因,本地主机过滤不起作用。如果您想允许来自特定外部 IP 的流量并阻止所有其他 IP 尝试 http://technologyenablingbusiness.blogspot.com/2011/03/setting-security-in-solr-running-on.html

      编辑:页面存档版本https://web.archive.org/web/20110429184536/http://technologyenablingbusiness.blogspot.com/2011/03/setting-security-in-solr-running-on.html

      【讨论】:

      • 引用的链接不再存在 - 我无法找到此信息的替代来源,但如果有人能够的话,也许可以编辑答案以包含一个。
      • 链接失效了,里面有个回路机cache
      【解决方案6】:

      对于嵌入式 Jetty 9,像这样初始化 Jetty 服务器:

      Server server = new Server(new InetSocketAddress("127.0.0.1", 8080));
      

      记得import java.net.InetSocketAddress;

      参考:org.eclipse.jetty.server.Server 的构造函数。 `

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-11
        • 2017-09-15
        • 2019-07-07
        • 1970-01-01
        • 2010-11-19
        • 1970-01-01
        • 1970-01-01
        • 2020-04-09
        相关资源
        最近更新 更多