Está en la página 1de 20

TEMA 6

Nivel de transporte
La función básica de la capa de transporte es aceptar datos de la capa superior,
dividirlos en unidades más pequeñas si es necesario y pasarlos a la capa de red.
Además, si el servicio es Orientado a Conexión, debe asegurar que todos los pedazos
lleguen correctamente al nivel de transporte del receptor.

Otra función de la capa de transporte es establecer y liberar conexiones a través de la


red. En condiciones normales, la capa de transporte crea una conexión de red distinta
para cada conexión de transporte que requiera la capa superior. Sin embargo, si la
conexión de transporte requiere un volumen de transmisión alto, es posible crear
múltiples conexiones de red, dividiendo los datos entre las conexiones para aumentar
el volumen.

Por otro lado, si es costoso crear o mantener una conexión de red, la capa de
transporte puede multiplexar varias conexiones de transporte en la misma conexión de
red para reducir el costo.

En este caso se necesita una manera de saber qué mensaje pertenece a qué conexión.
El encabezado de transporte, es una opción para colocar esta información.

En esta capa se encuentran los protocolos UDP y TCP.

La capa de transporte puede ofrecer dos tipos de servicio:

 Servicio orientado a conexión: Se establece una conexión entre cliente y


servidor antes de proceder a enviar datos. Es un sistema más seguro puesto
que se comprueba que el receptor está disponible antes de transferir la
información. Es el caso de TCP.
 Servicio no orientado a conexión: No se establece ningún mecanismo para
comprobar que el receptor está disponible para recibir la transmisión, sino
que se envían los paquetes 'confiando' en que llegarán al destino. Es un
método más inseguro en tanto en cuanto no se comprueba la disponibilidad del
receptor, pero a cambio es más rápido, puesto que no requiere de
establecimiento de conexión ni confirmación por parte del receptor. Es el caso
de UDP.
Protocolos TCP y UDP
 TCP es un protocolo orientado a conexión diseñado para
proporcionar transporte de datos libre de errores a través de una subred no
libre de errores. TCP acepta bloques de datos de los procesos y aplicaciones de
las capas superiores, los fracciona en bloques de 64 KB, que es el valor de MTU
del protocolo IP, y los envía como datagramas IP independientes. En el destino,
éstos son reensamblados.
Establecimiento de conexiones TCP
TCP establece un mecanismo de conexión conocido como three-way handshake. Dicho
mecanismo se explica en el siguiente esquema gráfico:

El ordenador que desea establecer la conexión (cliente) envía un paquete de


