Linux Networking: Rendimiento en tiempo real

Transmitiendo en “bits per second: kilobits (kb)”:

Los paquetes pueden variar en tamaño dependiendo de la tecnología y de la Red que se utiliza.

Recibe RX:

RxRate es la tasa a la cual los paquetes son recibidos por el equipo.

RxPkts es el número de paquetes que su equipo ha recibido.

Envía TX:

TxRate es la tasa a la cual los paquetes son enviados por el equipo.

TxPkts es el número de paquetes que su equipo ha enviado.

Ver la tasa RX/TX de una interface en “bits per second”

while [ /bin/true ]; do OLD=$NEW; NEW=`cat /proc/net/dev | grep eth1 | tr -s ' ' | cut -d' ' -f "3 11"`; echo $NEW $OLD | awk '{printf("\rin: % 9.2g\t\tout: % 9.2g", ($1-$3)/1024, ($2-$4)/1024)}'; sleep 1; done

Por favor consultar: commandlinefu

Esenciales

apt-get install vnstat nethogs iftop iptraf

VNstat

Es un monitor de tráfico de red basado en consola. Mantiene un registro del tráfico de red por hora, diario, semanal y mensual para la interfaz seleccionada. Sin embargo, no es un rastreador de paquetes (packet sniffer).

Entonces le decimos a VNstat que empiece a monitorear las interfaces eth0 y eth1:

# WAN - Public Interface
vnstat -u -i eth0

# LAN - Private Interface
vnstat -u -i eth1

NetHogs

Herramienta “net top” para agrupar el tope de ancho de banda por proceso.

NetHogs es una pequeña herramienta ‘top net’. En lugar de presentar el tráfico por protocolo o por “subnet”, más bien agrupa el ancho de banda por proceso. Además no necesita que algún módulo especial del Kernel sea requerido de cargar.

Entonces si de repente hay una gran cantidad de tráfico de red, se puede encender NetHogs para ver inmediatamente que PID lo está causando, también si se trata de algún proceso hilado, hay que traerlo abajo (“kill it”).

apt-get install nethogs

Para agrupar el ancho de banda por procesos en nuestra LAN:

nethogs eth1

iftop

Para visualizar el uso del ancho de banda sobre una interfaz. Con iftop se puede escuchar el tráfico de red en una interfaz dada.

De forma predeterminada, iftop buscará los “hostnames” asociados con las direcciones que encuentre en los paquetes. Esto puede causar mucho tráfico sustancial de sí mismo y resultar en una pantalla confusa, dif’icil de entender. Es posible cambiar este comportamiento usando la opción -n, también pulsando r cuando el programa se está ejecutando.

Por defecto, iftop cuenta todos los paquetes IP que pasan a través del filtro, y la dirección del paquete se determina de acuerdo a la dirección en la que el paquete se mueve a través de la interfaz.

Las posibilidades de uso son muchas:

iftop -i eth0 -P -N

iftop -i eth1 -P -N

iftop -i eth1 -f 'src 192.168.0.20' -P -N'

iftop -i eth1 -f 'dst port 22'

iftop -i eth1 -f 'src 192.168.0.20 and dst port 22'

iftop -i eth1 -f 'src 192.168.0.20 and dst port 22'

iftop -i eth1 -f 'not host 192.168.0.20' -P -N'

iftop -i eth1 -f 'dst port 22 and not host 192.168.0.21'

iftop -i eth1 -f 'dst 192.168.0.1' -P -N'

iftop -i eth1 -f 'src 192.168.0.20 and dst 192.168.0.1' -P -N'

IPtraf

iptraf -i all

iptraf es un monitor de LAN IP basado en ncurses que genera diversas estadísticas de red, incluyendo información TCP, cuentas UDP, información ICMP y OSPF, información de carga Ethernet, estadísticas de nodo, “IP checksum errors”, entre otros.

Desde la terminal se puede correr iptraf sin ninguna opción, funciona en modo interactivo.

Comenzar las estadísticas generales por cada interfaz:

iptraf -g

Permite monitorear el tráfico TCP y UDP en la interfaz especificada:

iptraf -s eth0
iptraf -s eth1

Permite conocer el detalle de la interfaz indicada:

