SSH – Llaves privadas y públicas

Key Authentication

Si un servidor SSH es visible a través de Internet, en lugar de las contraseñas, se recomienda utilizar la autenticación mediante llave pública.

Con la autenticación mediante llave pública, cada equipo tiene una llave privada y cada equipo remoto de confianza una llave pública (un gran número con propiedades particularmente matemáticas).

La llave privada se mantiene en el equipo de confianza desde el cual hacemos ingreso, mientras que la llave pública se almacena en el archivo .ssh/authorized_keys dentro de todos los equipos a los cuales se necesita ingreso para iniciar sesión.

Cuando se ingresa a otro equipo, el servidor SSH utiliza la llave pública para “bloquear” los mensajes de una manera que sólo pueden ser “desbloqueados” con nuestra propia llave privada – esto significa que incluso el atacante más curioso le será muy difícil espiar, o interferir con nuestra sesión.

Passphrase

Como medida de seguridad adicional, los programas SSH pueden almacenar la llave privada en un formato de contraseña-protegida, de modo que si el equipo es robado o quebrantado, se puede tener un tiempo suficiente para desactivar nuestra llave pública, antes de que terceros puedan romper la contraseña e iniciar sesióon utilizando nuestra propia llave privada.

Bruteforce

Las llaves son mucho más difíciles de quebrantar mediante la fuerza bruta, o de suponer contraseñas simples, presentan longitud de llave amplia de la clave.

Key Pairs

La autenticación mediante llaves utiliza “dos llaves”, una llave “pública” que nadie pueda ver, y otra llave “privada” que sólo cada propietario pueda ver. Para lograr una comunicación segura con otro equipo, mediante la autenticación basada en llaves, se debe crear una llave pública para cada equipo que se necesite acceder, de la misma manera se debe copiar de manera segura la llave pública que le vamos a confiar.

mkdir ~/.ssh

chmod 700 ~/.ssh
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -P "" -q
-f

Define el nomnbre de archivo de la llave.

-q

Genera las llaves en silencio.

-P

Proporciona la contraseña-protegida vieja.

Transferir la llave cliente al equipo

La llave que hay que transferir al otro equipo de confianza es la llave pública. Si podemos ingresar a otro equipo a través de SSH mediante una contraseña, entonces sí se puede transferir nuestra clave RSA desde nuestro propio ordenador:

ssh-copy-id user@example
ssh-copy-id -i ~/.ssh/id_rsa.pub user@example.com

Si el directorio ~/.ssh sí existe en el equipo remoto:

cat ~/.ssh/id_rsa.pub | ssh user@example.com 'cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys_original_backup; cat >> ~/.ssh/authorized_keys'
cat ~/.ssh/id_rsa.pub | ssh user@example.com 'cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys_original_`date +%F_%T | sed 's/[:-]/_/g'`; cat >> ~/.ssh/authorized_keys'

Si el directorio ~/.ssh no existe en el equipo remoto:

cat ~/.ssh/id_rsa.pub | ssh user@example.com 'mkdir ~/.ssh; chmod 700 ~/.ssh; cat >> ~/.ssh/authorized_keys'

Una vez que hay confianza en la autenticación mediante llaves los comandos como: ssh, rsync y scp se pueden usar con o sin el archivo de identidad o llave privada.

SCP

scp ~/scp.txt user@example.com:~/scp.txt
scp ~/scp.txt user@example.com:~/scp.txt_`date +%F_%T | sed 's/[:-]/_/g'`
scp -o IdentityFile=/home/user/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ~/scp.txt user@example.com:~/scp.txt
scp -o IdentityFile=/home/user/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ~/scp.txt user@example.com:~/scp.txt_`date +%F_%T | sed 's/[:-]/_/g'`

SSH

ssh user@example.com 'ls -la ~/'
ssh -i /home/user/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null user@example.com 'ls -la ~/'

RSYNC

Las opciones SSH son esenciales para correr Rsync en silencio:

rsync --timeout=30 -q -e "ssh -i /home/user/.ssh/id_rsa -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null" ~/rsync.txt user@example.com:~/rsync.txt_`date +%F_%T | sed 's/[:-]/_/g'`

El fin

ssh user@example.com 'rm -rf ~/scp.txt*; rm -rf ~/rsync.txt*; ls -la ~/'

Linux networking – Descubriendo vecinos en la red

