Seguretat

Ens assegurem que el vostre Microbolt estigui protegit contra l’accés remot no autoritzat.

El Microbolt serà visible des d’Internet i, per tant, s’ha de protegir contra atacs en línia mitjançant diversos mètodes.

Inicieu sessió amb claus SSH

Una de les millors opcions per assegurar l’inici de sessió SSH sensible és desactivar completament les contrasenyes i requerir un certificat de clau SSH. Només algú amb possessió física de la clau de certificat privada pot iniciar sessió.

Preparacions sobre el sistema amfitrió

Creeu un nou parell de claus público/privada

⚠️

Omet si ja en tens un

ssh-keygen -t rsa -b 4096

Seguiu les instruccions i, opcionalment, introduïu una frase de contrasenya per protegir la vostra clau, podeu utilitzar la contrasenya [A]

Ara s’ha de copiar la clau pública a l’ordinador

cat ./.ssh/id_rsa.pub |
    ssh satoshi@nakamoto01 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
 

Preparatius al sistema servidor

També es recomana canviar el port ssh predeterminat 22, a una altra cosa com 2222

Desactiveu la contrasenya i els inicis de sessió root

sed 's/DROPBEAR_OPTS=""/DROPBEAR_OPTS="-w -s -p 2222"/' /etc/conf.d/dropbear > _
$SU mv -f _ /etc/conf.d/dropbear
 

Reinicieu el servei per aplicar els canvis

if $SU rc-service dropbear status | grep -q "started"; then
    $SU rc-service dropbear restart
elif $SU rc-service sshd status | grep -q "started"; then
    $SU rc-service sshd restart
fi

Desactiva el compte root

$SU passwd -l root

Tallafoc

Un tallafoc controla quin tipus de trànsit extern accepta la vostra màquina i quines aplicacions poden enviar dades. Per defecte, molts ports de xarxa estan oberts i escolten les connexions entrants. Tancar ports innecessaris pot mitigar moltes vulnerabilitats potencials del sistema.

De moment, només SSH hauria de ser accessible des de l’exterior. Bitcoin i Lightning utilitzen Tor i no necessiten ports d’entrada.

Instal·leu awall

$SU apk add awall iptables ip6tables

Carrega els mòduls necessaris del nucli i carrega'ls a l'arrencada

$SU modprobe -av ip_tables ip6_tables
printf "%s\n" \
    "ip_tables" \
    "ip6_tables" \
    | $SU tee /etc/modules-load.d/awall.conf

Configura i habilita les regles del tallafoc

Reemplaça eth0 per la interfície de xarxa

$SU $EDITOR /etc/awall/optional/base-config.json
/etc/awall/optional/base-config.json
{
  "description": "Base zones and policies",
 
  "zone": {
    "internet": { "iface": "eth0" }
  },
 
  "policy": [
     { "in": "internet", "action": "drop" },
     { "out": "internet", "action": "accept" }
  ]
}
💡

Si heu canviat el port SSH, reemplaceu "service": "ssh" amb el vostre nou port "service": { "proto": "tcp", "port": 2222 }, o el que tu triïs

$SU $EDITOR /etc/awall/optional/ssh.json
/etc/awall/optional/ssh.json
{
  "description": "Allow incoming SSH access (TCP/22)",
 
  "filter": [
    {
      "in": "internet",
      "out": "_fw",
      "service": "ssh",
      "action": "accept",
      "conn-limit": { "count": 3, "interval": 60 }
    }
  ]
}

Activa el tallafoc en arrencar

$SU rc-update add iptables
$SU rc-update add ip6tables

Inicia el tallafoc

$SU awall list
output
base-config  disabled  Base zones and policies
ssh          disabled  Allow incoming SSH access (TCP/22)
$SU awall enable base-config ssh
$SU awall activate

Comproveu si el firewall esta adequadament configurat i actiu

$SU iptables -S | grep 22
output
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j limit-ssh-0

Si us trobeu bloquejat per error, podeu connectar un teclat i una pantalla al vostre PC per iniciar sessió localment i corregir aquesta configuració (especialment per al port SSH).

Servidor intermediari invers

Diversos components d’aquesta guia exposaran un port de comunicació, per exemple, l’explorador de blocs o la interfície web ThunderHub per al vostre node Lightning. Fins i tot si utilitzeu aquests serveis només a la vostra pròpia xarxa domèstica, la comunicació s’hauria de xifrar sempre. En cas contrari, qualsevol dispositiu de la mateixa xarxa pot escoltar les dades intercanviades, incloses les contrasenyes.

Utilitzem Caddy per xifrar la comunicació amb SSL/TLS (Transport Layer Security). Aquesta configuració s’anomena “servidor intermediari invers”: Caddy proporciona una comunicació segura a l’exterior i encamina el trànsit de tornada al servei intern sense xifratge. Alternativament, podeu utilitzar Nginx per fer la mateixa funcionalitat.

⚠️

No recomanem utilitzar el Caddy disponible a Alpine perquè entrarà en conflicte quan Caddy s’actualitzi a la versió més recent i afegeixi mòduls. A més, l‘“init script” proporcionat no és tan complet com el proposat en aquesta guia.

Creeu l'usuari/grup caddy

$SU addgroup -S caddy
$SU adduser \
    -S \
    -D \
    -H \
    -h /dev/null \
    -s /sbin/nologin \
    -G caddy \
    -g caddy \
    caddy
  • Afegiu també l’usuari satoshi al grup caddy
