rsync sulla VPN: porta del daemon 873 contro modalità SSH
La porta 873 è un servizio interno trasportato dal tunnel, non un suo sostituto. Distingui la modalità daemon da quella SSH, poi apri solo il percorso che usi davvero.
Consentire TCP 873 sull’interfaccia del tunnel non spinge rsync attraverso OpenVPN, e non fa nemmeno accettare il modulo all’estremità remota. Un tunnel trasporta una connessione interna le cui regole di protocollo e destinazione restano esattamente come erano. La prima domanda quindi non è quale porta aprire, ma che tipo di connessione stabilisce rsync. Tutto quanto segue presuppone che il tunnel sia già attivo e che solo il servizio interno sia ancora in dubbio.
Stabilite quale connessione stabilisce davvero rsync
L’argomento remoto del comando di solito risponde a questa domanda prima di qualsiasi modifica al firewall. Un doppio due punti o uno schema URL seleziona il daemon, mentre un solo due punti dopo un nome host seleziona una shell remota. Leggi l’argomento che esegui davvero, non quello dell’esempio nella documentazione.
Un’opzione esplicita di shell remota può cambiare di nuovo la risposta, perché dice a rsync quale programma avviare per il trasporto. Leggi l’intera riga di comando, compresi gli script wrapper ereditati, non solo la parte host.
| Remote argument | What it opens |
|---|---|
rsync://vault.corp.internal/archive/ | rsync daemon, normally TCP 873 |
vault.corp.internal::archive/ | rsync daemon, normally TCP 873 |
[email protected]:/srv/archive/ | Remote shell, normally SSH on its configured port |
Modalità daemon: indirizzo di bind, modulo e porta
Nella sintassi del daemon il segmento di percorso nomina un modulo configurato, non una directory sul disco. La password di un modulo viene controllata solo dopo che la connessione è stata accettata, e il modulo può inoltre essere in sola lettura o nascosto dall’elenco. Quest’ordine conta quando leggi un errore, perché una connessione rifiutata e un modulo rifiutato sono errori in due fasi diverse. Nessuno dei due messaggi ti dice nulla sul tunnel stesso.
Un daemon autonomo può essere fissato all’indirizzo del tunnel nel suo file di configurazione, il che lo tiene fuori dall’interfaccia pubblica senza alcuna regola del firewall. Il valore deve esistere quando il daemon si collega, e un listener attivato da socket o gestito da inetd può ignorarlo del tutto.
address = 10.44.0.1
port = 873
[archive]
path = /srv/archive
read only = yes
Poi prova verso l’indirizzo privato invece del nome pubblico. Un nome host pubblico si risolve in un indirizzo WAN e segue un percorso diverso, anche quando una sola macchina risponde a entrambi.
rsync --list-only rsync://10.44.0.1/archive/
Modalità shell remota: SSH trasporta il trasferimento
Con un solo due punti, rsync avvia un programma di shell remota e parla il suo protocollo su quel canale, quindi l’unico servizio raggiungibile è SSH sulla porta su cui il server è in ascolto. Il daemon di rsync non viene mai eseguito, la porta 873 è irrilevante e la decisione di accesso diventa una decisione di account SSH. Il percorso remoto è allora un vero percorso del file system interpretato dalla shell dall’altra parte. Per questo una modifica del firewall rivolta alla 873 non fa assolutamente nulla per questa modalità.
Quel progetto richiede un account autorizzato e la verifica della chiave host, e eredita la politica di autenticazione propria di SSH. Spesso è la scelta migliore quando il trasferimento deve attraversare una rete non affidabile, perché la cifratura appartiene a un protocollo costruito per questo. Un daemon con richiesta di password non è la stessa cosa.
Apri solo il percorso che hai scelto
Una volta fissata la modalità, consenti l’unico servizio interno sull’unica interfaccia che porta il tunnel. Limita la regola per interfaccia, pool di origine e indirizzo di destinazione, così che una successiva modifica di negazione predefinita non possa allargarla in silenzio. Rivedi poi l’ordine delle regole, perché una regola permissiva più in alto nella catena rende quella stretta solo decorativa.
Se il daemon gira su una macchina dietro il gateway VPN e non sul gateway stesso, il gateway ha bisogno anche di un percorso di inoltro e il target del proprio permesso e della rotta di ritorno. Aprire la porta solo sul gateway produce una connessione che viene accettata e poi non porta da nessuna parte.
Verifica dal client con la stessa modalità e la stessa destinazione che intendi usare in produzione. Un elenco riuscito dimostra insieme il listener, la rotta e la regola; un timeout indica il percorso, e un rifiuto indica il listener.
ufw allow in on tun0 from 10.44.0.0/24 to 10.44.0.1 port 873 proto tcp
ss -ltnp | grep 873