arp-scan -I eth1 192.168.0.0/24 10.0.0.0/8
nmap -sP 192.168.0.0/24 10.0.0.0/8
fping -g -r1 -s 192.168.0.0/24
arp-scan --interface=eth1 --localnet
for ip in $(seq 1 254); do ping -c1 -w1 192.168.0.$ip &>/dev/null; [ $? -eq 0 ] && echo "192.168.0.$ip"; done
for ip in 192.168.0.{1..254}; do if ping -c1 -w1 $ip &>/dev/null; then echo $ip; fi done

LAN IP

hostname -Iip
ifconfig | grep 'eth0' | tr -s ' ' | cut -d ' ' -f5
ifconfig | grep 'eth1' | tr -s ' ' | cut -d ' ' -f5
cat /sys/class/net/eth0/address
cat /sys/class/net/eth1/address

Router

netstat -r
route -n
traceroute -m 1 -N 1 1.2 | grep ms | perl -nle'/\((\S+)/&&print$1' | tr -d \)

Por favor consulte:

Linux Networking: Lo que sucede en la Red

“Siempre hay que guardar los registros para que otros también puedan interpretar los reportes tal y como los vimos.”

Probando la conectividad con ping

No es un secreto que ping es la herramienta número uno para comprobar la conectividad.

ping -c3 scanme.nmap.org

Se recomienda no bloquear los siguientes mensajes:

  • echo-request
  • echo-reply
  • time-exceeded
  • destination-unreachable

Algunos administradores de sistemas bloquean los mensajes de ping en sus firewalls, y este es un error y un problema porque la mayoría de las funciones de las redes ocupan que al menos estos 4 mensajes operen de manera adecuada.

Perfile y compare la red con FPing y Nmap

Primero descubramos todos los hosts de la red, los que conforman la subred:

arp-scan -I eth0 192.168.0.0/24 10.0.0.0/8

nmap -sP 192.168.0.0/24 10.0.0.0/8

Seguidamente podemos establecer la línea base de rendimiento de la red mediante ping, lo cual es útil para tener con que comparar al momento de tratar de encontrar soluciones a problemas de rendimiento. Muchas de estas características se pueden automatizar con ping, con un script que reporte el rendimiento de toda una subred.

Por favor consulte:

fping -c1 -sdg 192.168.0.0/24 2>&1 | egrep -v "ICMP|xmt"

Encontrando IPs duplicadas

arping -c5 -D 192.168.0.1

arping -c5 -D 192.168.0.15

arping también es esencial para ver si un host se encuentra arriba cuando ping falla, pero usar arping no va a funcionar cuando ping se encuentre bloqueado.

Pruebas de latencia y rendimiento HTTP

httping -c5 -g scanme.nmap.org

httping -c5 -Gg scanme.nmap.org

httping -c5 -h scanme.nmap.org -p 80

httping -c5 -Gsbrg scanme.nmap.org

Escarbando y localizando los problemas de red

Si existe un problema tratando de alcanzar algún host o equipo en la red y además ping lo confirma, hay que imaginar que deben de haber varios routers entre nosotros y el problema, por esta razón es que es necesario escarbar un poco más, gracias a la bondad esto se puede hacer con:

traceroute scanme.nmap.org

traceroute -n scanme.nmap.org

traceroute -q5 -w1 scanme.nmap.org

Traceroute significa seguir la ruta de los paquetes desde una IP de la red en su camino hacia un host determinado. Utiliza el tiempo de vida (TTL) del protocolo IP e intenta provocar una respuesta ICMP TIME_EXCEEDED para cada puerta de enlace a lo largo de la ruta necesaria para llegar al host destino.

Si por alguna razón traceroute no funciona sobre la Internet, ya que algunos routers pueden estar programados para ignorar datagramas UDP. Por esta razón, si vemos muchos “timeouts”, podemons intentar con la opción -I, le dice a traceroute que envíe peticiones ICMP ECHO en lugar de peticiones TCP SYN.

También se puede usar tcptraceroute, el cual envía paquetes TCP SYN en lugar de paquetes UDP o paquetes ICMP ECHO. Estos son más propensos a pasar a través de firewalls, y van a ser menos ignorados por routers. Una vez que el host responde, tcptraceroute envía TCP RST para cerrar la conexión, por lo que el “TCP three-way handshake” nunca es completado. Este es igual a las opciones (-sS) de exploración medio-abierta utilizada por Nmap.

