Question

Quelle serait la meilleure méthode pour restreindre l'accès à mon serveur XMLRPC par adresse IP? Je vois la classe CGIScript dans web / twcgi.py a une méthode render qui accède à la demande ... mais je ne suis pas sûr de savoir comment accéder à cette demande dans mon serveur. J'ai vu un exemple où quelqu'un patché twcgi.py pour définir des variables d'environnement, puis dans l'accès au serveur les variables d'environnement ... mais je me dis que il doit y avoir une meilleure solution.

Merci.

Était-ce utile?

La solution

Quand une connexion est établie, est appelée buildProtocol d'une usine pour créer une nouvelle instance de protocole pour gérer cette connexion. buildProtocol est passée l'adresse du pair qui a établi la connexion et buildProtocol peut retourner Aucun d'avoir la connexion fermée immédiatement.

Ainsi, par exemple, vous pouvez écrire une usine comme ceci:

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

Et seules les connexions locales seront traitées (mais toutes les connexions seront toujours acceptées au départ, puisque vous devez les accepter d'apprendre ce que l'adresse de pairs est).

Vous pouvez l'appliquer à l'usine que vous utilisez pour servir les ressources XML-RPC. Juste sous-classe de cette usine et la logique ajouter comme celui-ci (ou vous pouvez faire un emballage au lieu d'une sous-classe).

iptables ou un autre pare-feu de la plate-forme est aussi une bonne idée pour certains cas, cependant. Avec cette approche, votre processus n'a jamais même pour voir la tentative de connexion.

Autres conseils

D'accord, une autre réponse est d'obtenir l'adresse IP de transport, à l'intérieur de tout protocole:

d = href="http://twistedmatrix.com/documents/current/api/twisted.internet.interfaces.ITCPTransport.html#getHost" rel="nofollow noreferrer"> self.transport.getHost () ; print d.type, d.host, d.port

Ensuite, utilisez la valeur pour filtrer de quelque façon que vous voulez.

J'utilise un pare-feu sur les fenêtres, ou iptables sur linux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top