簡體   English   中英

以編程方式檢測Apache反向代理

[英]Detect apache reverse proxy programmatically

我想使用兩個具有不同主機名(虛擬主機)的不同反向代理通過Apache 2.4代理一個網站-我們稱其為“ APP”。 我們將這些代理稱為“ Alfa”和“ Beta”。 我希望Alfa成為顯示網站正常版本的“公共代理”。 Beta代理將限制對某些客戶端IP的公共訪問,但是我想在網站的每個頁面頂部顯示某種類型的敏感信息。 讓我們將敏感信息的那些部分稱為“ SENS”。

這是我當前的apache配置。

Listen 443
NameVirtualHost *:443
SSLStrictSNIVHostCheck off

## Virtual host for the Alfa Proxy
<VirtualHost *:443>

    ServerName alfa.mysite.org
    RewriteEngine On

    <Location /app/>    
        ProxyPass http://x.x.x.x:8080/app/
        ProxyPassReverse http://x.x.x.x:8080/app/
    </Location>

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile conf/alfa.crt
    SSLCertificateKeyFile conf/alfa.key
</VirtualHost>

## Virtual host for the Beta Proxy
<VirtualHost *:443>

    ServerName beta.mysite.org
    RewriteEngine On

    <Location /app/>
        Require ip 192.168.0
        ProxyPass http://x.x.x.x:8080/app/
        ProxyPassReverse http://x.x.x.x:8080/app/
    </Location>

    SSLEngine on
    SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
    SSLCertificateFile conf/beta.crt
    SSLCertificateKeyFile conf/beta.key
</VirtualHost>

為了僅向Beta用戶顯示SENS,我需要以編程方式檢測哪些代理請求來自。 現在,我研究了反向代理請求標頭的使用,例如“ X-Forwarded-Server”。 假設我在APP中定義了某種安全過濾器(例如Spring過濾器),該過濾器僅在X-Forwarded-Server等於“ beta.mysite.org”時才允許在頁面上呈現SENS。 這應該很好。

但是我的問題是:我是否可以確定不會對代理標頭進行某種形式的篡改,從而使alfa.mysite.org用戶實際查看我網站的SENS部分?

如果是這樣,還有其他方法可以做到“安全”。 我想避免使用兩個不同版本的APP或將APP部署在兩個不同的容器上。

任何意見或建議,表示贊賞。

根據Apache文檔,當使用多個代理時,x-forwarded-server標頭可以是逗號分隔的列表。 因此,從安全角度來看,我認為它不安全。

在您不直接訪問后端服務器的假設下,您可以嘗試以下操作。 設置自己的HTTP標頭,該值根據傳遞的VirtualHost的不同而變化。 然后,您只需要檢查后端是否存在標頭即可。

ServerName alfa.mysite.org
RewriteEngine On

<Location /app/>    
 #Set - The request header is set, replacing any previous header with this name
 RequestHeader set MyCustomHeader "remote"

</Location>

ServerName beta.mysite.org
RewriteEngine On

<Location /app/>
    Require ip 192.168.0
    #The request header is set, replacing any previous header with this name
    RequestHeader set MyCustomHeader "local"
    ..
</Location>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM