2

私は Grails アプリを持っており、いくつかの IP 範囲のみがアプリケーションにアクセスできるように、IP でロックダウンしようとしています。これを実現するために、Config 内で Spring Security コマンドを使用しました。

grails.plugins.springsecurity.ipRestrictions

次に、クラウド (Jelastic) でアプリを実行すると、リストした IP の 1 つにいるにもかかわらず、必要な領域にアクセスできません。次に、以下に示すアプリにコードを挿入して、クライアントのアドレスを取得します。アプリを使用しているクライアントではなく、おそらくクラウド プロキシ サーバーのアドレスが表示されます。

request.getRemoteAddr()

IP をクラウド プロキシの IP として読み取るため、必要な領域にアクセスできないと思います。以下のコマンドを実行して、実際の IP が返されるかどうかを確認しましたが、すべて null でした。 S

request.getHeader("X-Forwarded-For");  

request.getHeader("Proxy-Client-IP");  

request.getHeader("WL-Proxy-Client-IP") 

request.getHeader("HTTP_CLIENT_IP")

request.getHeader("HTTP_X_FORWARDED_FOR")

クラウド プロキシの IP を使用する代わりに、クライアント IP によってクラウド内でこのアプリケーションを制限する方法があるかどうかを知りたいだけですか? 前もって感謝します

4

4 に答える 4

4

Jelastic インスタンスへのすべてのリクエストは、インフラストラクチャ グローバル リゾルバーを介して送信されます。

そうです、request.getRemoteAddr()Resolver の IP を返しますが、許可リストによって認識されません。

これを回避するには、Jelastic でアプリ サーバー用の外部 IPを購入します。この場合、すべてのリクエストはインスタンスに直接送信されます。

また、専用のJelastic コミュニティに参加して、経験を共有し、他の人から助けを得ることもお勧めします。

于 2012-10-31T10:58:09.747 に答える
0

Tomcatの前にnginxインスタンスを構成しましたか?ジェラスティックの詳細があるかどうかはわかりませんが、プロキシされたサービスにIPを渡すようにnginxを構成する必要があります。http://wiki.nginx.org/HttpRealIpModuleを参照してください。

デフォルトを上書きしたくない場合は、たとえばカスタムヘッダーを設定できます。

proxy_set_header X-Real-IP $remote_addr;
于 2012-10-31T10:31:22.040 に答える
0

アプリで実際に取得したヘッダーをダンプしようとしましたか?

Cloudfoundry.com では、「x-forwarded-for」が表示されることがわかります

class HeaderController {

def headerTest = {

    def headerNames = request.headerNames.collect{ it }

    headerNames.each {
        render "$it : ${request.getHeader(it)}\n"
    }

    render "Remote addr : ${request.getRemoteAddr()}\n"
    render "Forward addr : ${request.getHeader('x-forwarded-for' )}\n"

}
}
于 2012-10-31T19:13:26.693 に答える
0

Jelastic クラウドでは、「x-forwarded-for」に IP も表示されます。

フォローアップとして、Jelastic Communityの関連トピックを確認することをお勧めします。

おそらく、「x-forwarded-for」の値をチェックするように IP 制限設定を設定する必要があります。

于 2012-11-02T15:50:11.593 に答える