===== Esnifar el flujo de datos en sockets tipo UNIX (Man In The Middle con sockets UNIX) ===== A diferencia de los sockets de red que pueden auditarse fácilmente con herramientas tipo tcpdump, los sockets unix requieren de otro tipo de aplicaciones para ser monitorizados y averiguar qué tipo de datos fluyen a través de ellos. La utilidad "[[http://www.dest-unreach.org/socat/|socat]]", entre muchas de sus posibilidades, facilita la visualización del tráfico que circula a través de los sockets unix. Esta herramienta crea un socket que está bajo su control y lo vincula al socket UNIX original que queremos vigilar. De esa forma, habiendo configurado los clientes para que utilicen el socket de socat de manera previa, se puede visualizar el tráfico sin ningún problema. Es una especie de hombre en el medio con sockets tipo unix. Esta no es la única forma de hacerlo pero tal vez sea la más fácil de implementar sin necesidad de profundizar demasiado en la herramienta. Para el ejemplo usaremos el típico socket PHP-FPM. Como se dijo anteriormente debemos configurar el cliente que utilizará el socket generado por socat, en nuestro caso el servidor web nginx. **Configuración del socket php en Nginx** location ~ \.php$ { try_files $uri =404; #fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass unix:/tmp/socat-listen; # <---------- fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; ... Ejemplo: Interceptando la comunicación entre Nginx y php-fpm por medio del socket ///tmp/socat-listen//. socat -v UNIX-LISTEN:/tmp/socat-listen,mode=777,fork UNIX-CONNECT:/var/run/php5-fpm.sock **Opciones utilizadas en el ejemplo anterior**. * **UNIX-CONNECT** Socket al que conecta, es el socket original el cual se quería auditar. * **UNIX-LISTEN** Escucha y acepta conexiones en ese socket. * **-v** Redirige la información hacia el objetivo y la muestra también en formato texto por la salida estándar. * **mode** Los permisos del socket generado por socat. * **fork** Permite que socat siga mostrando información y no pare después de mostrar la primera transferencia realizada a través del socket. NOTA: Si el contenido manejado por el socket no es texto claro, es útil tener la salida en hexadecimal, para ello podemos utilizar "-x -v".