Permitir TCP 873 na interface do túnel não empurra o rsync através de OpenVPN, nem faz com que a outra ponta aceite o módulo. Um túnel transporta uma conexão interna cujas regras de protocolo e de destino continuam exatamente como estavam. Por isso a primeira pergunta não é qual porta abrir, mas que tipo de conexão o rsync estabelece. Tudo o que segue assume que o túnel já está ativo e que apenas o serviço interno continua em dúvida.

Decida que conexão o rsync realmente estabelece

O argumento remoto no comando costuma responder a essa pergunta antes de qualquer alteração na firewall. Um duplo dois-pontos ou um esquema de URL escolhe o daemon, enquanto um único dois-pontos após um nome de host escolhe uma shell remota. Leia o argumento que realmente executa, não o do exemplo na documentação.

Uma opção explícita de shell remota pode mudar novamente a resposta, porque diz ao rsync qual programa lançar para o transporte. Leia toda a linha de comando, incluindo os scripts de envolvimento herdados, não apenas a parte do host.

Remote argumentWhat 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

Modo daemon: endereço de ligação, módulo e porta

Na sintaxe do daemon, o segmento de caminho nomeia um módulo configurado, não um diretório no disco. A senha de um módulo só é verificada depois de a conexão ser aceita, e o módulo pode ainda ser apenas de leitura ou estar oculto da listagem. Essa ordem importa ao ler um erro, porque uma conexão recusada e um módulo rejeitado são falhas em dois estágios diferentes. Nenhuma das duas mensagens lhe diz nada sobre o túnel em si.

Um daemon autónomo pode ser fixado ao endereço do túnel no seu ficheiro de configuração, o que o mantém fora da interface pública sem qualquer regra de firewall. O valor tem de existir quando o daemon se liga, e um ouvinte ativado por socket ou gerido pelo inetd pode ignorá-lo por completo.

address = 10.44.0.1
port = 873
[archive]
    path = /srv/archive
    read only = yes

Depois teste contra o endereço privado em vez do nome público. Um nome de host público resolve-se num endereço WAN e percorre um caminho diferente, mesmo quando uma única máquina responde aos dois.

rsync --list-only rsync://10.44.0.1/archive/

Modo de shell remota: o SSH transporta a transferência

Com um único dois-pontos, o rsync inicia um programa de shell remota e fala o protocolo dele por esse canal, pelo que o único serviço alcançável é o SSH na porta em que o servidor escuta. O daemon do rsync nunca corre, a porta 873 é irrelevante e a decisão de acesso passa a ser uma decisão de conta SSH. O caminho remoto é então um caminho real do sistema de ficheiros interpretado pela shell do outro lado. É por isso que uma alteração de firewall dirigida à 873 não faz absolutamente nada para este modo.

Esse desenho precisa de uma conta autorizada e da verificação da chave do host, e herda a política de autenticação própria do SSH. Muitas vezes é a melhor escolha quando a transferência tem de atravessar uma rede não fidedigna, porque a cifra pertence a um protocolo criado para isso. Um daemon com pedido de palavra-passe não é a mesma coisa.

Abra apenas o caminho que escolheu

Uma vez fixado o modo, permita o único serviço interno na única interface que transporta o túnel. Restrinja a regra por interface, conjunto de origem e endereço de destino, para que uma alteração posterior de negação por omissão não a possa alargar em silêncio. Reveja depois a ordem das regras, porque uma regra permissiva mais acima na cadeia torna a regra estreita apenas decorativa.

Se o daemon correr numa máquina atrás da gateway VPN e não na própria gateway, a gateway também precisa de um caminho de encaminhamento e o alvo precisa da sua própria permissão e rota de retorno. Abrir a porta apenas na gateway produz uma conexão que é aceite e depois não vai a lado nenhum.

Verifique a partir do cliente com o mesmo modo e destino que pretende usar em produção. Uma listagem bem-sucedida prova o ouvinte, a rota e a regra em conjunto; um tempo limite aponta para o caminho, e uma recusa aponta para o ouvinte.

ufw allow in on tun0 from 10.44.0.0/24 to 10.44.0.1 port 873 proto tcp
ss -ltnp | grep 873

Artigos relacionados