sincronización (un paquete con el bit SYN activo o puesto a 1, que es lo mismo).
El servidor le responde aceptando su sincronización (bit ACK activo) y enviando una
nueva sincronización (bit SYN también activo). Por último el cliente envía un último
paquete ACK de respuesta al servidor. El último paquete es necesario para que el
servidor sepa que el cliente ha recibido su respuesta. Sin este último paso, si se
perdiese la respuesta del servidor, éste podría permanecer eternamente a la
espera de recibir la información del cliente. Sólo cuando recibe el ACK del cliente, el
servidor sabe que el cliente ha recibido su respuesta. En caso contrario la reenviaría.
Tras el establecimiento de conexión ambos hosts pueden intercambiarse la
información. Cuando un host no va a enviar más datos al otro procede a cerrar la
conexión.
Cierre de conexiónes TCP
Para el cierre de conexión se emplea un mecanismo de 4 vías. Esto es debido a que las
conexiones TCP son full-dúplex y deben ser cerradas de forma independiente en cada
sentido.
Cuando un host no va a enviar más datos envía al otro un paquete con el bit de FIN
activo (realmente con el de FIN y el de ACK). El host que ha enviado el paquete con el
FIN se dice que realiza el cierre activo. La otra máquina se da por enterada y responde
con un ACK. En este momento la conexión se dice en half-close (medio cerrada), ya
que el segundo equipo aún podrá enviar datos al primero, pero el primero no podrá
hacerlo hacia el segundo.
NOTA: en este estado half-close el equipo que ha realizado el cierre activo podrá
seguir enviando paquetes de confirmación, pero no enviar datos.
Cuando el segundo host tampoco tiene más datos que enviar, envía un bit de FIN (en
realidad envía un paquete con los bits de FIN y ACK activos. El primer equipo (el que
hizo el cierre activo) responderá ahora con un simple ACK. Se dice que el segundo host
ha realizado el cierre pasivo de la conexión que ahora sí está CLOSE (cerrada).
Estados de un host frente a una conexión TCP

NOTA: En el gráfico anterior no están representados todos los estados, sólo los que se
han considerado más significativos. Por ejemplo, un equipo en el estado FIN_WAIT1
que reciba un FIN del otro extremo pasará al estado CLOSING.
Otro diagrama explicativo de los estados de una conexión TCP sería el que
reproducimos aquí:
 UDP es un protocolo de transporte simple no orientado a la conexión, que
realiza las funciones de interfaz entre las capas superiores y de red. UDP
consigue que cuando un datagrama llega a su destino, se determine a qué
aplicación de las existentes en la máquina se debe entregar la información
contenida en él.
Captura de tráfico de una conexión y desconexión a un sistema de Base de Datos de
MySQL
En la siguiente imagen se aprecian los bits de SYN enviados para iniciar la conexión y
los bits de FIN que indican el fin de la misma. También pueden apreciarse los bits PUSH
para indicar que se procese lo que se ha recibido además de los omnipresentes bits
ACK:

El alumno puede reproducir esta captura conectando al servidor de BD


R2D2.iescierva.net mediante el comando:
mysql -h R2D2.iescierva.net -u alumno -p
usando la password 'alumno' y usando el comando quit para cerrar la conexión.
Comportamiento de TCP y UDP
Se puede modificar el comportamiento de TCP y UDP. En máquinas Windows hay que
modificar valores en el registro.
En Linux se modifican los ficheros situados en /proc/sys/net/ipv4. En estos ficheros los
valores se almacenan en jiffies (centésimas de segundo).

Formato de la cabecera TCP

Puerto origen (16 bits): Es el punto de acceso de la aplicación en el origen.


Puerto destino (16 bits): Es el punto de acceso de la aplicación en el destino.
Número de secuencia (32 bits): Identifica el primer byte del campo de datos. En este
protocolo no se enumeran segmentos sino bytes, por lo que este número indica el
primer byte de datos que hay en el segmento. Al principio de la conexión se asigna un
número de secuencia inicial (ISN, Initial Sequence Number) y a continuación los bytes
son numerados consecutivamente. El primer octeto del campo de datos se identifica
por ISN + 1.
Número de confirmación (ACK) (32 bits): El protocolo TCP utiliza la técnica de
piggybacking para reconocer los datos. Cuando el bit ACK está activo, este campo
contiene el número de secuencia del primer byte que espera recibir. Dicho de otra
manera, el número ACK - 1 indica el último byte reconocido.
Longitud de la cabecera (4 bits): Indica el número de palabras de 32 bits que hay en la
cabecera. De esta manera el TCP puede saber donde se acaba la cabecera y por lo
tanto donde empieza los datos. Normalmente el tamaño de la cabecera es de 20 bytes
por lo que en este campo se almacenará el número 5. Si el TCP utiliza todos los campos
de opciones la cabecera puede tener una longitud máxima de 60 bytes almacenándose
en este campo el valor 15.
Reservado (6 bits): Se ha reservado para su uso futuro y se inicializa con ceros.
Indicadores o campo de control (6 bits): Cada uno de los bits recibe el nombre de
indicador y cuando está a 1 indica una función específica del protocolo.
URG: Hay datos urgentes y en el campo "puntero urgente" se indica el número de
datos urgentes que hay en el segmento.
ACK: Indica que tiene significado el número que hay almacenado en el campo "número
de confirmación".
PSH: Sirve para invocar la función de carga (push). Como se ha comentado
anteriormente con esta función se indica al receptor que debe pasar a la aplicación
todos los datos que tenga en la memoria intermedia sin esperar a que sean
completados. De esta manera se consigue que los datos no esperen en la memoria
receptora hasta completar un segmento de dimensión máxima. No se debe confundir
con el indicador URG que sirve para señalar que la aplicación ha determinado una
parte del segmento como urgente.
RST: Sirve para hacer un reset de la conexión.
SYN: Sirve para sincronizar los números de secuencia.
FIN: Sirve para indicar que el emisor no tiene mas datos para enviar.
Ventana (16 bits): Indica cuantos bytes tiene la ventana de transmisión del protocolo
de control de flujo utilizando el mecanismo de ventanas deslizantes. A diferencia de lo
que ocurre en los protocolos del nivel de enlace, en los que la ventana era constante y
contaba tramas, en el TCP la ventana es variable y cuenta bytes. Contiene el número
de bytes de datos comenzando con el que se indica en el campo de confirmación y que
el que envía está dispuesto a aceptar. Si su valor es cero indica que el receptor no está
en condiciones de aceptar más datos de momento.
Suma de comprobación (16 bits): Este campo se utiliza para detectar errores mediante
el complemento a uno de la suma en módulo 216 - 1 de todas las palabras de 16 bits
que hay en el segmento mas una pseudo-cabecera. La pseudo-cabecera incluye los
siguientes campos de la cabecera IP: dirección IP origen, dirección IP destino, el
protocolo y un campo longitud del segmento. Con la inclusión de esta pseudo-
cabecera, TCP se protege a si mismo de una transmisión errónea de IP. Esto es, si IP
lleva un segmento a un computador erróneo, aunque el segmento esté libre de
errores, el receptor detectará el error de transmisión.
Puntero urgente (16 bits): Cuando el indicador URG está activo, este campo indica cual
es el último byte de datos que es urgente. De esta manera el receptor puede saber
cuantos datos urgentes llegan. Este campo es utilizado por algunas aplicaciones como
telnet, rlogin y ftp.
Opciones (variable): Si está presente permite añadir una única opción de entre las
siguientes:
Timestamp para marcar en que momento se transmitió el segmento y de esta manera
monitorizar los retardos que experimentan los segmentos desde el origen hasta el
destino.
Aumentar el tamaño de la ventana.
Indicar el tamaño máximo del segmento que el origen puede enviar.
Relleno (variable): Para que la cabecera tenga siempre una longitud múltiplo de 32
bits.
Como TCP ha sido diseñado para trabajar con IP, algunos parámetros de usuario se
pasan a través de TCP a IP para su inclusión en la cabecera IP. Por ejemplo: prioridad
(campo de 3 bits), retardo-normal/ retardo- bajo, rendimiento-normal/rendimiento-
alto, seguridad-normal/seguridad-alta y protección (campo de 11 bits)
El funcionamiento y especificaciones de TCP se puede encontrar en el
correspondiente RFC 793.

TCP vs UDP

TCP UDP
Confiable No confiable
No Orientado a
Orientado a Conexión
Conexión
Control de flujo mediante mecanismo de ventana deslizante
No control de flujo
(windowing)
Secuenciamiento No secuenciamiento
ACK no ACK

Definición de puerto TCP/IP

En TCP/IP, el protocolo que usan los ordenadores para entenderse en Internet -y


actualmente casi en cualquier otra red-, el puerto es una numeración lógica que se
asigna a las conexiones, tanto en el origen como en el destino. No tiene ninguna
significación física.
El permitir o denegar acceso a los puertos es importante porque las aplicaciones
servidoras (que aceptan conexiones originadas en otro ordenador) deben ‘escuchar’ en
un puerto conocido de antemano para que un cliente (que inicia la conexión) pueda
conectarse. Esto quiere decir que cuando el sistema operativo recibe una petición a
ese puerto, la pasa a la aplicación que escucha en él, si hay alguna, y a ninguna otra.
Los servicios más habituales tienen asignados los llamados puertos bien conocidos
o wkp (well known ports), por ejemplo el 80 para web, el 21 para ftp, el 23 para telnet,
etc. Así pues, cuando usted pide una página web, su navegador realiza una conexión al
puerto 80 del servidor web, y si este número de puerto no se supiera de antemano o
estuviera bloqueado no podría recibir la página.
Los puertos se dividen en:
Well Known Ports
Los 'puertos bien conocidos' son puertos reservados para los servicios más comunes de
Internet. Comprenden los primeros 1024 puertos, desde el 0 hasta el 1023.
Puertos registrados
Comprenden desde el 1024 (0400 en hexadecimal) hasta el 49151 (BFFF). Algunos
están normalizados (asignados a servicios) y otros aún no.
Puertos dinámicos o privados
Comprenden desde el 49152 (C000 en hexadecimal) hasta el 65535 (FFFF).
Normalmente los usan de forma dinámica las aplicaciones cliente para realizar
conexiones.

Un puerto puede estar:

* Abierto: Acepta conexiones. Hay una aplicación escuchando en este puerto. Esto no
quiere decir que se tenga acceso a la aplicación, sólo que hay posibilidad de
conectarse.
* Cerrado: Se rechaza la conexión. Probablemente no hay aplicación escuchando en
este puerto, o no se permite el acceso por alguna razón. Este es el comportamiento
normal del sistema operativo.
* Filtrado (o Bloqueado o Sigiloso): No hay respuesta. Este es el estado ideal para un
cliente en Internet, de esta forma ni siquiera se sabe si el ordenador está conectado.
Normalmente este comportamiento se debe a un cortafuegos de algún tipo, o a que el
ordenador está apagado.

En una URL (Universal Resource Locator) los puertos se denotan con ‘:’ a continuación
del nombre de la máquina, por ejemplo http://www.alerta-antivirus.es:80/index.html
quiere decir pedir el documento ‘index.html’ mediante http conectándose al puerto 80
de este servidor. Como 80 es el como es el puerto por defecto para http se puede
omitir. Si se pone 'a la escucha' un servicio en un puerto que no sea el suyo por
defecto, será imprescindible indicarlo.

Las aplicaciones de tipo cliente, como un navegador web, un cliente de correo


electrónico, o de chat (IRC) no necesitan tener puertos abiertos, simplemente lanzan
solicitudes a los servidores dirigidas a los puertos correspondientes de dichas
máquinas.

El peligro de tener un puerto abierto

Al fin y al cabo los puertos son puntos de acceso a aplicaciones corriendo en un


ordenador. Aunque en teoría no fuese un problema, estas aplicaciones pueden tener
vulnerabilidades que pueden ser aprovechadas por otros usuarios. Desde el punto de
vista de seguridad, es recomendable permitir el acceso sólo a los servicios que sean
imprescindibles, dado que cualquier servicio expuesto a Internet es un punto de
acceso potencial para intrusos.
También es recomendable el funcionamiento sigiloso para no dar facilidades a los
hackers. Algunos hackers hacen escaneos aleatorios de IPs y puertos por Internet,
intentando identificar las características de los sistemas conectados, y creando bases
de datos con estas. Cuando se descubre una vulnerabilidad, están en disposición de
atacar rápidamente a las máquinas que se sabe que son del tipo vulnerable. Además si
no se responde se frena a los escáneres de puertos, que esperan un tiempo
determinado antes de descartar el intento de conexión.

Socket

A la pareja dirección IP - puerto se le denomina comúnmente socket, un término muy


utilizado en protocolos de red. El puerto puede ser TCP o UDP.
socket = (IP,puerto)
Conexión
En TCP/IP una conexión queda identificada por dos sockets, cada uno de los cuales
identifica a un host de los que interviene en la comunicación.
conexión = (socket1, socket2)

netstat
Detección de 'intrusos' con netstat

Con el comando “netstat” se puede ver el estado de las conexiones de red de un


equipo. Netstat da información acerca de:
 estado de un puerto
 puertos abiertos y direcciones IP que los están empleando
 puertos utilizados por un protocolo concreto
 procesos que usan un determinado puerto.
Uso de netstat: el comando existe para Linux y sistemas Microsoft. Para probarlo
escribe sobre la línea de comandos:
netstat –aon (para Windows)
ó
netstat –apn (para Linux)

La salida del comando netstat muestra información similar a ésta:


Active Connections
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:51134 0.0.0.0:0 LISTENING 3400
TCP 0.0.0.0:51243 0.0.0.0:0 LISTENING 3401
TCP 0.0.0.0:51252 0.0.0.0:0 LISTENING 2740
TCP 25.35.7.128:51243 64.25.167.99:80 ESTABLISHED 3400
TCP 25.35.7.128:51258 63.147.25.37:3306 ESTABLISHED 3838
TCP 127.0.0.1:51542 0.0.0.0:0 LISTENING 1516
TCP 127.0.0.1:51133 127.0.0.1:51134 ESTABLISHED 3400
TCP 127.0.0.1:51134 127.0.0.1:52133 ESTABLISHED 3401
TCP 127.0.0.1:51251 127.0.0.1:52252 ESTABLISHED 2740
TCP 127.0.0.1:51252 127.0.0.1:53251 ESTABLISHED 2740

En la columna PID (identificador de proceso) se saca la información necesaria para


saber qué proceso 'escucha' en cada puerto.
Una vez que tenemos el PID, podemos ver los procesos que están corriendo.con el
comando ps aux. y buscar el PID correspondiente.
En Windows, se hace abriendo el Administrador de Tareas, al que se puede acceder
presionando las teclas CTRL+ALT+DEL de manera simultánea (si no se muestra la
columna PID da un click sobre Ver, Seleccionar Columnas y selecciona PID).
Ejemplo práctico. Supuesto
Por ejemplo podemos encontrarnos que el PID 3400 corresponde a nuestro navegador
de Internet y el PID 2740 corresponde a nuestro cliente de correo. Ambos sabemos
que están siendo ejecutados y que tienen una razón válida para establecer una
conexión a Internet. Sin embargo, si el PID 3838 corresponde (por ejemplo) a un
programa llamado 6r1n.exe, y el PID 1516 corresponde a un programa llamado
buscanv.exe con los cuales no estamos familiarizados, debemos asegurarnos de qué
hacen estos programas.
Sin embargo, el hecho de que no se reconozca el nombre de un programa no quiere
decir que no tenga una razón válida para estar ejecutándose en el sistema. El siguiente
paso será averiguar en Internet qué hacen estos programas.
Siguiendo con nuestro ejemplo, en nuestra búsqueda descubrimos que “buscanv.exe”
debe estar corriendo para el funcionamiento de nuestro programa de antivirus. Por
otra parte encontramos que “6r1n.exe” puede ser un troyano. Viendo otra vez la lista
de resultados del netstat, podemos ver que el puerto asociado con el programa
“6r1n.exe” es el 6667, el cual es un puerto IRC comúnmente utilizado por troyanos
para tener acceso remoto. En este punto, comenzaremos la investigación de métodos
para remover el troyano.

lsof
Aunque el comando lsof muestra la información de los ficheros abiertos (ls open files),
también se puede emplear para tener una idea del número de conexiones establecidas
por un servicio.
Si no has empleado nunca lsof, ejecuta este comando como root en una terminal. Te
sorprenderá la cantidad de ficheros abiertos en el sistema.
Por ejemplo, si queremos saber las conexiones que tiene nuestro servidor web
(Apache normalmente) podemos hacer lo siguiente:
lsof -i TCP:80
La opción -i selecciona los ficheros relacionados con las conexiones que se
especifiquen. Se puede especificar un protocolo, como en el anterior ejemplo, una
dirección ip, un puerto, etc
Haciendo uso del comando wc podemos obtener el número de ficheros abiertos. wc es
un comando para contar líneas, palabras, etc. Para contar líneas se emplea la opción -l:
lsof -i TCP:22 | wc -l
Para hacer seguimiento en tiempo real se puede emplear el comando watch. watch
ejecuta el comando cada cierto tiempo que nosotros le indicamos:
watch "lsof -i TCP:443"

NAT
“NAT” es el acrónimo de Network Address Traslation, o lo que es lo mismo, traducción
de direcciones de red. Es un estándar creado por el IETF que utiliza una o varias
direcciones IP para conectar varios ordenadores a otra red (normalmente a Internet),
los cuales tiene una dirección IP completamente distinta (normalmente una IP no
válida de Internet definida por el RFC 1918). Por lo tanto, se puede utilizar para
dar salida a redes públicas a computadores que se encuentran con direccionamiento
privado o para proteger máquinas públicas.
Una pasarela NAT cambia la dirección origen en cada paquete de salida y,
dependiendo del método, también el puerto origen para que sea único. Estas
traducciones de dirección se almacenan en una tabla, para recordar que dirección y
puerto le corresponde a cada dispositivo cliente y así saber donde deben regresar los
paquetes de respuesta. Si un paquete que intenta ingresar a la red interna no existe en
la tabla de traducciones, entonces es descartado. Debido a este comportamiento, se
puede definir en la tabla que en un determinado puerto y dirección, se pueda acceder
a un determinado dispositivo, como por ejemplo un servidor web, lo que se denomina
NAT inverso o DNAT (Destination NAT).
Debido a la aparición de NAT no ha sido necesario implentar hoy día ipv6.
Funcionamiento
Cuando un cliente en la red interna contacta con un máquina en Internet, envía
paquetes IP destinados a esa máquina. Estos paquetes contienen toda la información
de direccionamiento necesaria para que puedan ser llevados a su destino. NAT se
encarga de estas piezas de información:
 Dirección IP de origen (por ejemplo, 192.168.1.35)
 Puerto TCP o UDP de origen (por ejemplo, 52132)
Cuando los paquetes pasan a través de la pasarela de NAT, son modificados para que
parezca que se han originado y provienen de la misma pasarela de NAT. La pasarela de
NAT registra los cambios que realiza en su tabla de estado, para así poder: a) invertir
los cambios en los paquetes devueltos, y b) asegurarse de que los paquetes devueltos
pasen a través del cortafuegos y no sean bloqueados. Por ejemplo, podrían ocurrir los
siguientes cambios:
 IP de origen: sustituida con la dirección externa de la pasarela (por ejemplo,
80.80.80.80)
 Puerto de origen: sustituido con un puerto no en uso de la pasarela, escogido
