rsync over de VPN: daemonpoort 873 versus SSH-modus
Poort 873 is een binnendienst die door de tunnel wordt gedragen, geen vervanging ervoor. Onderscheid de daemonmodus van de SSH-modus en open daarna alleen het pad dat je werkelijk gebruikt.
TCP 873 toestaan op de tunnelinterface duwt rsync niet door OpenVPN, en het zorgt er ook niet voor dat de andere kant de module accepteert. Een tunnel draagt een binnenverbinding waarvan de protocol- en bestemmingsregels precies blijven zoals ze waren. De eerste vraag is dus niet welke poort je opent, maar wat voor verbinding rsync maakt. Alles hieronder gaat ervan uit dat de tunnel al actief is en dat alleen de binnendienst nog onzeker is.
Bepaal welke verbinding rsync werkelijk maakt
Het remote-argument in de opdracht beantwoordt die vraag meestal vóór elke firewallwijziging. Een dubbele dubbele punt of een URL-schema kiest de daemon, terwijl een enkele dubbele punt na een hostnaam een remote shell kiest. Lees het argument dat je werkelijk uitvoert, niet dat uit het voorbeeld in de documentatie.
Een expliciete remote-shelloptie kan het antwoord opnieuw veranderen, omdat die rsync vertelt welk programma voor het transport moet worden gestart. Lees de hele opdrachtregel, inclusief geërfde wrapperscripts, niet alleen het hostgedeelte.
| 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 |
Daemonmodus: bindadres, module en poort
In de daemonsyntaxis noemt het padsegment een geconfigureerde module, geen map op de schijf. Een modulewachtwoord wordt pas gecontroleerd nadat de verbinding is geaccepteerd, en de module kan bovendien alleen-lezen of verborgen voor de lijst zijn. Die volgorde is belangrijk als je een fout leest, omdat een geweigerde verbinding en een geweigerde module fouten zijn in twee verschillende fasen. Geen van beide berichten vertelt je iets over de tunnel zelf.
Een zelfstandige daemon kan in zijn configuratiebestand aan het tunneladres worden vastgezet, waardoor hij zonder enige firewallregel buiten de openbare interface blijft. De waarde moet bestaan wanneer de daemon bindt, en een socket-geactiveerde of door inetd beheerde luisteraar kan hem volledig negeren.
address = 10.44.0.1
port = 873
[archive]
path = /srv/archive
read only = yes
Test daarna tegen het privéadres in plaats van de openbare naam. Een openbare hostnaam lost op naar een WAN-adres en volgt een ander pad, zelfs wanneer één machine op beide antwoordt.
rsync --list-only rsync://10.44.0.1/archive/
Remote-shellmodus: SSH draagt de overdracht
Met een enkele dubbele punt start rsync een remote-shellprogramma en spreekt het protocol over dat kanaal, dus de enige bereikbare dienst is SSH op welke poort de server dan ook luistert. De rsync-daemon draait nooit, poort 873 is irrelevant en de toegangsbeslissing wordt een SSH-accountbeslissing. Het remote-pad is dan een echt bestandssysteempad dat door de shell aan de andere kant wordt geïnterpreteerd. Daarom doet een firewallwijziging gericht op 873 voor deze modus helemaal niets.
Dat ontwerp vraagt een geautoriseerd account en verificatie van de hostsleutel, en het erft het eigen authenticatiebeleid van SSH. Het is vaak de betere keuze wanneer de overdracht een onbetrouwbaar netwerk moet oversteken, omdat de versleuteling bij een protocol hoort dat daarvoor is gebouwd. Een daemon met een wachtwoordprompt is niet hetzelfde.
Open alleen het pad dat je hebt gekozen
Zodra de modus vaststaat, sta de ene binnendienst toe op de ene interface die de tunnel draagt. Beperk de regel tot interface, bronpool en bestemmingsadres, zodat een latere standaard-weigering hem niet stil kan verbreden. Loop daarna de regelvolgorde na, want een toestaande regel eerder in de keten maakt de smalle regel decoratief.
Als de daemon op een machine achter de VPN-gateway draait in plaats van op de gateway zelf, heeft de gateway ook een doorstuurpad nodig en heeft het doel zijn eigen toestemming en retourroute nodig. Alleen op de gateway de poort openen levert een verbinding op die wordt geaccepteerd en daarna nergens heen gaat.
Controleer vanaf de client met dezelfde modus en bestemming die je in productie wilt gebruiken. Een geslaagde lijst bewijst de luisteraar, de route en de regel samen; een time-out wijst op het pad, en een weigering wijst op de luisteraar.
ufw allow in on tun0 from 10.44.0.0/24 to 10.44.0.1 port 873 proto tcp
ss -ltnp | grep 873