Como alternativa, también se puede usar tcptraceroute:

tcptraceroute scanme.nmap.org

Cuando se inicia mtr, investiga la conexión de red entre el host donde se corre mtr y el host destino HOSTNAME. Lo que hace es enviar paquetes con un TTL bajo, entonces continúa enviando paquetes con un TTL bajo, considerando el tiempo de respuesta de los routers intermedios. Esto le permite a mtr desplegar el porcentaje de respuesta y los tiempos de respuesta de la ruta vía internet hacia nombre el host destino HOSTNAME. Por lo tanto, un aumento repentino en la pérdida de paquetes o en el tiempo de respuesta, a menudo es una indicación de problemas de sobrecarga en un enlace.

mtr scanme.nmap.org

mtr -n scanme.nmap.org

mtr -c60 scanme.nmap.org

Debido a que mtr puede generar una gran cantidad de tráfico de red, se recomienda no dejarlo corriendo de manera indefinida.

Entonces si un router se presenta caido de manera constante, o si mtr consistentemente muestra más de un 5 por ciento en la pérdida de paquetes o largos tiempos de tránsito en el mismo router, entonces es seguro decir que ese router en particular tiene un problema. Si se trata de un router que podemos controlar, entonces hay buenos motivos para intentar arreglarlo. Si no es así, entonces podemos usar dig o whois para averiguar a quién pertenece, incluso para avisarles sobre el problema por si no se han dado cuenta.

Linux Networking: Pruebas y seguimiento de cableado

“No importa cuántas certificaciones puedas tener, no importa qué tan avanzado seas en ingeniería de alto nivel, nunca te vas a escapar de hacer cableado para Redes.”

Hay todo tipo de herramientas interesantes para realizar pruebas con el cableado, usando pequeños aparatos de bajo costo:

Recursos y herramientas básicas para cableado:

  • Cable para LAN, se recomienda Cat5e.
  • Conectores RG45.
  • Martilla cables (Punch Down Tool, 110 Blade).
  • Patrón B cuando se martilla-perfora el cable.
  • Tijeras de electricista.
  • Crimpadora (Crimper).
  • Para probar los cables (Patch Cable Tester).

Posición de cables en “Patch Cable”:

  • Naranja/Blanco, Naranja
  • Verde/Blanco, Azul
  • Azul/Blanco, Verde
  • Café/Blanco, Café
T568B

T568B

Linux Networking: “three-way handshake”

Para establecer una conexión, TCP utiliza lo que se conoce como negociación en tres pasos (three-way handshake). Antes de que un cliente intente conectar con un servidor, se necesita que el servidor este escuchando por conexiones en un puerto que se encuentre abierto para ello, esto se llama una apertura pasiva (passive open), se debe verificar que el servidor-destino ofrezca el servicio activo y esté aceptando peticiones en el número de puerto que el cliente intenta usar para la sesión. Una vez que se establece la apertura pasiva, un cliente puede iniciar una apertura activa (active open).

Al establecer una negociación en tres pasos ocurre lo siguiente:

  • SYN: La apertura activa es iniciada por el cliente que envía un SYN al servidor. El cliente establece el número de secuencia del segmento a un valor al azar A.
  • SYN-ACK: En respuesta, el servidor responde con un SYN-ACK. El número de acuse de recibo se fija a uno más que el número de secuencia recibido, por ejemplo, A+1 y el número de secuencia que el servidor elige para el paquete es otro número aleatorio, por ejemplo, puede ser B.
    En caso de que el servidor no se encuentre escuchando en ese puerto, se puede regresar al cliente un paquete de respuesta con el bit RST activado, lo que significa el rechazo del intento de conexión.
  • ACK: Por último, el cliente envía un ACK de regreso al servidor. El número de secuencia se fija al número de acuse de recibo A+1 y el número de acuse de recibo se fija a uno más que el número de secuencia recibido es decir, B+1.

Establecimiento de conexión

Alcanzada esta fase, tanto el cliente como el servidor reconocen la conexión.  Se puede decir que:

  • Las fases 1, 2 establecen el parámetro de conexión (número de secuencia) para una dirección y se reconoce el acuse de recibo.
  • Las fases 2, 3 establecen el parámetro de conexión (número de secuencia) para la otra dirección y se reconoce el acuse de recibo. Con esto es que se establece una comunicación conocida como “full-duplex”.
