2009-08-13 11 views
2

XMLRPCサーバーへのアクセスをIPアドレスで制限する最も良い方法は何ですか? web/twcgi.pyのCGIScriptクラスがリクエストにアクセスするレンダリングメソッドを持っているのを見ていますが、私のサーバでこのリクエストにアクセスする方法がわかりません。私はtwcgi.pyをパッチして環境変数を設定し、次にサーバーに環境変数にアクセスする例を見ましたが、より良い解決策が必要だと私は思いました。Python Twisted:IPアドレスによるアクセス制限

ありがとうございました。

答えて

5

接続が確立されると、ファクトリのbuildProtocolが呼び出され、その接続を処理する新しいプロトコルインスタンスが作成されます。 buildProtocolは、接続を確立したピアのアドレスを渡され、buildProtocolはNoneを返して、すぐに接続を閉じます。

したがって、たとえば、あなたがこのような工場書くことができます。

from twisted.internet.protocol import ServerFactory 

class LocalOnlyFactory(ServerFactory): 
    def buildProtocol(self, addr): 
     if addr.host == "127.0.0.1": 
      return ServerFactory.buildProtocol(self, addr) 
     return None 

そして、ローカル接続のみが処理されます(ただし、すべての接続がまだあなたが何ピア学ぶためにそれらを受け入れなければならないので、最初は受け入れられますアドレスは)。

これは、XML-RPCリソースを提供するために使用している工場に適用できます。そのファクトリをサブクラス化し、このようなロジックを追加します(または、サブクラスではなくラッパーを使用できます)。

iptablesや他のプラットフォームのファイアウォールも、場合によっては良い考えです。このアプローチでは、プロセスは接続の試行を見る必要がありません。

+0

+1実際には、小切手を適用するのに最適な場所です。ありがとう。 – nosklo

0

私は窓でファイアウォールを使用したい、またはLinuxでiptablesを使用します。

+1

iptablesはIPをロックアウトするためのオプションですが、特定のIPに特定のメソッドを許可するようなカスタムを実行したいと考えています。 – sberry

2

さて、別の答えは、任意のプロトコルの内部で、輸送からIPアドレスを取得することです:

d =self.transport.getHost() ; print d.type, d.host, d.port

次に、あなたが望む任意の方法でそれをフィルタリングするために値を使用します。

関連する問題