iptraf -d eth0
iptraf -d eth1

Volviendo a VNstat

vnstat

De una interfaz muestra la velocidad de transferencia actual en tiempo real hasta que se interrumpa. Las estadísticas se muestran tras la interrupción:

vnstat -i eth1 -l
vnstat -h

vnstat -d

vnstat -w

vnstat -m

Listar todos los puertos abiertos

netstat -tulpn

Sólo conexiones TCP:

netstat -nat

Sólo conexiones UDP:

netstat -nau

Linux Networking: “Small Office Home Office”

La idea es construir un equipo que pueda manejar lo siguiente:

  • Gateway
  • Firewall

OpenSSH

Lo primero es instalar el cliente y el servidor sshd en nuestro equipo que va a servir como Gateway y Firewall:

sudo apt-get install openssh-client

sudo apt-get install openssh-server

Configuración

Es importante respaldar el archivo de configuración:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original

sudo chmod a-w /etc/ssh/sshd_config.original

Se puede cambiar el comportamiento del Servidor OpenSSH, para ello hay que editar su archivo de configuración

vi /etc/ssh/sshd_config

Pro ejemplo, se puede cambiar y permitir que:

  • El puerto donde puede escuchar sea: Port 2222
  • Permita credenciales de sesión basados en llave pública: PubkeyAuthentication yes
  • Presente el contenido del archivo /etc/issue.net al inicio de sesión: Banner /etc/issue.net

Reiniciar el servicio sshd

Luego de hacer cambios al archivo de configuración de OpenSSH es necesario reiniciar el servidor sshd para que los cambios tengan efecto:

sudo /etc/init.d/ssh restart

Acceso remoto al gateway

Ahora que el servidor está en camino de convertirse en un gateway, es que se puede usar una estación de trabajo desde la Red LAN, usando SSH desde la terminal de Linux, esto para acceder al servidor con el siguiente comando:

  • (ssh) la aplicación.
  • (chaos) un usuario que puede hacer sudo.
  • (@192.168.0.1) el servidor.
ssh chaos@192.168.0.1

NAT Gateway (Network Address Translation)

  • Se puede configurar NAT en un equipo Linux, con iptables.
  • NAT “Network Address Translation” es una técnica para compartir la conexión a Internet con las redes privadas.
  • El sistema funcionará como puerta de enlace y facilitará el acceso a Internet a muchos equipos de la red del área local, mediante una dirección IP única y pública.

Para configurar un NAT en Linux, el equipo con el Gateway debe tener 2 tarjetas de interfaz de red (NICs), se van a necesitar dos conexiones de red y direcciones IP. Una IP para la red privada y otra IP para la red externa y pública.

El equipo donde se configura NAT, actuará como puerta de enlace para la red privada. Esto se puede hacer con el siguiente equipo y requisitos:

  • Linux Dabian/Ubuntu como Sistema Operativo.
  • Tener al menos 2 tarjetas de red (controladores de interfaz de red). Una para conectarse a Internet y la otra para conectarse a la red privada.
  • Con un Kernel que maneje iptables.

Terminología y conceptos:

  • De manera general, las 2 interfaces en cuestión puden ser eth0 y eth1.
  • eth0 -> Interfaz conectada a Internet.
  • eth1 -> Interfaz que se conecta a la red privada.

 Traducción de direcciones de red es el nombre de un equipo que contiene un grupo de IPs válidas, que puede utilizar en las Interfaces de Internet.

Re-escribiendo tráfico

Cada vez que la Red interna quiere ir a la Internet, se asocia una dirección IP válida de la interfaz de Internet con la dirección IP privada del solicitante inicial. Después de eso, todo el tráfico es re-escrito desde la dirección IP pública del NAT hasta la dirección privada del NAT.

Una vez que la dirección IP pública del NAT se convierte inactiva durante una cierta cantidad de tiempo, la dirección IP pública es devuelta, de nuevo a la piscina NAT pública.

NAT tiene un problema una vez que todas las direcciones IP públicas están utilizadas. Por lo que cualquier solicitud privada de servicios de Internet está fuera, hasta que una dirección NAT pública quede libre.

Administrador en esteroides

