# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

Seguridad Unix con TCP Wrappers


Seguridad Unix TCP WrappersEl otro día hablábamos sobre securizar un sistema Linux con iptables y en otro artículo encontrábamos un firewall basado en FreeBSD llamado pfSense. Hoy vamos a ver cómo securizar un sistema Unix (Linux, BSD…) a través de TCP Wrappers,  un buen complemento de iptables. La wikipedia lo define como:

TCP Wrapper (“Envoltorio de TCP”) es un sistema de red ACL que trabaja en terminales y que se usa para filtrar el acceso de red a servicios de protocolos de Internet que corren en sistemas operativos (tipo UNIX), como Linux o BSD. Permite que las direcciones IP, los nombres de terminales y/o respuestas de consultas ident de las terminales o subredes sean usadas como tokens sobre los cuales filtrar para propósitos de control de acceso.

Bien, partimos de la base de que tenemos dos ficheros configurables, /etc/hosts.deny y /etc/hosts.allow. En ellos podemos especificar que IPs, hostnames o redes pueden acceder a determinados servicios del sistema. TCP Wrappers suele venir instalado por defecto en la mayoría de sistemas operativos Unix.

La sintaxis básica de estos ficheros es la siguiente:

daemon : dirección : acción
ó
daemon : dirección

Daemon es el demonio/servicio a filtrar, dirección es la dirección, host o subred y acción si denegamos o aceptamos el acceso. Para saber si un servicio puede ser configurado para filtrado vía TCP Wrappers hay que saber si su binario está enlazado con la biblioteca libwrap.a. Para ello:

# ldd /usr/sbin/sshd | grep libwrap.so
	libwrap.so.0 => /lib/libwrap.so.0 (0x001ce000)

Si la salida es NULL el demonio no está compilado con TCP Wrappers y no funcionará. Si devuelve algo como lo anterior sí que lo está. Vamos a ver entonces unos cuantos ejemplos:

Permitir acceso ssh únicamente a unas IPs

/etc/hosts.allow Permitimos acceso a las IPs 192.168.0.111, 192.168.0.112, 192.168.0.113.

sshd: 192.168.0.111 192.168.0.112 192.168.0.113

/etc/hosts.deny Denegamos al resto.

sshd: ALL

Bloquear todo excepto lo declarado en /etc/hosts.allow

/etc/hosts.allow

sshd: 192.168.0.111 192.168.0.112 192.168.0.113

/etc/hosts.deny Denegamos acceso al resto de servicios excepto SSH a las Ips indicadas. La máquina quedará blindada excepto el acceso SSH a las Ips permitidas:

ALL: ALL

Permitir también el uso de sendmail a una subred y unos hosts concretos

/etc/hosts.allow Permitimos acceso a las IPs 192.168.0.111, 192.168.0.112, 192.168.0.113.

sshd: 192.168.0.111 192.168.0.112 192.168.0.113
sendmail: 10.0.0.0/24 test.com prueba.com

/etc/hosts.deny

ALL: ALL

Permitir todo y bloquear el acceso total a una única IP

/etc/hosts.allow

ALL: ALL

/etc/hosts.deny

ALL: 192.168.0.115

Filtrar y ejecutar un comando tras un intento de acceso

/etc/hosts.allow

ALL: ALL

/etc/hosts.deny

ALL: 192,168.0.115 \
   : spawn (/bin/echo %a desde %h intento acceder a %d >> \
    /var/log/connections.log) \
   : deny

Aquí ya depende todo si queremos aplicar una política restrictiva desde el principio, bloquear todo y a partir de ahí comenzar a abrir servicios a determinadas Ips, rangos o hosts o si por el contrario queremos dejar todo abierto y cerrar servicios a determinadas Ips,etc.

Si os resulta interesante, disponéis de más información en el handbook de freebsd o en Linux about.com. Esta ha sido una mera introducción a TCP Wrappers

Redirigir tráfico entre puertos TCP con tcptunnel


Tcptunnel permite redirigir tráfico desde un puerto TCP a otro, escuchando en el puerto local y redirigiendo todo el tráfico hacia el puerto remoto que le indiquemos.

Tcptunnel puede ser utilizado con protocolos basados en TCP como HTTP, SMTP, POP, IRC, etc. y ha sido probado en GNU/Linux, FreeBSD, Solaris, HP-UX, Windows XP y Windows Server 2008.

Personalmente lo he probado entre dos máquinas CentOS y por el momento ha funcionado de forma correcta. En breve lo usaré en “producción” así que esperaremos a ver que tal. Os dejo unos ejemplos de utilización y su instalación.

Instalación

# wget http://www.vakuumverpackt.de/tcptunnel/tcptunnel-0.2.tar.gz
# tar -xzvf tcptunnel-0.2.tar.gz
# cd tcptunnel-0.2
# ./configure --install-dir=/usr/local/bin
# make
# make install

Ejemplos de uso

