Installazione di CryptPad su Debian 12: Collaborazione Sicura e Privacy Totale
Introduzione
In un’epoca in cui la privacy digitale è costantemente minacciata, CryptPad emerge come una soluzione rivoluzionaria per la collaborazione online. Questa suite per ufficio open source offre un’alternativa sicura a Google Docs e Microsoft 365, con una differenza fondamentale: crittografia end-to-end integrata che garantisce che nemmeno gli amministratori del server possano accedere ai vostri dati.
In questa guida completa, vi accompagnerò nell’installazione e configurazione di CryptPad su Debian 12, trasformando il vostro server in una piattaforma di collaborazione privata e sicura.
Cos’è CryptPad e Perché Sceglierlo
Caratteristiche Principali
CryptPad è una suite completa di strumenti collaborativi che include:
- Rich Text Editor: Editor di documenti avanzato con formattazione completa
- Fogli di Calcolo: Alternativa sicura a Excel/Google Sheets
- Presentazioni: Creazione di slide professionali
- Editor Markdown: Per documentazione tecnica e note
- Kanban Board: Gestione progetti in stile agile
- Whiteboard: Lavagna digitale collaborativa
- Form/Sondaggi: Raccolta dati anonima e sicura
- Drive Crittografato: Storage personale per tutti i documenti
Vantaggi della Crittografia Zero-Knowledge
La tecnologia Zero-Knowledge di CryptPad significa che:
- I dati vengono crittografati nel browser prima di essere inviati al server
- Le chiavi di decrittazione non lasciano mai il dispositivo dell’utente
- Nemmeno gli amministratori del server possono leggere i contenuti
- Conformità totale con GDPR e altre normative sulla privacy
- Nessun tracking o analytics invasivi
Prerequisiti e Requisiti di Sistema
Requisiti Hardware
- CPU: Minimo 2 core, consigliati 4 core
- RAM: Minimo 2GB, consigliati 4GB per team di 10+ utenti
- Storage: 20GB minimo + 1GB per utente attivo
- Banda: Connessione stabile con almeno 10 Mbps simmetrici
Requisiti Software
- Sistema Operativo: Debian 12 (Bookworm) aggiornato
- Node.js: Versione 18.x o superiore
- NPM: Versione 9.x o superiore
- Git: Per clonare il repository
- Nginx: Come reverse proxy
- Certbot: Per certificati SSL/TLS
- PM2: Process manager per Node.js
Preparazione del Sistema
# Aggiornamento completo del sistema
apt update && apt upgrade -y
# Installazione strumenti essenziali
apt install -y curl wget git build-essential software-properties-common
# Configurazione del firewall
apt install -y ufw
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
Installazione di Node.js e NPM
CryptPad richiede Node.js 18.x o superiore. Installiamo l’ultima versione LTS:
# Rimozione di eventuali versioni precedenti
apt remove --purge nodejs npm -y
apt autoremove -y
# Installazione del repository NodeSource
curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
# Installazione di Node.js e NPM
apt install -y nodejs
# Verifica delle versioni installate
node --version # Dovrebbe mostrare v18.x.x
npm --version # Dovrebbe mostrare 9.x.x
# Installazione di strumenti di build aggiuntivi
apt install -y python3 make g++
Creazione Utente Dedicato
Per sicurezza, CryptPad dovrebbe essere eseguito con un utente dedicato non privilegiato:
# Creazione utente cryptpad
useradd -m -d /home/cryptpad -s /bin/bash cryptpad
# Creazione directory per l'applicazione
mkdir -p /opt/cryptpad
chown cryptpad:cryptpad /opt/cryptpad
# Passaggio all'utente cryptpad
su - cryptpad
Download e Installazione di CryptPad
Clonazione del Repository
# Come utente cryptpad
cd /opt
git clone https://github.com/xwiki-labs/cryptpad.git cryptpad
cd cryptpad
# Checkout dell'ultima versione stabile
git checkout $(git tag -l | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | sort -V | tail -n1)
Installazione delle Dipendenze
# Installazione delle dipendenze Node.js
npm install
# Installazione delle dipendenze client-side
cd www
npm install
npm run build
cd ..
# Creazione delle directory necessarie
mkdir -p data blob blobstage block customize
Configurazione di CryptPad
File di Configurazione Base
# Copia del file di esempio
cp config/config.example.js config/config.js
# Modifica della configurazione
nano config/config.js
Modificate il file config/config.js con i seguenti parametri essenziali:
module.exports = {
// URL pubblico della vostra istanza
httpUnsafeOrigin: 'https://cryptpad.esempio.com',
// Porta su cui ascoltare (solo localhost)
httpPort: 3000,
httpAddress: '127.0.0.1',
// Directory per i dati
filePath: './data/file/',
archivePath: './data/archive/',
pinPath: './data/pins/',
taskPath: './data/tasks/',
blockPath: './block/',
blobPath: './blob/',
blobStagingPath: './blobstage/',
decreePath: './data/decrees/',
// Logging
logPath: './data/logs/',
logToStdout: false,
logLevel: 'info',
logFeedback: false,
// Sicurezza
contentSecurity: [
"default-src 'none'",
"style-src 'unsafe-inline' 'self'",
"font-src 'self' data:",
"script-src 'self'",
"connect-src 'self' wss://cryptpad.esempio.com",
"img-src 'self' data: blob:",
"media-src 'self' data: blob:",
"child-src 'self'",
"frame-src 'self' blob:",
"worker-src 'self' blob:",
].join('; '),
// Amministrazione
adminEmail: 'admin@esempio.com',
adminKeys: [
// Aggiungere qui la chiave pubblica dell'admin dopo la prima registrazione
],
// Limiti storage (in MB)
defaultStorageLimit: 50,
maxUploadSize: 20 * 1024 * 1024, // 20MB
// Features
allowSubscriptions: false,
restrictRegistration: false, // Impostare a true per limitare le registrazioni
};
Personalizzazione dell’Interfaccia
# Creazione file di personalizzazione
mkdir -p customize/pages
nano customize/pages/index.js
Aggiungete personalizzazioni come logo e messaggi di benvenuto:
// customize/pages/index.js
define(['/customize/messages.js'], function (Messages) {
Messages.home_host = "La Vostra Organizzazione";
Messages.home_privacy_link = "Politica Privacy";
Messages.home_tos_link = "Termini di Servizio";
return Messages;
});
Configurazione di PM2 per la Produzione
PM2 garantisce che CryptPad rimanga sempre in esecuzione:
# Tornare come utente root
exit
# Installazione globale di PM2
npm install -g pm2
# Creazione script di avvio
cat > /opt/cryptpad/ecosystem.config.js << 'EOF'
module.exports = {
apps: [{
name: 'cryptpad',
script: './server.js',
cwd: '/opt/cryptpad',
user: 'cryptpad',
instances: 1,
autorestart: true,
watch: false,
max_memory_restart: '1G',
env: {
NODE_ENV: 'production',
PORT: 3000
},
error_file: './data/logs/err.log',
out_file: './data/logs/out.log',
log_file: './data/logs/combined.log',
time: true
}]
};
EOF
# Avvio di CryptPad con PM2
cd /opt/cryptpad
pm2 start ecosystem.config.js
# Configurazione avvio automatico
pm2 startup systemd -u cryptpad --hp /home/cryptpad
pm2 save
# Verifica stato
pm2 status
pm2 logs cryptpad --lines 20
Configurazione di Nginx come Reverse Proxy
Installazione e Configurazione Base
# Installazione di Nginx
apt install -y nginx
# Creazione configurazione per CryptPad
nano /etc/nginx/sites-available/cryptpad
Configurazione completa di Nginx per CryptPad:
server {
listen 80;
listen [::]:80;
server_name cryptpad.esempio.com;
# Redirect HTTP to HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cryptpad.esempio.com;
# SSL Configuration (sarà completata da Certbot)
ssl_certificate /etc/letsencrypt/live/cryptpad.esempio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/cryptpad.esempio.com/privkey.pem;
# Security Headers
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Frame-Options "SAMEORIGIN";
# Logs
access_log /var/log/nginx/cryptpad.access.log;
error_log /var/log/nginx/cryptpad.error.log;
# WebSocket support
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# Main application
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket headers
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
# API endpoint
location ^~ /cryptpad_websocket {
proxy_pass http://127.0.0.1:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket specific
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
# Static files
location ^~ /customize.dist/ {
proxy_pass http://127.0.0.1:3000;
proxy_cache_valid 200 302 60m;
proxy_cache_valid 404 1m;
}
# Block access to sensitive areas
location ~ ^/(\.bowerrc|\.bower\.json|\.jshintrc|\.jshintignore|Gruntfile\.js|package\.json|bower\.json|config\.js)$ {
deny all;
}
}
# Abilitazione del sito
ln -s /etc/nginx/sites-available/cryptpad /etc/nginx/sites-enabled/
# Test configurazione
nginx -t
# Riavvio Nginx
systemctl restart nginx
Certificati SSL con Let's Encrypt
# Installazione Certbot
apt install -y certbot python3-certbot-nginx
# Ottenimento certificato SSL
certbot --nginx -d cryptpad.esempio.com \
--non-interactive \
--agree-tos \
--email admin@esempio.com \
--redirect
# Verifica rinnovo automatico
certbot renew --dry-run
# Configurazione rinnovo automatico con reload servizi
echo "0 0,12 * * * root certbot renew --quiet --post-hook 'systemctl reload nginx'" >> /etc/crontab
Hardening e Sicurezza
Configurazione Firewall Avanzata
# Limitazione rate per prevenire DoS
apt install -y fail2ban
# Configurazione jail per Nginx
cat > /etc/fail2ban/jail.d/nginx-cryptpad.conf << EOF
[nginx-req-limit]
enabled = true
filter = nginx-req-limit
action = iptables-multiport[name=ReqLimit, port="http,https"]
logpath = /var/log/nginx/cryptpad.error.log
maxretry = 10
findtime = 60
bantime = 600
EOF
# Riavvio fail2ban
systemctl restart fail2ban
Headers di Sicurezza Aggiuntivi
# Aggiungere in /etc/nginx/sites-available/cryptpad nella sezione server HTTPS
# Content Security Policy
add_header Content-Security-Policy "default-src 'none'; style-src 'unsafe-inline' 'self'; font-src 'self' data:; script-src 'self'; connect-src 'self' wss://cryptpad.esempio.com; img-src 'self' data: blob:; media-src 'self' data: blob:; child-src 'self'; frame-src 'self' blob:; worker-src 'self' blob:;" always;
# Referrer Policy
add_header Referrer-Policy "no-referrer" always;
# Feature Policy
add_header Feature-Policy "geolocation 'none'; midi 'none'; sync-xhr 'none'; microphone 'none'; camera 'none'; magnetometer 'none'; gyroscope 'none'; payment 'none'" always;
Backup e Manutenzione
Script di Backup Automatico
#!/bin/bash
# /opt/scripts/backup-cryptpad.sh
BACKUP_DIR="/backup/cryptpad"
DATE=$(date +%Y%m%d-%H%M%S)
CRYPTPAD_DIR="/opt/cryptpad"
# Creazione directory backup
mkdir -p $BACKUP_DIR
# Stop CryptPad temporaneamente
pm2 stop cryptpad
# Backup dei dati
tar -czf $BACKUP_DIR/cryptpad-data-$DATE.tar.gz \
$CRYPTPAD_DIR/data \
$CRYPTPAD_DIR/blob \
$CRYPTPAD_DIR/block \
$CRYPTPAD_DIR/config/config.js
# Restart CryptPad
pm2 start cryptpad
# Mantieni solo ultimi 7 backup
find $BACKUP_DIR -name "cryptpad-data-*.tar.gz" -mtime +7 -delete
echo "Backup completato: cryptpad-data-$DATE.tar.gz"
# Rendere eseguibile e programmare
chmod +x /opt/scripts/backup-cryptpad.sh
echo "0 2 * * * root /opt/scripts/backup-cryptpad.sh" >> /etc/crontab
Monitoraggio e Log
# Visualizzazione log in tempo reale
pm2 logs cryptpad
# Monitoraggio risorse
pm2 monit
# Stato dettagliato
pm2 info cryptpad
# Log rotation automatico con PM2
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
Gestione Utenti e Amministrazione
Creazione Account Amministratore
1. Registrate un account normale su CryptPad
2. Andate nelle impostazioni e copiate la vostra chiave pubblica
3. Aggiungete la chiave al file di configurazione:
nano /opt/cryptpad/config/config.js
# Aggiungere nella sezione adminKeys:
adminKeys: [
"https://cryptpad.esempio.com/user/#/1/nome-utente/chiave-pubblica-lunga/"
],
Limitazione Registrazioni
Per un'istanza privata, potete limitare le registrazioni:
# In config/config.js
restrictRegistration: true,
# Lista email autorizzate
allowlistEmails: [
'utente1@esempio.com',
'utente2@esempio.com'
],
WebSocket non Funzionanti
Sintomo: Errori di connessione in tempo reale
Soluzione: Verificare configurazione proxy_upgrade in Nginx
Errori di Permessi
# Correzione proprietà
chown -R cryptpad:cryptpad /opt/cryptpad
chmod -R 755 /opt/cryptpad/data
Memoria Insufficiente
Sintomo: Crash frequenti o lentezza
Soluzione: Aumentare memoria in ecosystem.config.js o aggiungere swap
# Creazione swap se necessario
fallocate -l 2G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
echo "/swapfile none swap sw 0 0" >> /etc/fstab
Verifica Integrità
# Test funzionalità base
curl -I https://cryptpad.esempio.com
# Dovrebbe restituire 200 OK
# Test WebSocket
npm install -g wscat
wscat -c wss://cryptpad.esempio.com/cryptpad_websocket
# Dovrebbe connettersi senza errori
Ottimizzazione delle Performance
Cache Nginx
# Aggiungere in nginx.conf
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=cryptpad_cache:10m max_size=1g inactive=60m use_temp_path=off;
# Nella configurazione del sito
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
proxy_pass http://127.0.0.1:3000;
proxy_cache cryptpad_cache;
expires 1y;
add_header Cache-Control "public, immutable";
}
Tuning Node.js
# In ecosystem.config.js
env: {
NODE_ENV: 'production',
NODE_OPTIONS: '--max-old-space-size=2048'
}
Congratulazioni! Avete ora un'istanza CryptPad completamente funzionale e sicura. Il vostro team può collaborare su documenti, fogli di calcolo e presentazioni con la certezza che i dati rimangono privati e protetti.
Punti chiave da ricordare:
- Effettuate backup regolari dei dati
- Monitorate i log per attività sospette
- Mantenete il sistema aggiornato
- Testate periodicamente il disaster recovery
- Documentate le personalizzazioni apportate
CryptPad rappresenta un passo importante verso la sovranità digitale e la protezione della privacy. Con questa installazione, avete creato uno spazio sicuro dove il vostro team può lavorare senza compromettere la riservatezza dei dati.
Per supporto e aggiornamenti, consultate la documentazione ufficiale e partecipate alla community su forum.cryptpad.fr.