aleatoriamente (por ejemplo, 53136)
Ni la máquina interna ni el anfitrión de Internet se dan cuenta de estos pasos de
traducción. Para la máquina interna, el sistema NAT es simplemente una pasarela a
Internet. Para el anfitrión de Internet, los paquetes parecen venir directamente del
sistema NAT; ni siquiera se da cuenta de que existe la estación interna. Por esto se dice
que NAT es ‘transparente al usuario’.
Cuando el anfitrión de Internet responde a los paquetes internos de la máquina, los
direcciona a la IP externa de la pasarela de NAT (80.80.80.80) y a su puerto de
traducción (53136). La pasarela de NAT busca entonces en la tabla de estado para
determinar si los paquetes de respuesta concuerdan con alguna conexión establecida.
Entonces encontrará una única concordancia basada en la combinación de la dirección
IP y el puerto, y esto indica que los paquetes pertenecen a una conexión iniciada por la
máquina interna 192.168.1.35. Acto seguido realiza los cambios opuestos a los que
realizó para los paquetes salientes, y reenvía los paquetes de respuesta a la máquina
interna.
La traducción de paquetes ICMP ocurre de forma parecida, pero sin la modificación del
puerto de origen.
NAT tiene muchas formas de funcionamiento, entre las que destacan:
 NAT estático: Realiza un mapeo en el que una dirección IP privada se traduce a