La razón por la que hemos instalado el servidor sshd es para poder acceder de manera remota mediante SSH a nuestro Router (Gateway y Firewall). También para administrar el sistema, por ejemplo, para instalar paquetes y para aprender los caminos óptimos alrededor del sistema. El modo “sudo”, nos permite iniciar sesión como un usuario administrador, con los permisos necesarios para ejecutar ciertos comandos. Para iniciar sesión en modo sudo se puede hacer lo siguiente:

sudo -i

man interfaces

El archivo /etc/network/interfaces contiene la información de configuración de la interfaz de red para el comando ifup y el comando ifdown. En este archivo se configura cómo el equipos está conectado a la red.

vi /etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# Primary Network Interface (facing the Internet)
auto eth0
iface eth0 inet dhcp

# Secondary Network Interface (facing Local Area Network - LAN)
auto eth1
iface eth1 inet static
address 192.168.0.1
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255

Habilitar enrutamiento IPv4

cp /etc/sysctl.conf /etc/sysctl.conf.original

chmod a-w /etc/sysctl.conf.original

vi /etc/sysctl.conf

Descomentar la línea:

net.ipv4.ip_forward=1

Seguidamente, desde la terminal correr:

sysctl -w net.ipv4.ip_forward=1

Sysadmin script del Firewall

