Comment inverser les packages TCP Raw Proxy

Je concevais un système où les périphériques distants envoient en toute security des mises à jour d'état à un server de journalisation central pour l'agrégation. Sur le server, j'utilise la solution Redis + Logstash + Elasticsearch. Les données envoyées au server sont sensibles et doivent être cryptées. Je suis en difficulté pour find un moyen efficace et sécurisé pour «LPUSH» les journaux de la list Redis.

Les périphériques sont actuellement en mesure d'envoyer directement la command Redis directement au port 6379.

"*3\r\n$5\r\nLPUSH\r\n$3\r\nkey\r\n$5\r\nvalue\r\n"

La saisie correcte de la key et de la list est créée dans Redis sur le server.

L'étape suivante consiste à mettre des redis derrière un pare-feu et à chiffrer les packages. Ma tentative actuelle était d'utiliser Apache comme proxy inverse. Un périphérique établit une connection SSL bidirectionnelle avec Apache, puis inversera le proxy des informations décroissantes vers le port 6379 à l'aide de l'interface de bouclage. La connection SSL bidirectionnelle est faite sans problème et un message est transmis à Redis. Malheureusement, ce n'est pas le message envoyé par l'appareil. tcpdump me dit ce qui suit …

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.... 

Comme on peut le voir dans la traduction ASCII, Apache tronque le message au premier CRLF après * 3 et en ajoutant des informations d'en-tête HTTP pour le renvoi, comme cela est supposé. Bien sûr, Redis répond avec une erreur car le message n'est plus formaté à l'aide du protocole de serialization (REEE) de Redis.

1) Existe-t-il un moyen de configurer Apache pour transférer de manière aveugle les packages TCP bruts?

2) Sinon, existe-t-il une solution open source standard pour ce problème?

Merci pour votre time!

2 Solutions collect form web for “Comment inverser les packages TCP Raw Proxy”

Si tout fonctionne, sauf pour les appendices d'Apache vers les en-têtes, vous pouvez les désactiver via mod_headers: http://httpd.apache.org/docs/2.2/mod/mod_headers.html

Bien que mon intuition me dise que Apache + PHP n'est pas une solution optimale, c'était une solution rapide et jusqu'à présent satisfaisante. Apache envoie le message HTTP au script PHP où le post est extrait et renvoyé pour redis à l'aide de l'interface de bouclage. Pour «postrity», j'ai collé une version squelette du script ici.

 <?php $file = fopen("/some/logging.txt","a"); $entityBody = file_get_contents('php://input'); $redisSocket = fsockopen("localhost", 6379, $errno, $errstr, 30); if (!$redisSocket) { fwrite($file, "Error: $errstr ($errno)\n"); } else { fwrite($redisSocket, "$entityBody"); $redisResponse = fgets($redisSocket); if (!$redisResponse) { fwrite($file, "No response from Redis"); } else { fwrite($file, "Redis Response: $redisResponse"); } } ?> 

J'essaie d'éviter de «coller» des choses avec des scripts dans la mesure du possible, mais jusqu'à présent, cela m'a fourni les avantages supplémentaires de me permettre de vérifier datatables d'input pour l'intégrité et de créer des journaux et des réponses personnalisés.

  • Public à IP public
  • Serveur d'access OpenVPN: le sous-réseau distant ne peut pas accéder aux ressources du client
  • Existe-t-il une solution proxy inverse basée sur le cloud dans AWS?
  • Windows 2008, 2 NICS, problème de routing
  • IP publique derrière le pare-feu NAT
  • Transmettre les requêtes Web spécifiques du server Apache vers IIS 7?
  • L'instance d'Openstack ne peut pas atteindre la langue
  • Impossible d'accéder au server sur l'adresse de bouclage, uniquement sur l'adresse privée
  • Les interfaces du routeur réseau "à l'intérieur" et "à l'extérieur" sur le même commutateur et le même réseau
  • Comment accéder au réseau distant avec OpenVPN?
  • Cisco IOS PBR - PBRing Skype
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.