una correspondiente dirección IP pública de forma unívoca. Normalmente se
utiliza cuando un dispositivo necesita ser accesible desde fuera de la red
privada.
 NAT dinámico: Una dirección IP privada se traduce a un grupo de direcciónes
públicas. Por ejemplo, si un dispositivo posee la IP 192.168.10.10 puede tomar
direcciones de un rango entre la IP 200.85.67.44 y 200.85.67.99.
Implementando esta forma de NAT se genera automáticamente un firewall
entre la red pública y la privada, ya que sólo se permite la conexión que se
origina desde ésta última.
 Sobrecarga: La forma más utilizada de NAT, proviene del NAT dinámico ya que
toma múltiples direcciones IP privadas y las traduce a una única dirección IP
pública utilizando diferentes puertos. Esto se conoce también como PAT (Port
Address Translation - Traducción de Direcciones por Puerto), NAT de única
dirección o NAT multiplexado a nivel de puerto.
 Translate: Cuando las direcciones IP utilizadas en la red privada son direcciones
IP públicas en uso en otra red. El ruteador posee una tabla de traducciones en
donde se especifica el reemplazo de éstas con una única dirección IP pública.
Así se evita los conflictos de direcciones entre las distintas redes.
Existen dos tipos de NAT:
 Source NAT es cuando alteramos el origen del primer paquete: esto es, estamos
