Quiero configurar una red privada de aplicaciones que pueda conectarse a un único nodo Geth. ¿Qué opciones tengo para exponer el servidor RPC?
Estoy ejecutando esto: geth --rpc --testnet
(a veces uso --dev
)
¿Esto solo requeriría ejecutar un proxy inverso con un servidor como Nginx?
Puede crear de manera fácil y segura un túnel SSH a su nodo ETH desde el servidor de aplicaciones. De esta manera, el nodo ETH es engañado haciéndole creer que la conexión es de localhost y puede asegurarse de que solo el titular de una clave privada pueda acceder.
Este es un enlace a las instrucciones sobre cómo configurar la autenticación basada en certificados
Es importante configurar la autenticación de certificados porque, de lo contrario, no podrá automatizar el proceso.
Una vez que haya configurado eso, puede crear un túnel ejecutando un comando como:
ssh -f -N -L 9545:localhost:8545 remoteUser@remotehost.remotedomain.tld
Los números de puerto son diferentes en mi ejemplo, para que el lector pueda diferenciarlos. No hay absolutamente ninguna otra razón para hacerlos diferentes.
Una vez que se haya emitido este comando , se reenviará todo el tráfico a port 9545
on , que considerará que se ha originado y estará dirigido alocalhost
remotehost.remotedomain.tld:8545
localhost
localhost:8545
De esta manera, puede mantener su nodo ETH detrás de un firewall y no abrirlo al mundo, pero aun así centralizar la funcionalidad.
Para usar esto en producción, deberá resolver el problema de desconectar las sesiones SSH.
advertencia: no lo recomiendo
De forma predeterminada, el nodo solo aceptará conexiones de localhost . Puede cambiar esto para aceptar conexiones de cualquier persona con: --rpcaddr "0.0.0.0"
.
Tenga en cuenta que cada vez que se desbloquea una clave privada, cualquiera en Internet puede usar esta clave consultando su servidor rpc y enviando transacciones.
--rpcaddr "0.0.0.0"
? @Jeffrey W--rpc --rpcport "8545" --rpcaddr "127.0.0.1" --rpccorsdomain "*"
--rpccorsdomain "*" permite que cualquier persona se conecte al nodo en --rpcport dado
--rpccorsdomain value Comma separated list of domains from which to accept cross origin requests (browser enforced)
- Navegador forzado significa que si un usuario realiza una solicitud sin un navegador , geth atenderá la solicitud ignorando el dominio. `--rpccorsdomain "*"
permite que cualquier persona se conecte a su nodo geth a través de rpc. En producción/uso público --rpccorsdomain "remoteUser@remotehost.remotedomain.tld"
para vincular la conexión específicamente a su usuario remoto. En la práctica, geth debería estar escuchando únicamente a las conexiones locales.Geth ha cambiado una vez más toda la sintaxis de la línea de comandos... así que este es un ejemplo de una configuración actual para permitir el acceso externo a su nodo (se necesitan medidas de seguridad adicionales dependiendo de su aplicación)
geth --http --http.addr "0.0.0.0" --http.corsdomain "*" --http.port "8545"
Más información aquí https://geth.ethereum.org/docs/rpc/server
Karl Floersch
--rpccorsdomain
puede ser lo que estoy buscando. Creo que puede especificar--rpccorsdomain "*"
cuál permitirá que cualquiera acceda al servidor RPC. Estoy seguro de que también puede usar un proxy inverso para lograr esto. Basé mi información en este repositorio: github.com/Kunstmaan/docker-ethereumniksmac
rpccorsdomain
es lo que quieres, considera responder tu propia pregunta.Péter Szilágyi
CORS
que los navegadores lo aplican. Es una medida de seguridad para prevenir ataques de secuencias de comandos en sitios cruzados y DDOS al evitar que las masas que usan navegadores simples hagan algo estúpido accidentalmente. Sin embargo, un atacante puede ignorar libremente cualquier solicitud de CORS que el servidor devuelva. No debe utilizarse como medida de seguridad.