Estou projetando um sistema em que dispositivos remotos enviam seguramente atualizações de status para um servidor de registro central para agregação. No servidor, estou usando a solução Redis + Logstash + Elasticsearch. Os dados enviados para o servidor são confidenciais e devem ser criptografados. Eu estou lutando para encontrar um meio eficiente e seguro para 'LPUSH' os logs para a lista Redis.
Os dispositivos atualmente são capazes de enviar o seguinte comando Redis diretamente para a porta 6379.
"*3\r\n$5\r\nLPUSH\r\n$3\r\nkey\r\n$5\r\nvalue\r\n"
A chave correta e a entrada da lista são criadas dentro do Redis no servidor.
O próximo passo é colocar os redis atrás de um firewall e criptografar os pacotes. Minha tentativa atual foi usar o Apache como um proxy reverso. Um dispositivo faria uma conexão SSL bidirecional com o Apache e, em seguida, inverteria as informações descriptografadas para a porta 6379 usando a interface de loopback. A conexão SSL de 2 vias é feita sem problemas e uma mensagem é encaminhada para o Redis. Infelizmente não é a mensagem que o dispositivo enviou. tcpdump me diz o seguinte ...
tcpdump -nnXvv -i lo host localhost and port 6379
127.0.0.1.48916 > 127.0.0.1.6379: Flags [P.], cksum 0xfeab (incorrect -> 0x9415),
seq 1:132, ack 1, win 1025, options [nop,nop,TS val 299310518 ecr 299310518],
length 131
0x0000: 4500 00b7 12b7 4000 4006 2988 7f00 0001 E.....@.@.).....
0x0010: 7f00 0001 bf14 18eb ce9c 0f04 e920 abec ................
0x0020: 8018 0401 feab 0000 xxxx xxxx xxxx xxxx ................
0x0030: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx ....*3./.HTTP/1.
0x0040: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx 1..Host:.localho
0x0050: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx st:6379..X-Forwa
0x0060: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx rded-For:.xx.xxx
0x0070: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx .xxx.xxx..X-Forw
0x0080: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx arded-Server:.xx
0x0090: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx .xxx.xxx.xx..Con
0x00a0: xxxx xxxx xxxx xxxx xxxx xxxx xxxx xxxx nection:.Keep-Al
0x00b0: xxxx xxxx xxxx xx ive....
Como pode ser visto na tradução ASCII, o Apache está truncando a mensagem no primeiro CRLF após * 3 e anexando informações de cabeçalho HTTP para encaminhamento, como é suposto. Claro Redis está respondendo com um erro como a mensagem não está mais formatada usando o protocolo Redis Serialization Protocol (RESP).
1) Existe uma maneira de configurar o Apache para encaminhar cegamente os pacotes TCP brutos?
2) Se não, existe uma solução padrão de código aberto para este problema?
Obrigado pelo seu tempo!