Die Frage ist ganz einfach, ich habe nur eine grundlegende Vorstellung von RPC, aber keine von IPC.
AFAIK, wenn ich mich über IPC mit dem Ethereum-Knoten verbinde, sollte mein Geth auf demselben Computer laufen. und wenn ich mich über RPC verbinde, könnte mein Geth auf jedem Remote-Computer laufen. Gibt es noch etwas, das ich wissen sollte.
Auch wenn ich RPC über Geth aktiviere, bedeutet dies, dass sich jeder mit meinem Knoten verbinden kann, oder dass ich einige bestimmte IPs einschränken kann, die eine Verbindung zu meinem Knoten herstellen können. Kann --rpc addr
irgendwie helfen?
IPC oder Interprozesskommunikation funktioniert im Allgemeinen auf Ihren lokalen Computern. Im Ethereum-Bereich beinhaltet IPC normalerweise das geth
Erstellen einer IPC-Pipe (die durch die Datei dargestellt wird $HOME/.ethereum/geth.ipc
) im lokalen Dateisystem Ihres Computers.
Andere Prozesse auf demselben Computer können dann die IPC-Datei verwenden, um eine bidirektionale Kommunikation mit geth
.
RPC- oder Remoteprozeduraufrufe funktionieren im Allgemeinen auf verschiedenen Computern. Im Ethereum-Raum bezieht sich RPC normalerweise auf den RPC-Endpunkt localhost:8545
oder 127.0.0.1:8545
oder 192.168.1.123:8545
.
Wenn Sie localhost:8545
oder 127.0.0.1:8545
für Ihren RPC-Endpunkt verwenden, können andere Prozesse NUR auf dem lokalen Computer über diesen RPC-Endpunkt kommunizieren, da localhost
nur 127.0.0.1
vom lokalen Computer aus darauf zugegriffen werden kann.
Wenn Sie eine nicht lokale IP-Adresse wie verwenden 192.168.1.123
, kann jeder andere Computer in Ihrem Netzwerk auf diesen RPC-Endpunkt zugreifen.
Wenn Ihre Internetverbindung Datenverkehr von Ihrer Internet-IP-Adresse an die IP-Adresse Ihres Computers weiterleitet, 192.168.1.123
kann jeder Computer aus dem Internet auf Ihren RPC-Endpunkt zugreifen, indem er eine Verbindung zu {Ihre Internet-IP-Adresse}:8545 herstellt.
Wie unter Wie können Sie die Wahrscheinlichkeit verringern, dass Ihre Ethereum-Brieftasche gehackt wird? , leitete der Benutzer Patrick seinen Internet-IP-Adressenverkehr für Port 8545 an die nicht lokale IP-Adresse seines Computers weiter (z. B. 192.168.1.123 anstelle von 127.0.0.1). Als Patrick sein Konto entsperrte, um Geld zu überweisen, konnte ein Angreifer aus dem Internet geth
JSON-RPC-Befehle ausführen, um Patricks Ether zu stehlen.
Wenn Sie also RPC über geth
aktivieren, aktivieren Sie es mit , --rpcaddr 127.0.0.1
wenn Sie möchten, dass es nur von Ihrem lokalen Computer aus zugänglich ist. Wenn Sie es mit Ihrer Netzwerk-IP-Adresse (z. B. 192.168.1.123) aktivieren, können alle Computer aus Ihrem Netzwerk auf geth
den RPC-Endpunkt von zugreifen. Wenn Ihr Internetmodem dann den Datenverkehr für Port 8545 aus dem Internet an 192.168.1.123:8545 Ihres Computers weiterleitet, kann jeder aus dem Internet auf geth
den RPC-Endpunkt von zugreifen.
Geben Sie also den --rpcaddr
Parameter nicht an und er wird standardmäßig auf 127.0.0.1 eingestellt, auf das nur von Ihrem lokalen Computer aus zugegriffen werden kann. Wenn Sie von anderen Computern in Ihrem lokalen Netzwerk auf RPC zugreifen möchten, stellen Sie sicher, dass Ihre Internetverbindung kein Internet weiterleitet Datenverkehr zu Ihrer geth
Maschine.
Der beste Weg, um zu überprüfen, ob Ihr lokaler Computer auf Kommunikation außerhalb Ihres lokalen Computerbereichs lauscht, besteht darin, Folgendes auszuführen:
Iota:backup user$ netstat -an | grep LISTEN
tcp4 0 0 127.0.0.1.8545 *.* LISTEN
tcp46 0 0 *.30303 *.* LISTEN
tcp4 0 0 127.0.0.1.8181 *.* LISTEN
tcp4 0 0 127.0.0.1.6379 *.* LISTEN
In der obigen Tabelle sehen Sie, dass die Ports 8545 (geth), 8181 (mein lokaler Webserver) und 6379 (Redis NoSQL-Datenbank) nur von meinem lokalen Computer aus zugänglich sind. Port 30303 ist jedoch von außerhalb meines lokalen Rechners zugänglich. Da mein ADSL-Router den Datenverkehr von Port 30303 an meinen lokalen Computer weiterleitet, kann die Welt über Port 30303 auf meinen lokalen Computer zugreifen.
IPC und RPC sind in Bezug auf die Zugänglichkeit nicht unbedingt gleich. Wenn Sie über eine IPC-Verbindung verfügen, haben Programme auf Ihrem lokalen Computer möglicherweise Zugriff auf das Programm, das die IPC-Datei überwacht. Ihr Webbrowser hat jedoch keinen Zugriff auf diese Datei, da Webbrowser im Allgemeinen keine Verbindung über IPC herstellen.
Wenn Sie über eine RPC-Verbindung verfügen, auf die von Ihrem lokalen Computer aus zugegriffen werden kann, hat Ihr Webbrowser, der lokal auf Ihrem Computer ausgeführt wird, Zugriff auf Ihre RPC-Verbindung. Der Parameter --rpccorsdomain
soll den Zugriff von Ihrem Webbrowser aus anderen als den von Ihnen angegebenen Domänen einschränken, aber jedes (bösartige) Programm, das auf Ihrem Computer ausgeführt wird, kann diese Anfrage einfach ignorieren (es ist nur eine höfliche Anfrage und keine Einschränkung) und auf Ihren RPC zugreifen Hafen sowieso.
--rpcaddr localhost
, gibt es in diesem Fall praktisch keinen Unterschied zwischen IPC und RPC? bcoz in beiden Fällen können nur Prozesse auf meinem lokalen Rechner mit geth kommunizieren, also scheinen ipc und rpc in diesem Fall gleich zu sein.--rpcaddr 127.0.0.1
, ist das Offenlegen von Personal über RPC ebenfalls nicht anfällig, da nur der Prozess auf meinem Computer eine Verbindung zu Geth herstellen kann. Oder gibt es noch andere Szenarien, die ich übersehen habe?--rpcaddr 127.0.0.1
und Ihr Computer kompromittiert wurde, kann jedes Programm, das auf Ihrem Computer ausgeführt wird, auf diesen Endpunkt zugreifen. Aber das ist das gleiche über IPC. Wenn Ihr Computer also kompromittiert wurde, gewährt IPC den gleichen Zugriff wie RPC 127.0.0.1 und beide sind anfällig. Sicherheit ist leider schwierig.geth attach
eine Form von IPC?geth.ipc
keine permanente Datei zu sein, sondern ein Socket und existiert nicht als Datei. Zumindest nicht auf meinem macOS-Dateisystem. Ich habe überall gesucht /T/geth.ipc
usw. /chaindata/geth.ipc
einschließlich unsichtbarer Dateien und es existiert nicht. Ich laufe derzeit geth. Kann jemand bestätigen, dass sich diese Datei tatsächlich nicht im Dateisystem befindet?geth.exe attach ipc:\\.\pipe\geth.ipc
Weiß nicht, was $HOME/.ethereum/geth.ipc
eigentlich ist, wahrscheinlich auf Bash, auf Linux (warum öffentliche Blockchain-Daten in jemandes Verzeichnis /home/user/ speichern? stackoverflow.com /questions/1510104/… ) oder vielleicht anderswo definiert werden?
Igor Nemo