En este ejemplo queremos redirigir todo el tráfico SMTP local contra el puerto SMTP de la máquina remota 192.168.0.100:

# tcptunnel --local-port=25 --remote-port=25 --remote-host=192.168.0.100 --stay-alive

En este ejemplo redirigimos el tráfico POP local (puerto 110) contra el puerto 111 del equipo remoto 192.168.0.100:

# tcptunnel --local-port=110 --remote-port=111 --remote-host=192.168.0.100 --stay-alive

En este ejemplo redirigimos el tráfico HTTP local (puerto 80) contra el puerto 80 del equipo remoto 192.168.0.100:

# tcptunnel --local-port=80 --remote-port=80 --remote-host=192.168.0.100 --stay-alive

Modo de uso:

# tcptunnel --help
Usage: tcptunnel [options]

Options:
  --version
  --help               this help

  --local-port=PORT    port to redirect
  --remote-port=PORT   target port
  --remote-host=HOST   target host

  --stay-alive
  --log-to-stdout

Si alguien conoce una forma más óptima de hacerlo, ¡soy todo oídos!

Estadísticas y monitorización de red con IPTraf


IPTraf
IPTraf

IPTraf es un excelente programa (para shell/consola) que permite recopilar estadísticas del tráfico de red en una máquina o LAN y además también permite monitorizar a tiempo real el tráfico de cada una de las interfaces de red del servidor, indicando el tráfico TCP/UDP, nº de paquetes recibidos/enviados, contador de bytes, etc.

Las características de la IPTraf son las siguientes:

  • Monitor de tráfico IP que muestra todo el tráfico IP que pasa a través de tu red, incluyendo información de TCP Flags, contador de paquetes y bytes, detalles ICMP y tipo de paquetes OSPF.
  • Estadísticas generales y detalladas de cada una de las interfaces de red, mostrando tráfico y contador de paquetes IP, TCP, UDP, ICMP, no-IP y otros contadores de paquetes IP, errores de IP checksum, actividad de las interfaces y contador de tamaño de paquetes.
  • Servicio de monitorización de paquetes de entrada y salida TCP y UDP de los puertos de aplicaciones comunes.
  • Estadísticas LAN, hosts activos y sus estadísticas de red
  • Filtros de vista para ver el tráfico de un determinado protocolo (TCP/UDP)
  • Sistema de logs.
  • Soporta interfaces Ethernet, FDDI, ISDN, SLIP, PPP, y loopback
  • Menú interactivo y pantalla completa.

Los protocolos que reconoce son los siguientes:

  • IP
  • TCP
  • UDP
  • ICMP
  • IGMP
  • IGP
  • IGRP
  • OSPF
  • ARP
  • RARP

IPTraf está disponible para descarga en los sistemas de paquetes de las siguientes distribuciones:

Merece la pena probarlo, os va a permitir monitorizar la red del servidor o LAN de una forma muy sencilla y con multitud de información al alcance de un par de teclas.

Diferencias entre protocolos de transporte TCP y UDP


Dentro del Modelo OSI, la capa de transporte (capa 4) tiene como función principal aceptar los datos enviados por las capas superiores, dividirlos en pequeñas partes si es necesario, y pasarlos a la capa de red, también se asegura que lleguen correctamente al otro lado de la comunicación.

Existen dos mecanismos o protocolos dentro de esta capa de transporte, el protocolo TCP (Transfer Control Protocol) y UDP (User Datagram Protocol).

TCP es un protocolo de transporte orientado a conexión, por ejemplo servicios como Telnet, FTP y SSH utilizan el protocolo TCP, ya que están orientados a conexión, la estación de trabajo A y la estación de trabajo B establecen comunicación/conexión. Al establecerse la comunicación entre las dos estaciones de trabajo, se asegura que el flujo de datos entre ellas sea fiable, asegurandose de que los datos llegan correctamente del emisor al destinatario, en el orden estipulado y completos.

Un ejemplo adapatado a la vida real y de forma muy básica de conexión TCP, podría ser la de una llamada telefónica, el sujeto A llama al sujeto B, hasta que B no coge el teléfono, la conexión no es aceptada, y cuando uno de los dos sujetos dice adiós, la conexión se da por finalizada.

UDP por el contrario es un protocolo en el que no hay conexión. Una estación de trabajo A envía datos a la estación de trabajo B de forma unidireccional, no establece previa conexión con ella, por lo que los datos son enviados sin saber si van a ser recibidos correctamente, en orden, completos, etc.

Como podréis imaginar, este protocolo de transporte es muchísimo menos fiable que TCP, suele ser utilizado para aplicaciones de streaming (video o audio) ya que en estas es más importante la recepción rápida de los datos que la verificación de los mismos, lo mismo sucede con los servicios DNS, aplicacion simple de tipo petición/respuesta.

Estas son las diferencias a un nivel muy básico de TCP y UDP, os recomiendo revisar este manual de administración de redes o la familia de protocolos de Internet si queréis profundizar en el tema.