GovInWeb3

Actualizaciones críticas y parches de seguridad

Operar cualquier tipo de nodo de Ethereum no consiste únicamente en instalarlo y dejarlo funcionando. Eso no es suficiente. Es necesario establecer una rutina de mantenimiento y seguirla meticulosamente para minimizar al máximo cualquier riesgo que pueda surgir. Es dentro de este mantenimiento donde debemos asegurarnos de que los clientes del nodo estén ejecutando las últimas versiones.

No actualizar los clientes podría generar varios inconvenientes, como un rendimiento disminuido, problemas de compatibilidad con aplicaciones más nuevas o incluso riesgos de seguridad. El software desactualizado está expuesto a ataques y exploits de vulnerabilidades conocidas en versiones anteriores.

Si bien nos centraremos en ofrecer sugerencias para mantener actualizados los clientes de Ethereum, también destacamos la necesidad e importancia de mantener actualizado el sistema operativo.

Actualizaciones del Sistema Operativo

Podemos imaginar cómo se sentiría un staker al encontrar un mensaje de advertencia de su sistema operativo indicando que su máquina es vulnerable. Para evitar que esto suceda, hay dos opciones: estar atento las 24 horas del día a los parches de seguridad y las actualizaciones de su sistema operativo, o tener habilitadas actualizaciones automáticas. Claramente, la segunda opción ofrece cierta ventaja en eficiencia. La decisión de usar actualizaciones automáticas o no dependerá de cada usuario.

A continuación, presentamos un tutorial que muestra cómo habilitar las actualizaciones críticas de seguridad de forma automática en distribuciones de Linux:

sudo apt-get update -y 
sudo apt-get install -y unattended-upgrades update-notifier-common
sudo vim /etc/apt/apt.conf.d/20auto-upgrades #usar nano si no tienen vim instalado
#sudo nano /etc/apt/apt.conf.d/20auto-upgrades

Una vez abierto el archivo de configuración modificamos los siguientes parámetros:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Remove-New-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "02:00";

Guardamos el archivo y procedemos a configurar:

sudo systemctl enable unattended-upgrades
sudo systemctl restart unattended-upgrades

Volvemos a actualizar:

sudo apt-get update -y
sudo apt-get upgrade -y
sudo apt-get dist-upgrade -y

Reiniciamos:

sudo shutdown -r now

Ahora las actualizaciones criticas de seguridad del sistema operativo se instalaran automáticamente.

Actualizaciones de los clientes de Ethereum

Como sabemos, para fortalecer la resistencia de Ethereum contra posibles ataques o errores de consenso, es recomendable usar clientes minoritarios. Para ver la distribución de clientes, recomendamos visitar Client Diversity

Para obtener más detalles sobre la importancia de la diversidad de clientes, compartimos un artículo anterior en donde explicamos las ventajas de cada cliente y realizamos una evaluación comparativa entre ellos: "Evaluación comparativa de clientes de Ethereum"

Debido a esta diversidad, nos enfocaremos en esta guía en un tutorial básico para actualizar un cliente, brindar recomendaciones generales y mencionar buenas prácticas que un operador de nodo debería seguir.

Verificación periódica de actualizaciones de los clientes

Es importante mantenerse al día con las últimas actualizaciones, ya que, como mencionamos, contienen correcciones de errores y parches de seguridad.

Por lo general, las actualizaciones nos indican qué tan urgentes son necesarias sus implementaciones; por ejemplo, Nimbus las clasifica de la siguiente manera:

  • low-urgency: actualiza a tu conveniencia.
  • medium-urgency: puede contener una corrección de estabilidad importante; es mejor actualizar cuanto antes.
  • high-urgency: actualiza tan pronto como puedas; esta es una actualización crítica necesaria para que el cliente funcione correctamente.

Para mantenerse informado, no hay nada mejor que ser miembro del Discord de los clientes utilizados e inscribirse en sus alarmas por correo electrónico (en caso de que tengan ese servicio).