cambiando el lugar de donde viene la conexión. Source NAT siempre se hace
después del encaminamiento, justo antes de que el paquete salga por el cable.
El enmascaramiento es una forma especializada de SNAT.
 Destination NAT es cuando alteramos la dirección de destino del primer
paquete: esto es, cambiamos la dirección a donde se dirige la conexión. DNAT
siempre se hace antes del encaminamiento, cuando el paquete entra por el
cable. El port forwarding (reenvío de puerto), el balanceo de carga y el proxy
transparente son formas de DNAT.
En el aspecto de seguridad, NAT presenta los siguientes benefícios:
 Permite un ahorro de direcciones IP válidas. Usando NAT, el ISP puede
suministrar una única dirección IP válida para un cliente, en lugar de tener que
disponer de una cantidad de direcciones para todas sus máquinas.
 Es una alternativa al subnetting. ISPs pueden dar una dirección IP única para sus
clientes, en lugar de tener que crear sub-redes, tarea que complica la
administración, además de desperdiciar direcciones IP (para cada sub-red dos
direcciones IP son desperdiciadas – una dirección que identifica la propia sub-
red, y una dirección de broadcast de sub-red).
 Enmascara las direcciones internas, a las que sólo se puede acceder mediante
NAT, por lo que es sencillo implementar un bastión.
NAT44: es el nombre que se usa para indicar la traducción de una dirección Ipv4 en
otra dirección IPv4, normalmente una IP privada en una pública y viceversa. Además,
como existen 65536 puertos TCP y otros tantos UDP se pueden mapear muchos
sockets (IP+port) IPv4 de una red interna a una misma IP pública. Este enfoque ha
recibido diferentes nombres como: Dirección de red y Traducción de puertos (NAPT),
Traducción de direcciones de puerto (PAT), sobrecarga de direcciones o
enmascaramiento de IP (IP masquerading). Hoy día se considera simplemente parte de
la funcionalidad de NAT44.

Las modificaciones que NAT introduce en el paquete IP son las siguientes:


 Cabecera IP: Además de modificar las direcciones de origen y/o destino el valor
del campo checksum en la cabecera del datagrama cambia y por tanto ha de
recalcularse.
 Cabecera de transporte (TCP/UDP): El campo checksum en la cabecera de
transporte (TCP o UDP) ha de recalcularse, ya que la pseudocabecera incluye
las direcciones IP de origen y destino. Además en el caso de NAPT se ha de
modificar el valor del puerto de origen o destino.
 Mensajes ICMP: Los mensajes ICMP siempre incluyen en la parte de datos la