$SU adduser satoshi caddy

Baixa l'última versió

cd /tmp
LATEST=$(wget -qO- https://api.github.com/repos/caddyserver/caddy/releases/latest | grep "tag_name" | cut -d '"' -f 4 | sed 's/^v//')
wget https://github.com/caddyserver/caddy/releases/download/v$LATEST/caddy_${LATEST}_linux_amd64.tar.gz \
    https://github.com/caddyserver/caddy/releases/download/v$LATEST/caddy_${LATEST}_checksums.txt
  • Comprovació de la suma de comprovació
grep caddy_${LATEST}_linux_amd64.tar.gz caddy_${LATEST}_checksums.txt | sha512sum -c
output
caddy_${LATEST}_linux_amd64.tar.gz: OK

Extreu i instal·la el binari

$SU tar xzf caddy_${LATEST}_linux_amd64.tar.gz caddy -C /usr/bin/
  • Afegeix els mòduls necessaris
$SU caddy add-package github.com/mholt/caddy-l4

Configuració

  • En primer lloc, creeu directoris per als fitxers de configuració
$SU mkdir -p \
    /etc/caddy/sites \
    /etc/caddy/streams
$SU $EDITOR /etc/caddy/Caddyfile
/etc/caddy/Caddyfile
{
        local_certs
        ocsp_stapling off
        log {
                format console
        }
        layer4 {
                import /etc/caddy/streams/*.caddy
        }
}
(tls) {
        tls internal {
                on_demand
        }
}
https:// {
        import tls
}
import /etc/caddy/sites/*.caddy
Utilitza els teus propis certificats autosignats
$SU openssl req \
    -x509 \
    -nodes \
    -newkey rsa:4096 \
    -keyout /path/to/your-key.pem \
    -out /path/to/your-cert.pem \
    -subj "/CN=localhost" \
    -days 3650
 
$SU chown \
    caddy:caddy \
    /path/to/your-key.pem \
    /path/to/your-cert.pem
/etc/caddy/Caddyfile
 [...]
 (tls) {
-        tls internal {
+        tls /path/to/your-cert.pem /path/to/your-key.pem {
                 on_demand
         }
 }
 [...]

Crea el servei Caddy

$SU $EDITOR /etc/init.d/caddy
/etc/init.d/caddy
#!/sbin/openrc-run
 
: ${CADDY_CONFIGFILE:=/etc/caddy/Caddyfile}
: ${CADDY_DATADIR:=/var/lib/caddy}
: ${CADDY_LOGDIR:=/var/log/caddy}
: ${CADDY_USER:=caddy}
: ${CADDY_GROUP:=caddy}
: ${CADDY_BIN:=/usr/bin/caddy}
: ${CADDY_OPTS=${CADDY_OPTS}}
: ${CADDY_SIGTERM_TIMEOUT:=600}
 
CADDY_PIDDIR="/run/caddy"
 
name="Caddy web server"
description="Fast, multi-platform web server with automatic HTTPS"
 
required_files="${CADDY_CONFIGFILE}"
pidfile="${CADDY_PIDDIR}/${SVCNAME}.pid"
retry="${CADDY_SIGTERM_TIMEOUT}"
capabilities="^cap_net_bind_service"
 
command="${CADDY_BIN}"
command_args="run
              --config ${CADDY_CONFIGFILE}
              ${CADDY_OPTS}"
command_user="${CADDY_USER}:${CADDY_GROUP}"
command_background="true"
 
start_stop_daemon_args="--env XDG_CONFIG_HOME=${CADDY_DATADIR%/caddy}
                        --env XDG_DATA_HOME=${CADDY_DATADIR%/caddy}
                        --stdout ${CADDY_LOGDIR}/debug.log
                        --stderr ${CADDY_LOGDIR}/debug.log"
 
extra_commands="checkconfig"
description_checkconfig="Check configuration"
 
extra_started_commands="reload"
description_reload="Reload configuration without downtime"
 
depend() {
  need net localmount
  after firewall
}
 
start_pre() {
    checkpath --file      --mode 0660 --owner "${command_user}" "${CADDY_CONFIGFILE}"
    checkpath --directory --mode 0750 --owner "${command_user}" "${CADDY_DATADIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${CADDY_LOGDIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${CADDY_PIDDIR}"
    checkconfig
}
 
checkconfig() {
  if [ ! -f "${CADDY_CONFIGFILE}" ] ; then
    ewarn "${CADDY_CONFIGFILE} does not exist." && return 1
  fi
  $command validate ${command_args#run} > /dev/null 2>&1
  eend $?
}
 
reload() {
  if ! service_started "${SVCNAME}" ; then
      eerror "${SVCNAME} isn't running" && return 1
  fi
  checkconfig || { eerror "Invalid configuration file !" && return 1; }
 
  ebegin "Reloading ${SVCNAME}"
  $command reload --force ${command_args#run} > /dev/null 2>&1
  eend $?
}
  • Habilita el permís d’execució
$SU chmod +x /etc/init.d/caddy

Habiliteu i inicieu el servei de Caddy

$SU rc-update add caddy
$SU rc-service caddy start
  • Podeu controlar els registres de Caddy introduint aquesta ordre. Sortiu amb Ctrl + C
tail -f /var/log/caddy/debug.log