sudo wireshark&

De la misma manera se puede usar (es mejor crear un grupo y darle sus permisos necesarios):

gksu wireshark

Seguidamente seleccionar la interface, empezar a capturar y luego ingresar el siguiente filtro:

(ip.dst == IP_EXTERNA && ip.src == IP_LOCAL) || (ip.dst == IP_LOCAL && ip.src == IP_EXTERNA) && tcp.port == 80

Usar tcpdump es un poco más divertido:

tcpdump -i eth1 -nN -c 15 ‘(tcp) and (((src host IP_LOCAL) and (dst host IP_EXTERNA)) or ((src host IP_EXTERNA) and (dst host IP_LOCAL))) and (port 80)’

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.

La vida era más linda en el Kinder

Primero que todo, este tipo de conceptos es esencial para personas que desean penetrar sus propios sistemas de defensa, con el objetivo de analizar, medir y mejorar sus propias infraestructuras de información y comunicación. De acuerdo a la ley no es recomendable realizar este tipo de comprobaciones contra terceros (aparatos, personas, corporaciones, estado) porque se les hace perder credibilidad y dinero, lo cual va a poner muy felices a sus abogados, equipos de seguridad y “guardaespaldas”.

DoS = “Denegación de Servicio”

Esto funciona más o menos así: Al entrar en una Página Web en la Internet, usted está enviando una solicitud a un Servidor, una infraestructura que probablemente puede manejar cierta cantidad de solicitudes a la vez, así que si usted envió más que una solicitud (de manera rápida, desde diversas partes, muchas a la vez y en grandes tamaños de paquetes) eso puede quebrantar un Servidor, y eso es lo que se conoce como “Denegación de Servicio”.

DDoS = “Denegación de Servicio Distribuido”

Por lo tanto, si usted desea realizar un programa (bot) DDoS, es bastante curioso analizar y medir su comportamiento en una Red local hecha por usted mismo, sin afectar a nadie que se pueda enfadar por tu espíritu de investigación e innovación (entender cómo funcionan y se previenen este tipo de “ataques maliciosos”). Los expermientos más interesantes de comprender son los que operan desde diversas máquinas huéspedes (hosts), por ejemplo, para afectar de manera simple el ancho de banda de un Servidor. Pero esto es un universo… hay muchas, muchas, muchas otras maneras de realizar pruebas del tipo “Denial of Service”, por ejemplo:

Sino me equivoco, creo que hasta ahora, no hay una solución específica para prevenir los ataques DoS/DDoS, pero lo que se puede hacer, es contar con un equipo IT consciente de la detección y la respuesta adecuada ante este tipo de “cosas de niños”, afinando de manera constante un firewall “de gran alcance” .

La vulnerabilidad no es una bendición

Ahora sí, busque en Google más información sobre esto, es realmente muy interesante.

Temperaturas, velocidades y voltajes

Con lm-sensors es posible vigilar de manera automática la temperatura de la CPU y otras temperaturas del sistema, las velocidades de los ventiladores y también los voltajes adecuados.

Instalación

apt-get install lm-sensors

Detección

sensors-detect

Verificar o agregar los módulos detectados anteriormente:

vi /etc/modules

Insertar los nuevos módulos en el Kernel:

service module-init-tools restart

Monitoreo automático con Monit

De esta manera resulta util tener “scripts” simples que verifiquen, por ejemplo, la temperatura de los Procesadores:

vi /etc/monit/conf.d/sensors.conf

check program core_0_temperature with path "/PATH/sensor-core-0.sh"
        group temperature
        if status > 75 then alert

check program core_1_temperature with path "/PATH/sensor-core-1.sh"
        group temperature
        if status > 75 then alert

Bash Scripts (chmod 500)

vi sensor-core-0.sh

#!/bin/bash

temperature=$(sensors | grep "Core 0" | awk '{printf ("%d",  $3)}')

#echo $temperature

exit $temperature

vi sensor-core-1.sh

#!/bin/bash

temperature=$(sensors | grep "Core 1" | awk '{printf ("%d",  $3)}')

#echo $temperature

exit $temperature

De la misma manera se puede vigilar la velocidad de los ventiladores y también ciertos voltajes esperados.

Introducción a IPTables