cabecera a nivel de red y de transporte del paquete IP que originó el mensaje
ICMP. El dispositivo NAT ha de localizar allí la dirección IP y modificarla. En el
caso de hacer NAPT se ha de modificar también el número de puerto TCP/UDP
que aparece en la cabecera embebida.
 Mensajes SNMP. Los mensajes de gestión, que notifican cambios en la situación
de los diferentes dispositivos, suelen llevar en su parte de datos direcciones IP
que el NAT debe localizar y modificar.
Limitaciones de NAT
A medida que aumenta el nivel de sofisticación aumenta como es lógico la complejidad
del NAT. En el caso del NAT o NAPT dinámico el router ha de conservar una
información de estado, ya que ha de mantener control de las conexiones existentes.
Esta información de estado hace más difícil establecer un router de backup ya que esta
información de estado ha de trasladarse a dicho router en caso de caída del principal.
Además el router ha de tomar decisiones respecto a cuando termina una conexión
para liberar la correspondiente entrada en su tabla (la de dirección IP en el caso de
NAT o la de dirección IP y el puerto TCP/UDP en el caso de NAPT). En TCP es fácil
detectar el cierre de la conexión a través de los segmentos que tienen el bit FIN
puesto, pero en UDP no existe un procedimiento explícito de desconexión, por lo que
en estos casos normalmente se fija un tiempo de inactividad a partir del cual una
conexión se considera inexistente, o bien se espera a tener que liberar recursos y
entonces se cierra la conexión que lleva más tiempo inactiva.
Incluso en el caso más sencillo del NAT básico estático se plantean problemas de difícil
solución que hacen que determinadas aplicaciones no funcionen a través de estos
dispositivos. Algunos ejemplos de situaciones en las que el NAT tiene dificultades o no
funciona son las siguientes:
 Protocolo FTP. En el momento de establecer una conexión FTP los hosts
intercambian una serie de mensajes que contienen entre otra información sus
direcciones IP. Lógicamente estas direcciones han de modificarse. El problema
en este caso es que las direcciones no están codificadas en el habitual formato
binario de 32 bits sino como caracteres ASCII. Esto plantea problemas cuando
el número de caracteres de la dirección vieja y la nueva no coincide. Cuando la
nueva dirección es menor, por ejemplo convertir de “200.200.200.1” (13
caracteres) a “192.168.1.1” (11 caracteres) el proceso de traducción puede
optar por rellenar el campo con ceros (“192.168.001.1”) para mantener
constante el número de octetos. Pero cuando la traducción se realiza en
sentido inverso es preciso aumentar en dos octetos la longitud del segmento
TCP correspondiente. Como consecuencia de ello el NAT a partir de ese
momento ha de incrementar en dos octetos los contadores de bytes que
aparecen en los campos número de secuencia y número de ACK para esa
conexión TCP; esto supone que el NAT ha de mantener información de
estado para esa conexión, mientras exista. Incluso podría darse el caso de que
el aumento en dos octetos del segmento provocara la fragmentación del
datagrama correspondiente.
 En general cualquier protocolo del nivel de aplicación que incluya en la parte de
datos información sobre direcciones IP o números de puerto TCP/UDP supone
un reto para un dispositivo que hace NAT, ya que la detección y modificación
de dichas direcciones requiere que el NAT analice y modifique información que
se encuentra en la parte de datos del paquete IP, muchas veces perteneciente
al nivel de aplicación. Algunos ejemplos de esto son los juegos interactivos de
Internet, las aplicaciones tipo emule, etc. Normalmente el funcionamiento de
estas aplicaciones a través de un NAT sólo se consigue cuando el NAT está
especialmente preparado para ello.
 La comunicación de aplicaciones NetBIOS sobre TCP/IP tiene problemas
parecidos a las aplicaciones del apartado anterior: la información sobre
direcciones IP aparece de forma no consistente y con desplazamientos
variables en la información intercambiada por los hosts, lo cual hace difícil que
los NAT las modifiquen; como consecuencia de ello no es posible utilizar TCP
para transportar NetBIOS cuando se atraviesa un NAT.
 IPSec solo puede utilizarse de forma limitada a través de un NAT. Esto se debe a
que IPSec incorpora una cabecera de autentificación (AH, Autentification
Header) que permite al receptor detectar si el paquete IP ha sido modificado en
ruta. Evidentemente la cabecera AH no incluye el campo TTL ni el checksum, ya
que se sabe que estos campos cambian de valor durante el camino de un
datagrama, pero si incluyen las direcciones IP de origen y destino. Como estas
direcciones se modifican en el NAT el receptor cuando comprueba la cabecera
AH detecta que el datagrama ha sido alterado y lo descarta. Cuando se hace
NAT sólo es posible utilizar IPSec en modo túnel y sólo si el túnel se realiza en el
mismo dispositivo que hace el NAT, o después. En estos casos la cabecera AH se
calcula después de haber realizado el cambio de direcciones.
A pesar de todas las limitaciones reseñadas NAT resulta un mecanismo muy útil en un
amplio abanico de situaciones, por lo que es seguro que se seguirá utilizando NAT en
Internet durante bastantes años, al menos hasta que se generalice el uso de IPv6.
NAT en Linux
Linux implementa NAT de forma nativa, es decir, está incorporado como parte del
sistema operativo. Los sistemas Microsoft no lo implementan de forma nativa, sino
que requieren de software externo, con los inconvenientes asociados (compatibilidad,
seguridad, manejo...). Además, Linux maneja el soporte a NAT como un subsistema de
Firewall dentro del kernel, a este se le llama IPTABLES. Linux no necesita capas o
servicios adicionales, debido a esto los firewalls sobre linux son más rápidos y más
seguros que sobre otros sistemas operativos.

