Una guía simplificada para correr tu propio servidor Electrumx

Traducción al castellano del original “A simplified guide to running your own Electrumx server” de im_uname.

Usas mucho Electron-Cash? Es una excelente cartera para Bitcoin Cash. Algunos dirían que es la mejor cartera desktop, y esto por buenas razones: mezcla (shuffle), tiene control de monedas, hay múltiples servidores, por lo que casi nunca está fuera de linea, las transacciones cuentan con un simple método de búsqueda y etiquetado, permite incluir op_returns arbitrarios, cuenta con soporte para firmas Schnorr, puedes usar tu servidor propio…

Un momento, dije servidor propio? Suena como toda una tarea. Por qué alguien querría hacer eso al margen de “Soy un buen tipo y quiero servir al público”?

Bueno, para comenzar, sabes que todas las direcciones de tu cartera están suscriptas al servidor que usas? Esto hace que el operador del mismo tenga la capacidad de vincular tus direcciones, sin importar cuánto mezcles (shuffle). Sabemos que algunas personas como yo no te rastrean, pero no podemos asegurar lo que otros operadores hacen o dejan de hacer! Qué pasaría si uno de ellos fuese literalmente del FBI?

Hay propuestas para mitigar esto, hasta cierto punto, alterando el código de red en Electron-cash, pero no es un trabajo trivial y el cronograma asociado es un tanto incierto. Al mismo tiempo, no hay sustituto alguno en relación a correr tu propio servidor Electronx al tiempo de ofrecer un servicio para otras personas en el proceso. Esta es la configuración definitiva para la privacidad de red, sin excepción.

“Ok, creo que hay una guía por ahí, pero parece bastante intimidante y hay muchas cosas sin mencionar”.

Exactamente. Por eso voy a intentar simplificarlo un poco. Solo voy a enumerar una serie de pasos, y siempre que los sigas, deberías estar en linea y corriendo en un día. Necesitas saber cómo manejarte con la línea de comandos Linux? Sí. Esto va a hacer tu vida más fácil? Espero que sí.

  1. Obtén un hosting Linux KVM VPS (o dedicado). Un mínimo de 8GB RAM / 300GB disco / 4 núcleos CPU / 5TB por mes de ancho de banda es recomendado, cuanto más mejor, no necesitas SSD, aunque está bueno. Consigue Debian 9 o 10 preinstalado. Obtén un dominio y apúntalo al ip de tu servidor.
  2. Haz los ajustes de seguridad necesarios: sudo apt update && sudo apt upgrade, cierra todos los puertos excepto SSH, 50002, 50001, 8333. No seas inocente, asegura el inicio de sesión SSH de tu servidor con una contraseña larga aleatoria o una clave pública.
  3. En tu carpeta de inicio: Coloca un nodo bitcoind (Bitcoin-ABC o Bitcoin Unlimited), descomprímelo y haz ~/.bitcoin/bitcoin.conf y asegúrate de tener  daemon=1server=1,rpcuser=yourusername,rpcpassword=yourpassword and txindex=1. Obviamente no coloques literalmente “yourpassword”. En serio.
  4. Ejecuta el bitcoind: Es recomendable que corras tu bitcoind como un servicio systemd para que el mismo no se vea interrumpido en caso de algun problema con tu servidor. Para hacer eso, crea un archivo bitcoind.service en /etc/systemd/system, y sigue el template de forking. Después sudo systemctl enable bitcoind && sudo systemctl start bitcoind y el nodo debería comenzar a sincronizar. Procede al siguiente paso.
  5. sudo apt install git python3-aiohttp build-essential python3-pip 
  6. sudo pip3 install pylru plyvel
  7. git clone https://github.com/Electron-Cash/electrumx.git
  8. cd electrumx && python3 ./setup.py build && sudo python3 ./setup.py install
  9. No lo corras todavía! Procede con la configuración del certificado SSL. Puedes ir con un self-signed o Let’s encrypt. Las instrucciones para Let’s encrypt las puedes encontrar aquí, pero no voy a entrar en detalles. Para un certificado self-signed de 5 años (!), lo suficientemente bueno para propósitos anti-MiTM, sigue las instrucciones aquí.
  10. Recomendación: Haz que tu Electrumx corra como un servicio systemd también. Adapta el archivo de servicio a tu /etc/systemd/system/electrumx.service:
 [Unit]
Description=Electrumx
After=network.target
[Service]
EnvironmentFile=/etc/electrumx.conf
ExecStart=/usr/local/bin/electrumx_server
User=user
LimitNOFILE=8192
TimeoutStopSec=30min
[Install]
WantedBy=multi-user.target

/etc/electrumx.conf, substituyendo las partes obvias con las tuyas propias:

DB_DIRECTORY = /home/user/.electrumx
COIN = BitcoinCash
NET = mainnet
ELECTRUMX = /usr/local/bin/electrumx_server.py
USERNAME = user
DB_ENGINE = leveldb
DB_DIRECTORY = /home/user/.electrumx
DAEMON_URL = http://user:yourpassword@127.0.0.1:8332/
SSL_CERTFILE=/path/to/yourcreatedcert
SSL_KEYFILE=/path/to/yourcreatedkeyfile
TCP_PORT=50001
SSL_PORT=50002
REPORT_HOST=your.domain.tld
HOST=
LOG_SESSIONS = 1000
ANON_LOGS = 127.0.0.1
DONATION_ADDRESS=bitcoincash:qpzd64xyvvmrkx6v2008t00d2zd06q3nygscv2u0eh
BANNER_FILE=/etc/electrumx/banner.txt
MAX_SESSIONS=4000
CACHE_MB=2048
MAX_SEND=10000000
ALLOW_ROOT=Y
MAX_SESSIONS_PER_IP=50
BLACKLIST_URL=https://raw.githubusercontent.com/Electron-Cash/electronx-blacklist/master/blacklist.json
BLACKLIST_POLL_INTERVAL=300
  1. Crea una carpeta /etc/electrumx y coloca lo que quieras en banner.txt dentro de ella. Nerds como yo van a ver tu aviso (banner) cuando estés conectado y sonreirán.
  2. sudo systemctl enable electrumx && sudo systemctl start electrumx. Espera medio día.
  3. Ahora deberías tener un servidor Electrumx funcional! Pruébalo conectándote via Electron-cash. Recuerda de mantener tu bitcoind actualizado cada seis meses para mantenerte al día con la red! 🙂
  4. Recomendación: Únete al Telegram Electron-cash para alardear de tu nuevo servidor o incluso para gritarme si la guía no funcionó. Envía un pedido de adición a la lista de servidores preferidos si planeas mantenerlo activo, es bueno para tu privacidad y bueno para todos.

Si me olvidé de algo, avísame!