2010-01-27 43 views
0

我問這個服務器上的過錯,而是真的還沒有多少運氣,希望有人在這裏將能夠提供一些建議......阻止訪問特定的web應用中的Tomcat6

我有一個Tomcat 6服務器上運行得很好。我有外部訪問工作。我想知道如何防止某人看到特定的webapps,例如,我不想要外部訪問ROOT tomcat頁面。我會如何去阻止某些webapps,同時讓其他webapps對外部用戶可見?

這是我已經試過: 這一切都拒絕甚至127.0.0.1請求

<Host name="localhost" appBase="webapps" 
       unpackWARs="true" autoDeploy="true" 
       xmlValidation="false" xmlNamespaceAware="false"> 

    <Context path="/examples" docBase="" > 
     <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127.0.0.1"/> 
    </Context> 
    </Host> 

此拒絕所有爲好。

<Host name="localhost" appBase="webapps" 
        unpackWARs="true" autoDeploy="true" 
        xmlValidation="false" xmlNamespaceAware="false"> 

     <Context path="/examples" docBase="" > 
      <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="*"/> 
     </Context> 
     </Host> 

基本上我試圖阻止訪問根默認的Tomcat頁面和應用實例....

任何想法?

回答

2

不能使用通配符的允許屬性......在另一方面,你可以使用一個用於否認屬性。

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="*"/> 

這就是爲什麼我用上面的代碼得到403。

另一種處理這種情況的方式是我創建了一個jsp,將流量重定向到我想要的任何位置。

1

查看文檔。 http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html

你似乎是正確的。它說:「如果指定了這個屬性,遠程地址必須匹配這個請求被接受。」

你可能要看的一件事是看看127.0.0.1是否真的是真正的IP。您可能實際上正在使用該框的實際IP。嘗試在本地主機之後添加該IP地址。

+0

以及我的第二個例子下面進行測試,我已經讓=「* 「這應該允許任何事情和一切。但它仍然否認。 – Gabe 2010-01-27 19:56:55

+0

您對雙重檢查源ip + 1做了一個很好的說明 – Gabe 2010-01-27 20:22:02

1

「允許」屬性的值必須用反斜槓轉義允許的IP地址的點來定義:

<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1"/> 
0

這可能是一個IPv6的問題。這是我tomcat6/Catalina/myApp.xml是什麼樣子:

<!--<?xml version="1.0" encoding="UTF-8"?> --> 
<Context path="/myApp" privileged="true"> 
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.0\.0\.1,0:0:0:0:0:0:0:1"/> 
</Context> 

這可以通過將產生403如果你拒絕訪問

wget --inet4-only http://localhost:8080/myApp