Verificar las últimas versiones directamente desde GitHub también es una buena opción. A continuación, se detallan las páginas necesarias para verificar la última versión de cada cliente y los documentos necesarios para realizar la actualización.

Execution Clients -EL

geth

⛔ Desde SEEDNode, desalentamos el uso de geth e invitamos a usar clientes minoritarios.

Nethermind

Besu

Erigon

Consensus Clients - CL

Prysm

Lighthouse

Teku

Nimbus

Actualización del cliente

*Consideraciones: El procedimiento de actualización va a cambiar de cliente en cliente. A su vez, para el mismo cliente, va a depender de la forma en que haya sido instalado (instalado en el sistema, usando Docker u otra opción), y también del Sistema Operativo.

Si se siguió una guía para la instalación del cliente, es recomendable dirigirse a esa misma documentación para buscar información de cómo actualizarlo. *

Sólo con fines educativos, realizaremos en esta guía, la actualización de un cliente Nethermind en una distribución Linux, directamente descargando los archivos binarios.

El procedimiento es general, se descargan los nuevos archivos y se reemplazan los antiguos. Para cualquier otro cliente en Linux el procedimiento es similar.

Procedimiento para actualizar un cliente Nethermind

  • Con el siguiente script descargamos la ultima versión directamente del GitHub . La descomprimimos y eliminamos el archivo .zip.
RELEASE_URL=" 
https://api.github.com/
repos/NethermindEth/nethermind/
releases/latest"

BINARIES_URL="$(curl -s $RELEASE_URL | jq -r ".assets[] | select(.name) | .browser_download_url" | grep linux-x64)"

echo Downloading URL: $BINARIES_URL
cd $HOME
wget -O nethermind.zip $BINARIES_URL
unzip -o nethermind.zip -d $HOME/nethermind
rm nethermind.zip
✅ Realizar una triple comprobación de que la página del GitHub es la correcta.
  • Detenemos el cliente
sudo systemctl stop execution
  • Eliminamos los binarios de la versión anterior, instalamos los nuevos y reiniciamos el cliente.
sudo rm -rf /usr/local/bin/nethermind 
sudo mv $HOME/nethermind /usr/local/bin/nethermind
sudo systemctl start execution

Cambios en Ethereum

Al igual que con el caso específico de los clientes, es vital mantenerse informado sobre todo lo relacionado con el mundo de Ethereum. Estar involucrado en comunidades, seguir a los desarrolladores, leer noticias o visitar directamente el blog de Ethereum son buenas prácticas.

Por ejemplo, el último gran cambio en la red, el hard fork Dencun, fue un evento anunciado con mucho tiempo de anticipación. Antes, durante y después de este hito en la historia de Ethereum, los clientes enviaron una mayor cantidad de actualizaciones que en otros momentos.

Es responsabilidad del operador de nodo mantenerse informado de todos los acontecimientos y tener su equipo listo para el momento del cambio.

En las imágenes siguientes podemos ver cómo desde el blog de Ethereum avisaban qué versiones había que utilizar para que los nodos se sincronicen con la nueva cadena y no queden sincronizados con la cadena de bloques previa al hard fork.

GovInWeb3
Releases

Conclusiones

Con todo lo expuesto, podemos concluir que la mejor forma de mantener los nodos actualizados es siguiendo las novedades tanto de los clientes específicos de interés como de la red Ethereum en general. Estar atento al GitHub, Discord y redes de sus clientes es una muy buena práctica para no perderse ninguna noticia, actualización o parche de seguridad urgente que deba aplicarse.

Mantenerse informado acerca del mundo Ethereum también es fundamental, ya que al fin y al cabo, nuestros nodos son parte de la infraestructura de la red. Recomendamos participar en comunidades específicas, como por ejemplo ethStaker,donde en su Discord, mantienen un canal con alarmas de actualizaciones de clientes muy útil, y por supuesto los invitamos a participar en SEEDLatam para no perderse ninguna novedad del mundo Ethereum.