Cómo realizar SNAT


En sistemas Linux para hacer SNAT debemos agregar una entrada en iptables. Al estar
netfilter en el propio kernel del sistema operativo el funcionamiento es óptimo.
Para hacer SNAT en la interfaz eth0 (eth0 será la interfaz por el lado de la red privada):
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
En sistemas Windows es mucho más sencillo e intuitivo. No en vano tiene interfaz
gráfica:
En primer lugar debemos acceder al Panel de Control. Si se usa la Vista por Categorías
hay que ir a Rendimiento y Mantenimiento y a las Herramientas Administrativas. Si no
se usa esa vista se puede ir directamente a las Herramientas Administrativas.
Después acceder a Servicios. En la lista que se muestra pulsar sobre Enrutamiento y
acceso remoto y fijar el tipo de inicio a Automático. Pulsar OK o Aceptar para que se
almacenen los cambios.
Cerrar la ventana de Servicios
Abrir el editor de Registro, regedit. Para ello ir al botón Inicio y acceder a Ejecutar. y
escribir la palabra regedit.
Una vez abierto el Editor del Registro debemos acceder a la siguiente ruta: My
Computer > HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Services > Tcpip >
Parameters.
En la lista que se muestra deberá aparecer “IPEnableRouter”. Hacemos doble click
sobre él y modificamos su valor a 1.
El siguiente paso, como no puede ser de otra forma es reiniciar el ordenador.
Una vez que se reinica podemos continuar nuestra configuración: Antes de seguir es
necesario conocer los nombres de las interfaces de red en Windows, ue suelen tener
nombres del tipo: Conexión de Área Local, Conexión de Área Local 2, etc. Para
asegurarnos debemos abrir Conexiones de red.
Abrimos una consola de comandos y tecleamos el siguiente comando para instalar NAT
netsh routing ip nat install
A continuación agregamos la interfaz pública. En nuestro ejemplo suponemos que la
interfaz pública es la Conexión de Área Local 2:
netsh routing ip nat add interface "Conexión de Área Local 2" full
Y agregamos también la interfaz privada:
netsh routing ip nat add interface "Conexión de Área Local" private
Y listo. En poco tiempo y de forma intuitiva tenemos nuestro Windows haciendo NAT.
Además, como en Windows NAT es un módulo aparte, no integrado en el kernel, al
menos hasta las actuales versiones, si el volumen de tráfico es elevado notaremos una
caida de rendimiento de nuestra máquina.

CGN (Carrier Grade NAT) / LSN (Large Scale NAT)


CGN o Carrier Grade NAT es un mecanismo para exprimir aún más las direcciones IPv4
existentes. Podemos encontralo en el RFC 6264 que no está catalogado como un
auténtico estándar sino como informativo para facilitar la transición a IPv6.
Aunque está claro que IPv6 viene a solventar el problema de la escasez de direcciones,
hay un periodo de convivencia de IPv4 e IPv6 que se solventa utilizando ambas pilas de
protocolos (dual stacking). El problema es que emplear ambas pilas de protocolos
requiere tener una dirección IPv4 y otra IPv6 si no en cada PC sí al menos en cada
organización, empresa, domicilio, etc.
En los años 90 y prácticamente en la primera década de este siglo DHCP y CIDR, junto a
NAT, hicieron factible mantener el crecimiento de Internet a pesar de la cada vez más
acauciante excasez de direcciones IPv4.
La idea de CGN es que los usuarios compartan direcciones IPv4 y los operadores de
telefonía (ISPs) lo usan para ahorrar direcciones. Esta es la primera diferencia de
CGNAT con respecto al NAT tradicional: mientras NAT se usaba en la frontera de la
intranet de un cliente con el resto del mundo CGN es implantado dentro de la red del
ISP. Sin embargo CGN tiene numerosos inconvenientes.
Los operadores asignan al cliente una IP pública pero en realidad la 'traducen
mediante NAT a una red interna suya que enrutan hasta Internet a través de sus
intranets. De esta forma pueden asignar a los clientes IPs repetidas.
No hay técnicamente diferencia entre el NAT tradicional y el CGN, salvo el lugar donde
tienen lugar. CGN ha pasado progresivamente a llamarse LSN (Large Scale NAT).
También nos referimos a esta técnica como NAT444 por suponer una doble traducción
de direcciones IPv4.

Puertos más comunes


Los puertos a destacar son:

