Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Servicios de comunicaciones (i)

1,957 views

Published on

  • Be the first to comment

  • Be the first to like this

Servicios de comunicaciones (i)

  1. 1. Dani Gutiérrez Porset [email_address] <ul><ul><li>Servicios de Comunicaciones (i) </li></ul></ul>
  2. 2. Índice <ul><li>Comunicación entre procesos </li></ul><ul><li>Sockets </li></ul><ul><li>Protocolos y Servicios. Ej. protocolo ftp </li></ul><ul><li>Servidor de comunicaciones </li></ul><ul><li>Comandos gnu de interés </li></ul><ul><li>Comando netcat </li></ul><ul><li>Licencia de uso </li></ul>
  3. 3. Comunicación entre procesos <ul><li>Mecanismos IPC: </li></ul><ul><ul><li>Señales </li></ul></ul><ul><ul><li>Pipes. Named pipes o FIFOs. </li></ul></ul><ul><ul><li>Sockets </li></ul></ul><ul><ul><li>Colas de mensajes (System V y POSIX) </li></ul></ul><ul><ul><li>Semáforos (System V y POSIX) </li></ul></ul><ul><ul><li>Memoria compartida (System V y POSIX) </li></ul></ul>
  4. 4. Sockets <ul><li>Son entidades del S.O. para conexiones y se agrupan en dominios (AF=Address Family): </li></ul><ul><ul><li>Dominio AF_UNIX (Unix Domain socket, UDS o IPC socket) </li></ul></ul><ul><ul><li>Dominio AF_INET </li></ul></ul><ul><li>Protocol family (kernel Linux): </li></ul><ul><ul><li>PF_UNIX: locales, en filesys </li></ul></ul><ul><ul><li>PF_INET: TCP/IP </li></ul></ul><ul><ul><li>PF_PACKET: enlace (nivel 2) </li></ul></ul><ul><ul><li>PF_KEY: IPSec </li></ul></ul><ul><ul><li>PF_NETLINK: config. avanzada de networking </li></ul></ul>
  5. 5. Sockets <ul><li>Dominio AF_UNIX </li></ul><ul><ul><li>Los procesos han de estar en la misma máquina. </li></ul></ul><ul><ul><li>Tipos: </li></ul></ul><ul><ul><ul><li>stream </li></ul></ul></ul><ul><ul><ul><li>datagram </li></ul></ul></ul><ul><ul><li>Son ficheros, ej. al hacer sudo find / -type s -ls aparecen unos cuantos en /var/run utilizados por distintos servicios (xdm, mysql,...). </li></ul></ul><ul><ul><li>También pueden verse con netstat -xapn </li></ul></ul>
  6. 6. Sockets <ul><li>Dominio AF_INET: </li></ul><ul><ul><li>Los procesos pueden estar en distintas máquinas. </li></ul></ul><ul><ul><li>Tipos: </li></ul></ul><ul><ul><ul><li>tcp o stream </li></ul></ul></ul><ul><ul><ul><li>udp o datagram </li></ul></ul></ul><ul><ul><ul><li>raw sockets: empleados para desarrollar nuevos protocolos o hacer uso de funcionalidades internas de los existentes </li></ul></ul></ul><ul><ul><li>Los puertos < 1024 son privilegiados (limitados a root). Ej. $nc -l -p 1023 $Can't grab 0.0.0.0:1023 with bind : Permission denied </li></ul></ul>
  7. 7. Protocolos y Servicios <ul><li>/etc/protocols Ejs. (según IANA): </li></ul><ul><ul><li>Nivel 3: </li></ul></ul><ul><ul><ul><li>ip: 0 </li></ul></ul></ul><ul><ul><ul><li>icmp: 1 </li></ul></ul></ul><ul><ul><ul><li>ipv6: 41 </li></ul></ul></ul><ul><ul><ul><li>ospf: 89 </li></ul></ul></ul><ul><ul><li>Nivel 4: </li></ul></ul><ul><ul><ul><li>tcp: 6 </li></ul></ul></ul><ul><ul><ul><li>udp: 17 </li></ul></ul></ul><ul><ul><ul><li>sctp: 132 </li></ul></ul></ul><ul><ul><li>Encapsulamiento y tunelado </li></ul></ul><ul><ul><ul><li>gre: 47 </li></ul></ul></ul><ul><ul><ul><li>esp: 50 </li></ul></ul></ul><ul><ul><ul><li>ah: 51 </li></ul></ul></ul><ul><ul><ul><li>ipip: 94 </li></ul></ul></ul><ul><ul><ul><li>l2tp: 115 </li></ul></ul></ul>
  8. 8. Protocolos y Servicios <ul><li>/etc/services </li></ul>
  9. 9. Ej. Protocolo ftp <ul><li>2 canales, ambos sobre tcp: </li></ul><ul><ul><li>Canal de comandos. Puerto tcp 21 </li></ul></ul><ul><ul><li>Canal de datos. Puerto tcp dependiente del modo. </li></ul></ul><ul><li>Modos: </li></ul><ul><ul><li>Activo: el cliente abre un puerto aleatorio>1023 y lo envía al servidor junto con su IP para que el servidor empiece la conexión por su puerto 20. Problemático para filtrado por firewall. </li></ul></ul><ul><ul><li>Pasivo: el servidor abre un puerto aleatorio>1023 y lo envía al cliente junto con su IP para que el cliente empiece la conexión. </li></ul></ul><ul><ul><li>Pasivo extendido: sólo envía el puerto, y no la IP del servidor </li></ul></ul>
  10. 10. Ej. Protocolo ftp <ul><li>Securización: </li></ul><ul><ul><li>FTP sobre SSH (secure FTP o FTP/SSH): actuando en modo pasivo, con un cliente ssh que actúe de proxy SOCKS. </li></ul></ul><ul><ul><li>FTP sobre SSL (FTPS) </li></ul></ul><ul><li>Otros no exactamente FTP: </li></ul><ul><ul><li>scp </li></ul></ul><ul><ul><li>sftp </li></ul></ul><ul><li>Otros de intercambio de ficheros: </li></ul><ul><ul><li>webdav </li></ul></ul><ul><ul><li>pando </li></ul></ul>
  11. 11. Servidor de Comunicaciones <ul><li>Un proceso que atiende peticiones de otros procesos, de la misma o de otras máquinas. Ej: netstat -apn </li></ul><ul><li>En cada máquina, interfaces de escucha: </li></ul><ul><ul><li>Sólo local: localhost o 127.0.0.1 </li></ul></ul><ul><ul><li>Sólo por determinadas interfaces: 192.168.3.1 </li></ul></ul><ul><ul><li>Por cualquier interface: 0.0.0.0 o * </li></ul></ul><ul><li>En cada interface de escucha, sockets (Inet o Unix) </li></ul>
  12. 12. Servidor de Comunicaciones <ul><li>Inicio/parada/relectura: </li></ul><ul><ul><li>/etc/init.d/servicio [start|stop|restart|reload|...] </li></ul></ul><ul><ul><li>Automático al arranque de la máquina: /etc/rcX.d/... </li></ul></ul><ul><li>Configuración del servicio </li></ul><ul><ul><li>Mediante uno o varios ficheros que suelen estar en /etc/nombreservicio </li></ul></ul><ul><ul><li>Relectura de la configuración: consiste en hacer que el proceso servidor relea los ficheros de configuración. Posibilidades: </li></ul></ul><ul><ul><ul><li>Reiniciar el proceso (siempre posible): /etc/init.d/nombre_servicio restart </li></ul></ul></ul><ul><ul><ul><li>Recargar la configuración (disponible sólo a veces): /etc/init.d/nombre_servicio reload </li></ul></ul></ul>
  13. 13. Servidor de Comunicaciones <ul><li>Logs del servicio </li></ul><ul><ul><li>Importantes para revisar el funcionamiento normal y el erróneo. </li></ul></ul><ul><ul><li>Puede haber más o menos nivel de detalle </li></ul></ul><ul><ul><li>Suelen estar en /var/log/nombreservicio </li></ul></ul><ul><li>Interfaces a servicios </li></ul><ul><ul><li>Interfaces de usuario: </li></ul></ul><ul><ul><ul><li>Comandos de shell (bash, perl,...) </li></ul></ul></ul><ul><ul><ul><li>Programas con GUI (gtk, qt, UI java, web). </li></ul></ul></ul><ul><ul><li>APIs para lenguajes: C, java, php,... </li></ul></ul>
  14. 14. Comandos gnu de interés <ul><ul><li>ifconfig, route </li></ul></ul><ul><ul><li>brctl </li></ul></ul><ul><ul><li>netstat </li></ul></ul><ul><ul><li>arp </li></ul></ul><ul><ul><li>ebtables, iptables </li></ul></ul><ul><ul><li>ip </li></ul></ul><ul><ul><li>iproute </li></ul></ul><ul><ul><li>dig </li></ul></ul><ul><ul><li>whois </li></ul></ul><ul><ul><li>lynx, wget, curl </li></ul></ul><ul><ul><li>netcat, netcat6, socat </li></ul></ul><ul><ul><li>netsed </li></ul></ul><ul><ul><li>ping, fping, hping2, hping3 </li></ul></ul><ul><ul><li>traceroute, tracepath </li></ul></ul><ul><ul><li>nmap </li></ul></ul><ul><ul><li>tcpdump, wireshark </li></ul></ul>
  15. 15. Comando netcat <ul><li>netcat o nc </li></ul><ul><li>Establece conexiones TCP o UDP, funcionando en modos cliente o servidor. </li></ul><ul><li>Versiones: </li></ul><ul><ul><li>Original (v1.10 de 1996). Es la incluida en Ubuntu. </li></ul></ul><ul><ul><li>GNU (v0.7.1 de 2004). Compatible con la original, con más prestaciones ej. tunneling, y con licencia GPL. </li></ul></ul>
  16. 16. Comando netcat <ul><li>Modo cliente: </li></ul><ul><ul><li>Envía al servidor desde stdin (o redirección con <). </li></ul></ul><ul><ul><li>Presenta en stdout lo que el servidor le devuelva. </li></ul></ul>
  17. 17. Comando netcat <ul><li>Modo servidor (escucha): </li></ul><ul><ul><li>Presenta en stdout (o redirección con >) lo que recibe del cliente. </li></ul></ul><ul><ul><li>Envía al cliente lo que lee de stdin. Redirecciones <: </li></ul></ul><ul><ul><ul><li><fichero: abre la conexión de escucha y lo envía al cliente cuando se conecte. </li></ul></ul></ul><ul><ul><ul><li><fifo: espera a que el fifo tenga algo y entonces abre la conexión (antes no) enviándo el contenido al cliente. Pero no se queda a la espera si se hace: </li></ul></ul></ul><ul><ul><ul><ul><li>mkfifo f; netcat -l -p puerto <f | cat - >f </li></ul></ul></ul></ul><ul><ul><li>Cierra la conexión cuando el cliente la cierra. A diferencia de otras aplicaciones no termina ej. con carácter EOF por stdin </li></ul></ul>
  18. 18. Comando netcat <ul><li>Diferencias con telnet: </li></ul><ul><ul><li>Telnet no puede estar en modo escucha </li></ul></ul><ul><ul><li>Telnet no funciona sobre UDP </li></ul></ul><ul><ul><li>Telnet no transfiere cualquier secuencia binaria porque algunas se consideran como opciones de telnet y se eliminan </li></ul></ul><ul><ul><li>netcat no saca nada por stdout a no ser que se use -v </li></ul></ul>
  19. 19. Comando netcat <ul><li>Usos: </li></ul><ul><ul><li>Talk. Ej. en servidor: nc -vvl -p puerto <fich_banner_inicial </li></ul></ul><ul><ul><li>Envío de ficheros. Ej. con compresión y encriptación: gzip -c fich | openssl enc -des | nc ip puerto </li></ul></ul><ul><ul><li>Ejecutar comandos: </li></ul></ul><ul><ul><ul><li>Modo servidor: cuando alguien se conecta. Ej: nc -l -p puerto -e comando </li></ul></ul></ul><ul><ul><ul><li>Modo cliente: al hacer la conexión. Ej: nc -e /bin/bash ip_srv puerto </li></ul></ul></ul><ul><ul><li>Escaneo de puertos. Ej: nc -zvvw 2 ip 1-1024 2>&1 | grep open </li></ul></ul><ul><ul><li>Captura hexadecimal de comunicación. Ej: nc -v -o captura servidor_mail 25 </li></ul></ul>
  20. 20. Comando netcat <ul><li>Usos: </li></ul><ul><ul><li>Túneles y reenvío de puertos: </li></ul></ul><ul><ul><ul><li>TCP sobre UDP. Lo que se envíe a un puerto TCP va hacia otro equipo sobre UDP: mkfifo /tmp/f nc -l -p p_tcp </tmp/f | nc -u ip p_udp >/tmp/f </li></ul></ul></ul><ul><ul><ul><li>UDP sobre TCP. Lo que se envíe a un puerto UDP va hacia otro equipo sobre TCP: mkfifo /tmp/f nc -l -u -p p_udp </tmp/f | nc ip p_tcp >/tmp/f </li></ul></ul></ul><ul><ul><ul><li>Otros: TCP sobre TCP, UDP sobre UDP </li></ul></ul></ul>
  21. 21. Licencia de uso <ul><ul><li>http://creativecommons.org/licenses/by-sa/3.0/ </li></ul></ul>

×