iptables -t filter -L -v --line-numbers
Chain INPUT (policy ACCEPT 77 packets, 6481 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 34 packets, 1930 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 55 packets, 5676 bytes)
num   pkts bytes target     prot opt in     out     source               destination
iptables -t nat -L -v --line-numbers
Chain PREROUTING (policy ACCEPT 3 packets, 233 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 1 packets, 113 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 4 packets, 209 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 6 packets, 329 bytes)
num   pkts bytes target     prot opt in     out     source               destination
iptables -t mangle -L -v --line-numbers
Chain PREROUTING (policy ACCEPT 154 packets, 10695 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain INPUT (policy ACCEPT 120 packets, 8765 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 34 packets, 1930 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 107 packets, 14204 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain POSTROUTING (policy ACCEPT 141 packets, 16134 bytes)
num   pkts bytes target     prot opt in     out     source               destination

Hay muchas formas de implementar un Firewall, el libro “Linux Networking Cookbook” explica una manera simple de hacer uno a la medida, lo cual a veces es más flexible. En este caso, de una manera simple, vamos a usar el software de firewall llamado ufw:

apt-get install ufw

ufw status

Archivos de UFW

/usr/sbin/ufw
UI.

/etc/defaults/ufw
Configuración.

/etc/ufw/before[6].rules
Reglas evaluadas antes de que UI agregue reglas.

/etc/ufw/after[6].rules
Reglas evaluadas después de que UI agregó reglas.

/lib/ufw/user[6].rules
Reglas agregadas por UI (no modificar).

/etc/ufw/sysctl.conf
Parámetros ajustables del Kernel.

/lib/ufw/ufw-init
Script de inicio

Cadenas de UFW

UFW utiliza varias cadenas para ser fácil de usar y flexible. El flujo de control a través de las diversas cadenas sucede de la siguiente manera:

INPUT ->
  ufw-before-logging-input ->
  ufw-before-input ->
    ufw-user-input ->
      ufw-user-logging-input (rule specific) ->
  ufw-after-input ->
  ufw-after-logging-input ->
  ufw-reject-input -> return to INPUT

OUTPUT ->
  ufw-before-logging-output ->
  ufw-before-output ->
    ufw-user-output ->
      ufw-user-logging-output (rule specific) ->
  ufw-after-output ->
  ufw-after-logging-output ->
  ufw-reject-output -> return to OUTPUT

FORWARD ->
  ufw-before-logging-forward ->
  ufw-before-forward ->
    ufw-user-forward ->
      ufw-user-logging-forward (not used) ->
  ufw-after-forward ->
  ufw-after-logging-forward ->
  ufw-reject-forward -> return to FORWARD
iptables -L [chain] -n

Script ufw.sh

vi /root/sysadmin/ufw.sh
#!/bin/bash

/lib/ufw/ufw-init flush-all;

#

ufw disable;
ufw --force reset;

ufw default deny incoming;
ufw default allow outgoing;

ufw logging on;

#

ufw allow in on eth1 from 192.168.0.0/24 to any port 22 proto tcp;

#

ufw --force enable;

#

/sbin/iptables -P FORWARD ACCEPT

/sbin/iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -o eth0 -j MASQUERADE

/sbin/iptables -A ufw-before-forward -o eth0 -d 192.168.0.0/24 -j REJECT
chmod 700 /root/sysadmin/ufw.sh

Reglas de iptables para NAT

vi /etc/rc.local

Antes de exit 0, hay que agregar la siguiente línea:

/root/sysadmin/ufw.sh

Seguidamente, desde la terminal correr:

cd /root/sysadmin/

./ufw.sh

ISC DHCP Server

DHCP (Dynamic Host Configuration Protocol) permite que los dispositivos o equipos de sus clientes puedan solicitar y obtener de un servidor una dirección IP, también muchos otros parámetros más.

DHCP de ISC es una de las aplicaciones para servir DHCP más utilizada en la Internet. El mismo software puede ser utilizado para LAN también. Funciona como una solución estable, de nivel empresarial.

Para instalar el Servidor DHCP:

apt-get install isc-dhcp-server

Configurar la interfaz de red:

cp /etc/default/isc-dhcp-server /etc/default/isc-dhcp-server.original

chmod a-w /etc/default/isc-dhcp-server.original

vi /etc/default/isc-dhcp-server
# DHCP server (dhcpd) serve DHCP requests on:
INTERFACES="eth1"

Para cada “subnet” que va a ser servida, y para cada “subnet” conectada al servidor DHCP, tiene que haber una declaración de “subnet”, que le dice al demonio de DHCP como reconocer que una dirección IP es de una “subnet” en específico. Hay que declarar una “subnet” incluso si no hay direcciones que vayan a ser dinámicas en esa “subnet”.

Por ejemplo, hay opciones globales para cada cliente DHCP en la “subnet” con su respectivo rango. Los clientes que soliciten una dirección, es probable que van a recibir una dirección IP libre dentro de ese rango.

cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.orignal

chmod a-w /etc/dhcp/dhcpd.orignal

vi /etc/dhcp/dhcpd.conf
ddns-update-style none;
default-lease-time 3600;
max-lease-time 7200;
authoritative;
log-facility local7;

subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.11 192.168.0.100;
option routers 192.168.0.1;
option domain-name-servers 8.8.8.8;
}

Reiniciar el servicio de DHCP

service isc-dhcp-server restart

Reiniciar el servicio de Red

service networking restart

Verificar las Interfaces

ifconfig -a
eth0      Link encap:Ethernet  HWaddr 01:23:45:67:87:ab  
          inet addr:192.168.ddd.dd  Bcast:192.168.ddd.ddd  
          Mask:255.255.255.0

eth1      Link encap:Ethernet  HWaddr 01:23:45:67:88:ab 
          inet addr:192.168.0.1  Bcast:192.168.0.255  
          Mask:255.255.255.0

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 01:23:45:67:87:ab brd ff:ff:ff:ff:ff:ff
    inet 192.168.ddd.dd/24 brd 192.168.ddd.ddd scope global eth0

3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 01:23:45:67:88:ab brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.1/24 brd 192.168.0.255 scope global eth1

Depurando progresivamente el Firewall

Estas son algunas pruebas rápidas que se pueden correr para ver la reglas iptables activas del firewall:

iptables -t filter -L -v --line-numbers
iptables -t nat -L -v --line-numbers
iptables -t mangle -L -v --line-numbers

Nmap se puede usar para conocer como se ve el Firewall desde afuera:

apt-get install nmap traceroute
nmap 192.168.0.1

nmap -P0 192.168.0.1

Para ver las conexiones TCP y UDP que están abiertas y escuchando por nuevas conexiones:

netstat -untap

Linux Networking: “Baby steps”

Redes significa: lograr que equipos se comuniquen entre sí. Es algo sencillo de decir, pero no tan fácil de implementar.

Una Red Ethernet en Linux se conforma por las piezas que hacen todo el trabajo: routers, firewalls, switches, cableado, interfaz dehardware y los diferentes tipos de servicios de WAN y de Internet.

Una Red, sea una Red LAN o una Red WAN, puede ser considerada en dos partes: Computadoras y todo lo que va entre las computadoras.

Por el momento nos vamos a centrar en la conectividad: firewalls, puntos de acceso inalámbrico, administración remota segura, asistencia remota técnica, acceso remoto a usuarios, redes privadas virtuales, autenticación, sistemas y supervisión de la red, incluyendo servicios de Voz sobre IP.

En redes se pueden cubrir tareas como: integración de hosts de Windows, enrutamiento, identificación y autenticación de usuario, compartir una conexión a Internet, conexión de sucursales de oficinas, servicios de nombres, conectividad cableada e inalámbrica, seguridad y el seguimiento y la resolución de problemas.

Otros recursos interesantes:

Redes privadas no enrutables

En teoría, cada equipo  o sistemaen la Red necesita un identificador único, tal como, cada equipo o sistema que accesa la Internet va a necesitar una dirección IP única debido al protocolo de la Internet TCP/IP. Al no haber tantas direcciones IP disponibles para nuestros hogares y oficinas, debido a esto, es que existe la solución con Rangos de Redes Privadas que pueden ser usadas en conjunto con “la traducción de direcciones“.

Hay tres bloques de direcciones IP que se reservaron como privados, lo que significa que todos los routers en Internet deben estar configurados para no enrutarlos. Es por eso que a las direcciones privadas también se les llama direcciones “no enrutables” ¿El beneficio? Si los paquetes de sistemas con direcciones privadas no se enrutan entre las redes conectadas a la Internet, entonces muchas redes podrían usar esas mismas direcciones privadas, ya que nunca van a ser descubiertas por las demás direcciones. En otras palabras, estas mismas direcciones privadas pueden ser utilizados por cualquier número de equipos en todo el mundo, al no ser enrutadas, no se descubre que no son únicas.

10.0.0.1 mediante 10.255.255.254

  • 16,777,214 direcciones.
  • 16,777,214 equipos en 1 Red.
  • (10.x.x.x)
  • Usa una máscara de subred 255.0.0.0
  • En primer octeto debe ser el mismo en todos los equipos.
    net mask bits: /8
  • Un rango de direcciones de clase A.

172.16.0.1 mediante 172.31.255.254

  • 1,048,574 direcciones.
  • 65,534 equipos en cada un de las 16 redes posibles.
  • (172.16.x.x hasta 172.31.x.x)
  • Usa una máscara de subred 255.255.0.0
  • Los dos primeros octetos deben ser los mismos en todos los equipos.
    net mask bits: /16
  • Un rango de direcciones de Clase B.

192.168.0.1 mediante 192.168.255.254

  • 65,534 direcciones.
  • 254 equipos en cada una de las 256 redes posibles.
  • (192.168.0 hasta 255.x)
  • Usa una máscara de subred 255.255.255.0
  • Los tres primeros octetos deben ser los mismos en todos los equipos.
    net mask bits: /24
  • Un rango de direcciones de Clase C.
apt-get install ipcalc
ipcalc 192.168.0.0/16
Address:   192.168.0.0          11000000.10101000. 00000000.00000000
Netmask:   255.255.0.0 = 16     11111111.11111111. 00000000.00000000
Wildcard:  0.0.255.255          00000000.00000000. 11111111.11111111
=>
Network:   192.168.0.0/16       11000000.10101000. 00000000.00000000
HostMin:   192.168.0.1          11000000.10101000. 00000000.00000001
HostMax:   192.168.255.254      11000000.10101000. 11111111.11111110
Broadcast: 192.168.255.255      11000000.10101000. 11111111.11111111
Hosts/Net: 65534                 Class C, Private Internet
ipcalc 192.168.0.0/24
Address:   192.168.0.0          11000000.10101000.00000000. 00000000
Netmask:   255.255.255.0 = 24   11111111.11111111.11111111. 00000000
Wildcard:  0.0.0.255            00000000.00000000.00000000. 11111111
=>
Network:   192.168.0.0/24       11000000.10101000.00000000. 00000000
HostMin:   192.168.0.1          11000000.10101000.00000000. 00000001
HostMax:   192.168.0.254        11000000.10101000.00000000. 11111110
Broadcast: 192.168.0.255        11000000.10101000.00000000. 11111111
Hosts/Net: 254                   Class C, Private Internet

Así que si no están enrutadas ¿Cómo acceden a la Internet los equipos que tienen una dirección privada asignada? Ahí es donde la segunda pieza, conocida como la traducción de direcciones, entra en juego. Lo general, es que para acceder todos los equipos de una empresa tendrían que tener asignada una dirección IP pública y enrutable para pasar a través de la Internet. Dado que no hay suficientes direcciones disponibles para esto, las empresas en su lugar asignan direcciones privadas a todos los cientos de equipos dentro de su propia organización, donde todos los equipos comparten una sola dirección “pública” para acceder a los recursos en la Internet.

Claramente, con 254 direcciones posibles (192.168.x.1 a 192.168.x.254) en cada uno de los 256 rangos de direcciones privadas (192.168.0.x hasta 192.168.255.x), utilizar estos rangos es suficiente para la mayoría las pequeñas empresas y para los que quieren jugar con una red en el hogar.

El espacio de direcciones 10.x.x.x se utiliza por organizaciones más grandes, en muchos lugares dispersos. Se hace “subnet” de este gran espacio de direcciones privada, por ejemplo, para que una ubicación tenga un rango de direcciones de 10.3.x.x, otra ubicación va a terner un rango de direcciones 10.4.x.x, y así sucesivamente, en cada ubicación se tiene la capacidad de tener hasta 65.534 equipos. Donde cada ubicación puede aprovechar su espacio de direcciones de “subnet” para sus diferentes departamentos e instalaciones. Por ejemplo, en la ubicación que tiene el espacio de direcciones 10.3.x.x, el departamento de ingeniería tendrá el espacio 10.3.2.x, la contabilidad tendrá el espacio de direcciones 10.3.3.x, y así sucesivamente, donde cada departamento de ser capaz de tener hasta 254 equipos.

Cada uno de los números separados por puntos en una dirección IP se conoce como “octeto“, porque el valor del número (0 a 255) se deriva de ocho bits binarios. Una dirección IP se compone de dos partes:

  • La primera parte de una dirección IP identifica la red donde un equipo está encendido.
  • La otra parte identifica el equipo individual en esa red.

Hay una analogía muy frecuente, comparar una dirección IP a un número de teléfono. La parte de red de la dirección IP es análogo al código de área, y la parte del equipo de la dirección IP es como el número de teléfono de la persona. Todas las personas en la red de la compañía telefónica (en un código de área) tienen el mismo número de código de área, y no hay dos de ellos que vayan a tener el mismo número de teléfono. Por otro lado, dos personas pueden tener el mismo número de teléfono en diferentes partes del país, ya que no están en el mismo código de área (no en la misma red). Es cuando se pone el código de área y número de teléfono de una persona juntos que el número se convierte en uno que es único para todo el país (internetwork). En este contexto, se llama el código de área como prefijo. Con las direcciones IP, la parte de red de una dirección IP es el prefijo.

Puerta de enlace (gateway)

Nos vamos a referir a la interfaz entre la Red LAN y las Redes externas con el “gateway”. Como mínimo, esta puerta de enlace es un router. Podría ser un router dedicado que no hace nada más. Incluso, se le puede agregar un firewall. Aunque es posible que quieran otros servicios como DNS, VPN, puntos de acceso inalámbrico o administración remota. Es muy tentador cargar este equipo con todo tipo de servicios, simplemente porque se puede, pero desde la perspectiva de la seguridad y la administración ágil, lo mejor es mantener el “Internet Gateway” lo más simple posible. No sobre-cargar con servicios Web, Correo, FTP o servidores de autenticación. Hay que intentar mantenerlo simple e inteligente, tan bloqueado o seguro como sea posible.

Internet Gateway

Los routers y los firewalls muchas veces se combinan en el mismo equipo, a esto se le conoce como “Internet Gateway”.

Estrictamente hablando, un gateway mueve tráfico entre las redes que usan diversos protocolos, tales como NETBEUI y TCP/IP, que es algo que vemos con frecuencia. En estos días, significa cualquier equipo de Red que conecta Redes.

Los routers reenvían el tráfico entre redes. Siempre se va necesitar un router entre nuestra LAN y las demás redes. Incluso se puede configurar con detección de intrusos, control de tráfico, proxies, acceso remoto seguro, DNS/DHCP y cualquier otro servicio al gusto, aunque parece una mejor idea, limitar el firewall para que nada más realice:

  • Enrutar.
  • Firewalling.
  • Control de tráfico.

Bastion Host

Otros servicios deben sentarse en equipos separados, detrás del firewall de Internet, aunque, por supuesto, esto depende de lo que se puede o desea hacer. En los negocios pequeños, no es raro que una sólo equipo tiene corriendo una gran cantidad de servicios disponibles. Sin embargo, los riesgos pueden permitir que cualquier intruso pueda llegar a tener una fiesta deliciosa con muchos servicios a explotar. Otro inconveniente podría ser sobrecargar el equipo hasta el punto en que el rendimiento se ve afectado de manera negativa.

Velocidades de la Red

Cuando se habla de velocidades de la Red, a menudo hay confusión entre:

  • Ancho de banda (Bandwidth).
  • Latencia (Latency).
  • Rendimiento (Throughput).

Ancho de banda es capacidad y Latencia es el tiempo de respuesta. “Ancho de banda es el diámetro de la línea de riego. La latencia está esperando a que el agua se salga”.

El Rendimiento es la cantidad de datos transferidos por unidad de tiempo, como 100 kbps. Por lo tanto, se puede decir que el rendimiento es la intersección entre el ancho de banda y la latencia. Muchos factores pueden afectar la latencia, por ejemplo:

  • La velocidad del servidor.
  • Congestión de la red.
  • limitaciones inherente en los circuitos.

El comando ping puede medir la latencia en tránsito, de ida y vuelta (roundtrip):

ping google.com

La clave de la felicidad con iptables

iptables es parte del proyecto Netfilter. Netfilter es un conjunto de “hooks” en el Kernel de Linux que se comunican con la pila de Red. iptables es un comando, también es la estructura de la tabla que contiene los conjuntos de reglas que controlan el filtrado de paquetes.

Los paquetes se pueden filtrar por los campos en los encabezados de los paquetes IP, TCP, UDP y también los ICMP. Por esta razón, una gran cantidad de acciones pueden ser tomadas en cada paquete. La clave de la felicidad con ipatables es la simplicidad. Empezando con lo mínimo necesario para realizar el trabajo y agregar reglas tal como se van necesitando. No es necesario construir grandes edificios con iptables, de hecho es una mala idea al hacer las cosas difíciles de mantener, además de que afectan el rendimiento.

Políticas

Las políticas son las acciones predeterminadas que se aplican a los paquetes que no coinciden con ninguna regla.

Tablas, Cadenas, Reglas

Se incorporan las siguientes tres tablas:

  • filter
  • NAT
  • mangle

La que más vamos a utilizar es la tabla filter, la tabla NAT un poco y es probable que la tabla mangle, no del todo (es para manipulación avanzada de paquetes). Cada tabla contiene una serie de cadenas internas. También se pueden crear cadenas al gusto. Una cadena es una lista de reglas que define las acciones que se aplican a los paquetes,  las reglas dicen ¿qué hacer con los paquetes?. Las reglas finalizan con un objetivo (target) que dice qué hacer con el paquete. Esto se hace con el comando (-j) de salto (jump), con el siguiente ejemplo que permite todo el “loopback traffic” con el objetivo de ACCEPT:

iptables -A INPUT -i lo -j ACCEPT

Una vez que un paquete alcanza el objetivo ACCEPT, ese es el fin del camino, y ya no se camina por más cadenas. Las reglas se pueden correr desde la línea de comando o desde un script. Estoes lo que cada parte de una regla significa:

  • iptables = El comando iptables.
  • Si no espeficira una tabla, se utiliza la tabla por defecto (filter).
  • -A INPUT = Añadir esta regla a la cadena INPUT.
  • -i lo = Aplicar esta regla a los paquetes que van por la interfaz lo.
  • -j ACCEPT = Brincar hacia la cadena ACCEPT, mueve los paquetes a sus destinos finales.

Inspección sobre el estado de los paquetes

iptables hace una inspección sobre el estado de los paquetes, que realiza a través de su mecanismo de seguimiento de conexiones. Por esta razón detecta si un paquete está tratando de iniciar una nueva conexión o si pertenece a una ya existente.

Contexto

Ver los paquetes en el contexto es muy potente, esto permite hacer mucho trabajo con pocas reglas. Si no se están corriendo servicios públicos, de manera fácil, se pueden bloquear todos los intentos externos para crear una conexión, ya que no tienen una razón legítima para intentar una conexión con nosotros. Cuando se corren servicios como SSH, FTP, servidor web y servidor correo, iptables puede permitir sólo el tráfico dirigido hacia los servicios que sí se están corriendo, de esta manera es útil para rechazar el resto. También se puede bloquear todo el tráfico saliente, iniciado desde los servidores, ya que se supone que nuestro servidor responde a intentos de conexión desde el exterior, no los iniciar. Estas cosas serían difíciles de lograr sin la inspección sobre el estado de los paquetes.

iptables se puede extender con la adición al gusto de módulos al kernel, por esta razón las características de iptables pueden variar según la distribución de Linux y por las modificaciones propias de los usuarios administradores. Para ver lo que una instalación puede hacer, por favor compruebe los archivos:

ls -la /boot/config-*

Si no es emocionante la idea de manejar un grupo grande de módulos del kernel (donde iptables puede utilizar nada más unos cuantos), se puede construir un kernel al gusto con las funciones de iptables que se desean.

Tabla filter

Hay tres tablas en iptables. Cualquier regla o cadena que se crea va a ir en una de estas tablas. La tabla filter es considerada la tabla por defecto, y es la que vamos a usar más. Se puede pensar en filter como la porción de firewall de iptables. La tabla filter incorpora las siguientes cadenas:

INPUT
Procesa los paquetes entrantes.

FORWARD
Procesa los paquetes enrutados mediante el anfitrión (host).

OUTPUT
Procesa los paquetes salientes.

Tabla NAT

La tabla NAT se utiliza sólo para cambiar en paquetes el campo de dirección de origen o de destino. Si se tiene una sola dirección IP pública, enrutable frente a una LAN que utiliza direcciones privadas, que es lo común, NAT traduce las direcciones IP de origen en los paquetes salientes a las direcciones públicas.

No importa si se tienen cientos de equipos (hosts) que comparten la conexión, parecerá que todo el tráfico proviene de un único equipo (host). Por otro lado, también es posible utilizar NAT para permitir el acceso a los servicios públicos desde IPs privadas. La tabla NAT incorpora las siguientes cadenas:

PREROUTING
Altera los paquetes entrantes antes de su enrutamiento.

OUTPUT
Altera los paquetes generados localmente antes de enrutarlos.

POSTROUTING
Altera los paquetes después de su enrutamiento.

 Tabla mangle

La tabla mangle permite alterar los encabezados de los paquetes al gusto. Esto tiene una gran cantidad de usos, por ejemplo, algunas ideas:

• Cambie el campo TOS en los paquetes, para QoS (hay mejores maneras para manejar QoS).
• Marcado de paquetes para recopilar estadísticas por: filtrado, logging o enrutamiento.
• “Packet Rate Limit”.

La tabla mangle incorpora las siguientes cadenas:

PREROUTING
Altera los paquetes entrantes antes de su enrutamiento.

OUTPUT
Altera los paquetes generados localmente antes de enrutarlos.

INPUT
Altera los paquetes destinados para el equipo local.

FORWARD
Procesos los paquetes enrutados a través del equipo (host).

POSTROUTING
Altera los paquetes en su salida, después de su enrutamiento.

mangle + NAT + filter

Los paquetes que entran en la Red deben pasar primero a través de la tabla mangle, luego por la tabla NAT, y por último, por la tabla de filter.

Cuando definimos cadenas al gusto, se puede mejorar el rendimiento, ya que los paquetes atraviesan las reglas y cadenas en el orden en que aparecen.

Definir cadenas al gusto permite crear accesos directos (shortcuts), de esta manera podemos hacer brincar los paquetes a las cadenas que deseamos que atraviesen, en lugar de pasar a través de un montón de reglas y cadenas irrelevantes primero. O bien, se pueden ahorrar algunos pasos de configuración mediante la construcción de una cadena al gusto, para utilizarla una y otra vez.