• 20 FTP: Utilizado por FTP para la transmisión de datos en modo pasivo.
• 21 FTP: Los servidores FTP tienen muchas vulnerabilidades de seguridad conocidas.
Un servidor FTP mal configurado puede permitir a un atacante transferir ficheros,
troyanos, programas, etc…
• 22 SSH: Secure Shell, un sistema de telnet encriptado. Si no está bien configurado
puede permitir ataques por fuerza bruta a la cuenta de administrador de tu sistema.
• 23 Telnet: Telnet proporciona una ventana de comandos para el control remoto de
un sistema. Cualquier sistema que aparente tener una conexión Telnet atraerá sin
duda la atención de cualquier intruso.
• 25 SMTP: Los servidores SMTP (Simple Mail Transfer Protocol) tienen una larga
trayectoria de vulnerabilidades. Cualquier intruso examinará detenidamente este
puerto en tu máquina.
• 53 DNS: Servicio para traducir los nombres de servidores en direcciones IP.
• 59 DCC: Utilizado principalmente en programas de comunicación para transferir
ficheros.
• 67 y 68 DHCP: BOOTP BootStrap Protocol (Server), también usado por DHCP. DHCP
es un protocolo de red que permite a los nodos de una red IP obtener sus parámetros
de configuración automáticamente. Se trata de un protocolo de tipo cliente/servidor
en el que generalmente un servidor posee una lista de direcciones IP dinámicas y las va
asignando a los clientes conforme éstas van estando libres, sabiendo en todo
momento quién ha estado en posesión de esa IP, cuánto tiempo la ha tenido y a quién
se la ha asignado después.
• 69 TFTP: Trivial FTP o Protocolo FTP ligero. Es más rápido que FTP, perotambién más
inseguro.
• 79 Finger: El servicio Finger es una antigua fuente de información en Internet. Se usa
frecuentemente como un punto de comienzo para un ataque, dado que un Finger
algunas veces proporciona al atacante nombres para adivinar contraseñas.
• 80 HTTP: Cada día se descubren nuevos fallos de seguridad en los servidores web. Si
no usas este servicio en tu máquina es aconsejable que lo desactives.
• 88 Kerberos: Este puerto corresponde al servicio de seguridad de Kerberos.
• 110 POP3: Este puerto corresponde al servicio de correo POP3. Como cualquier otro
puerto abierto supone un riesgo, sobre todo si se usa un servidor POP inseguro.
• 113 IDENT: Servicio de Identificación/Autorización - Los servidores de Internet como
POP, IMAP, SMTP e IRC consultan este puerto en respuesta a conexiones de clientes.
Nunca debe estar abierto dado que es una fuente tremenda de escape de información.
Los cortafuegos tradicionales lo mostrarán cerrado; sólo los más nuevos y sofisticados
son capaces de camuflar este puerto contra escaneos aleatorios a la vez que lo
muestran cerrado a las peticiones de los servidores válidos.
• 119 NNTP: Servidor de noticias.
• 135 RPC: Remote Procedure Call. Este puerto imposible de cerrar aparece en la
mayoría de los sistemas Windows. Dado que muchos servicios inseguros de Microsoft
utilizan este puerto, nunca debe permanecer abierto al exterior. Dado que es
imposible cerrarlo, necesitarás un cortafuegos para bloquearlo de los accesos
externos.
• 139 NetBIOS: NetBIOS se utiliza para compartir ficheros a través de tu entorno de
red. Si estás conectado a Internet con este puerto abierto, es probable que estés
compartiendo los datos de todo tu disco duro con todo el mundo. Ciérralo cuanto
antes.
• 143 IMAP: El IMAP (Internet Message Access Protocol) es probablemente el puerto
más escaneado después del 139 (NetBIOS). IMAP es un sistema relativamente nuevo, y
dado que sus servidores no han tenido tiempo para madurar, este puerto abierto en tu
sistema acapara gran atención para los intrusos.
• 161 SNMP: Administración de dispositivos de networking. Muchos dispositivos con
SNMP sólo admiten passwords con caracteres alfanuméricos lo que los convierten en
atractivos para los intrusos. Por otro lado controlar un dispositivo de red puede dar
mucho juego a un asaltante.
• 389 LDAP: Servicio de autenticación LDAP. Tambien puede ser utilizado por
Netmeeting
• 443 HTTPS: La presencia de este puerto de web segura en tu sistema implica que tu
sistema establece conexiones seguras con los navegadores web. Este puerto no
debería estar abierto a menos que realmente lo estés utilizando para comercio seguro
via web.
• 445 MSFT DS: Server Message Block. En Windows 2000, Microsoft añadió la
posibilidad de ejecutar SMB directamente sobre TCP/IP sin la capa extra de NBT.
• 1080 Socks: Servicio de proxy.
• 1433 MS SQL: Base de Datos de Microsoft.
• 1701 L2TP: Layer 2 Tunneling Protocol
• 1723 PPTP: Point-to-Point Tunneling Protocol
• 2049 NFS: Network File Service
• 3128 Proxy: HTTP usado por web caches y por defecto en Squid cache. Squid es un
popular programa de software libre que implementa un servidor proxy y un demonio
para caché de páginas web, publicado bajo licencia GPL. Tiene una amplia variedad de
utilidades, desde acelerar un servidor web, guardando en caché peticiones repetidas a
DNS y otras búsquedas para un grupo de gente que comparte recursos de la red, hasta
caché de web, además de añadir seguridad filtrando el tráfico. Está especialmente
diseñado para ejecutarse bajo entornos tipo Unix.
• 3306 MySQL: Base de Datos MySQL.
• 3389 RDP: Remote Desktop Protocol. Se usa en sistemas Windows para la Conexión a
Escritorio Remoto y ha sido históricamente una gran fuente de problemas de
seguridad para Microsoft.
• 5000 UPnP: El Universal Plug’n'Play es un protocolo de Microsoft para permitir a los
PC’s descubrir y controlar automáticamente un amplio rango de periféricos. Microsoft
ha activado este protocolo por defecto (incluso si tu sistema no lo necesita) y tu
sistema está expuesto a múltiples vulnerabilidades y ataques remotos. Es muy
aconsejable que lo desactives.
• 8080 WebProxy: Se utiliza especialmente para montar un proxy transparente. Este
puerto abierto puede permitir a otras personas utilizar tu ordenador para ocultar su IP
real a los servidores web.

También podría gustarte