Linux Journal: Linux viene con un potente firewall incorporado, aunque su interfaz puede ser un poco intimidante. Este es el primer paso para dominar las funciones básicas y no tan básicas de IPTables para ir creando un Servidor seguro.

Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento. Netfilter es también el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux.

Prevención contra escaneos y tráfico sospechoso

No es necesario ser totalmente paranoico

Prohibir una dirección IP es un beneficio limitado por:

  • Una IP puede ser suplantada de manera fácil.
  • Las IPs no son identificadores únicos, la mayoría de ISPs usan DHCP, por lo que se podría prohibir tráfico legítimo también.
  • Una nueva IP es fácil de obtener.
  • Muchos escáneres vienen de máquinas comprometidas (parece descuidado utilizar una dirección IP real para escanear).
  • Muchas IPs son compartidas. Por ejemplo, una dirección IP pública puede ser compartida por una gran organización o por una institución educativa, por lo que una vez más se podría bloquear tráfico legítimo.
  • Las listas negras de IPs muchas veces dañan más al tráfico legítimo que “los crackers”.

psad es la colección de tres “procesos demonio” (dos demonios principales y un demonio ayudante) que analizan los mensajes de registro (logs) de iptables para detectar escaneos de puertos y tráfico sospechoso.

  • /usr/sbin/fwcheck_psad
  • /usr/sbin/psad
  • /usr/sbin/psadwatchd

Una implementación común consiste en ejecutar psad para gestionar ciertas reglas de respuesta en el “Firewall”.

PSAD (Port Scan Attack Detector) es una herramienta util para detectar diversos tipos de tráfico sospechoso, incluyendo scaneo de puertos con herramientas como nmap, ataques DDos y otros esfuerzos utilizando fuerza bruta contra ciertos protocólos del sistema. Analizando los archivos de registro (logs), psad no sólo reconoce ciertos patrones de ataque, también gestiona adecuadamente ciertas reglas del “Firewall” para responder correctamente contra actividades sospochosas.

Detección y respuesta contra ataques

Cobertura significativa sobre psad, incluyendo un análisis completo de sus capacidades de análisis de logs de iptables y su capacidad para interactuar con software de representación gráfica como AfterGlow y Gnuplot, se puede encontrar en el libro “Linux Firewalls: Attack Detection and Response with iptables, psad, and fwsnort.”

Instalación

wget http://www.cipherdyne.org/psad/download/psad-VERSION.tar.gz

tar -xvzpf psad-VERSION.tar.gz

cd psad-VERSION

./install.pl

iptables -A INPUT -j LOG

iptables -A FORWARD -j LOG

En caso de usar UFW:

/sbin/iptables -I ufw-before-input -j LOG --log-level warning

/sbin/iptables -I ufw-before-forward -j LOG --log-level warning

Archivo de configuración

vi /etc/psad/psad.conf

Para ignorar o pesar ciertas IPs/Redes

vi /etc/psad/auto_dl

Actualización de “signatures”

psad --sig-update
psad -H

Probemos ¿Sí funciona?

Para probar psad, hay que observar el comportamiento de las reglas iptables en el Servidor que se encuentra protegido con su respectivo “Firewall” y psad:

Desde una computadora de la red (192.168.0.22), fuera de las IPs/Redes ignoradas:

sudo nmap -p- -sV -sS -O 192.168.0.1

Desde el servidor (192.168.0.1):

iptables -L | egrep -i 'PSAD|DROP|REJECT'

Archivos log

ls -la /var/log/psad/

tree ls -la /var/log/psad/

Iniciar, parar y re-iniciar

/etc/init.d/psad start
/etc/init.d/psad stop
/etc/init.d/psad restart

Algunas opciones interesantes

Listar las reglas en las cadenas iptables usadas por psad en modo “auto-blocking”:

psad --fw-list-auto

Estado de los procesos psad:

psad -S

Eliminar todas las reglas de bloqueo auto-generadas:

psad -F

Eliminar una IP/Red de las cadenas de bloqueo auto-generadas:

psad --fw-rm-block-ip 192.168.0.22

psad es desarrollado pensando en:

  • La buena seguridad de una red se inicia con un “Firewall” correctamente configurado.
  • Una cantidad significativa de datos de detección de intrusos se puede extraer de los registros log del “Firewall”, especialmente si los registros proporcionan información sobre la red y las cabeceras de transporte.
  • El tráfico sospechoso no debe ser detectado a costa de tratar de bloquear ese tráfico también.