
Wir verwenden einen Dienst, der uns eine X-Anzahl von Anfragen pro IP zuteilt und uns erlaubt, 5 IPs mit einem solchen Limit einzurichten (ich weiß, es scheint dumm, dass sie das Limit für eine IP nicht einfach um das 5-fache erhöhen konnten).
Stellen Sie sich vor, ich hätte eine Linux-Box mit der folgenden Adresse im Internet: 66.249.90.104 – das ist eine Google-IP und nicht meine … Sie können also gerne versuchen, sie zu hacken :)
Ich habe Apache+mod_proxy als Weiterleitungsproxy eingerichtet (ProxyRequests aktiviert). Sie können Firefox also so einrichten, dass 66.249.90.104:8080 als Proxy verwendet wird, und der gesamte Firefox-Verkehr kommt als 66.249.90.104 heraus.
So weit, ist es gut.
Problem:
Nun füge ich weitere Alias-Schnittstellen hinzu, so dass die Gesamtsumme folgendermaßen aussieht:
eth0: 66.249.90.104
eth0:1 66.249.90.105
eth0:2 66.249.90.106
eth0:3 66.249.90.107
eth0:4 66.249.90.108
Ich verwende Apache+mod_proxy (einzelne Apache-Instanz), das an alle Schnittstellen bindet, aber egal, mit welcher Adresse ich mich verbinde, um den Weiterleitungsproxy zu verwenden, der gesamte Datenverkehr geht als 66.249.90.104 ins Internet
Ich habe auch versucht, fünf verschiedene Apaches auszuführen, von denen jeder nur an seine eigene Schnittstelle gebunden war, aber dadurch wird die ausgehende Anfrage trotzdem über 66.249.90.104 gesendet.
Ich hatte gehofft, es folgendermaßen zum Laufen zu bringen:
Ich verbinde mich mit 66.249.90.108 und mache eine Proxy-Anfrage, und es kommt als 66.249.90.108 raus.
Ich verbinde mich mit 66.249.90.107 und mache eine Proxy-Anfrage, und es kommt als 66.249.90.107 raus.
usw.
Hat sonst noch jemand dieses Problem? Die Ersatzlösung wäre, Apache einfach auf 5 separaten Boxen laufen zu lassen, aber ich würde es vorziehen, wenn alles auf einer Box laufen würde.
Danke!
Antwort1
Es scheint, dass mod_proxy beim Öffnen des Sockets keine Option zum Auswählen der Quell-IP hat. Sie können jedoch iptables verwenden, um den Datenverkehr von einem Benutzer an einen Adresspool umzuleiten.
iptables -A POSTROUTING -m owner --uid-owner httpd -j SNAT --to-source 66.249.90.104-66.249.90.108
Soweit ich mich erinnere, wird es über den Pool verteilt, wobei jede Verbindung zugeordnet wird, also sollte alles gleichmäßig verteilt sein. Wenn Sie wirklich kontrollieren müssen, welche Anfragen wohin gehen, können Sie versuchen, die mehreren Apache-Instanzen unter verschiedenen Benutzern auszuführen und mit unterschiedlichen Regeln abzugleichen.
Antwort2
Schauen Sie sich das Linux Advanced Routing and Traffic Control HOWTO an, insbesondere unterDasSeite. Vielleicht möchten Sie das Routing lieber dem Kernel überlassen, der darüber Bescheid weiß, als Apache, der sich um die „Anwendungsebene“ kümmert.