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
{
"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
{
"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
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
-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
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
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
{
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
[...]
(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
#!/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
$SU tail -f /var/log/caddy/debug.log