按IP地址限制对我的XMLRPC服务器的访问的最佳方法是什么?我看到web/twcgi.py中的CGIScript类有一个render方法正在访问请求。。。但是我不知道如何在我的服务器中访问这个请求。我看到一个例子,有人修补twcgi.py设置环境变量,然后在服务器中访问环境变量。。。但我认为必须有更好的解决方案。
谢谢。

最佳答案

建立连接时,将调用工厂的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或其他平台防火墙在某些情况下也是一个好主意。使用这种方法,您的进程甚至不必看到连接尝试。

08-20 02:26