Bloquear una IP atacante con null route

En alguna ocasion podemos encontrarnos con algun tipo de ataque de una determinada IP o red (rezando para que no sean multiples) hacia nuestra red/sistema.

En Linux (y BSD/Solaris/Unix Flavours) podemos mandar los paquetes de una determinada IP o red a ninguna parte (blackhole route o null route) añadiendo una entrada en nuestra tabla de rutas.

USANDO EL COMANDO ROUTE PARA NULL ROUTE

route add 192.168.1.5 gw 127.0.0.1 lo

En este comando especificariamos que la IP atacante es 192.168.1.5 y queremos enviar los paquetes que nos envie a la interfaz de loopback.

Verificar que se ha “null routeado” la IP en nuestra tabla de rutas

route -n

O bien usando Netstat

netstat -nr

Tambien podemos hacer un reject:

route add -host 192.168.1.5 reject

Mandar a Null route una red entera

Imaginaros que queremos filtrar el sistema autónomo completo de McColo (si algún ISP anunciara sus prefijos, claro).

route add -net 208.66.192.0/24 gw 127.0.0.1 lo

Borrar entradas de la tabla de rutas

Probablemente haya un tiempo en el que ya no nos interese bloquear a determinada IP o bloque. Para borrar una entrada haremos lo siguiente:

route delete 192.168.1.5

Cómo instalar CentOS remotamente

Es posible instalar centos remotamente, siempre y cuando exista previamente en el servidor grub. No importa el linux que haya.

Supongamos el siguiente escenario:

Requisitos locales:
La laptop mía será la IP 1.2.3.4 y estará con el vncviewer instalado (paquete vnc). Ésta laptop tendrá abierto el puerto 5500 o redirigido ese puerto hacia ella (en caso de que esté detrás de un firewall). La laptop por supuesto tiene linux, CentOS.

Requisitos remotos:
Sé la IP del servidor (1.1.1.2 en el ejemplo), conozco la máscara (255.255.255.248 en caso del ejemplo), y sé de su gateway (1.1.1.1 en el ejemplo). También conozco los DNS que usa ese servidor (1.1.1.1 en el ejemplo).

Por favor, alerta! si se te daña la máquina no me intentes culpar, no es mi culpa que tu hardware se te explote, dañe, queme, destroya, vaporice o lo que sea por el amor de dios si no te funciona es tu culpa, no la mía.

Paso a paso todo:

Sistema LOCAL:

  1. instalar el paquete vnc en tu máquina local: yum install vnc
  2. ponerlo a escuchar: vncviewer –listen
  3. abrir el puerto 5500 en caso de que tengas firewall o redirigir el puerto 5500 hacia tu maquina local.

Sistema REMOTO:

  1. Entrar al servidor remoto por ssh
  2. cambiarte a /boot (cd /boot)
  3. bajar vmlinuz e initrd.img del directorio images/pxeboot (aqui por ejemplo: http://mirror.centos.org/centos-5/5/os/i386/images/pxeboot/

Si tu maquina es de 64 bits, buscar el pxeboot adecuado, si instalaras otro centos (3 o 4) buscar el pxeboot adecuado.

puedes bajarlo con: wget URLDELARCHIVO

7- verifica que en el directorio /boot esté un archivo llamado vmlinuz y otro llamado initrd.img (quizá haya otros de los kernels anteriores, eso no es de importancia para el proceso).

8- Edita tu grub.conf, la idea es que tu grub.conf arranque con el siguiente kernel:

title pxe
root (hd0,0)
kernel /vmlinuz vnc vncconnect=1.2.3.4 headless ip=1.1.1.2 netmask=255.255.255.248 gateway=1.1.1.1 dns=1.1.1.1 ksdevice=eth0 method=http://mirror.centos.org/centos/5/os/i386/ lang=en_US keymap=us
initrd /initrd.img

Como curiosidad: sí, sólo uso teclado en inglés, porque el teclado en español tiene el «/» muy difícil de alcanzar.

vncconnect es la IP de tu máquina local, hacia donde se abrirá la sesión vnc

ip, netmask, gateway y dns son las IPs de tu máquina remota, mascara, gateway y dns.

ksdevice= para indicarle que saldrá por este dispositivo (solo util si tienes más de una eth).
method= de dónde bajará las cosas (de centos directamente, centos 5 en este caso).

9-Santiguarse  y reiniciar la máquina.

Este ultimo paso es muy importante.. es importante que lo tengas claro. TIENES QUE PROBAR LOCALMENTE.

Lo que yo hago siempre, SIEMPRE, es arrancar con pxe alguna máquina de aqui de mi casa, y hacer que abra una sesión de vnc contra mi laptop.. si funciona, entonces ya sé que tengo correctamnete la línea del GRUB y que puedo copiarla al servidor remoto y solamente cambiar las claves.

Lo típico es que te confundas en la IP o algún dato del servidor remoto.

Por favor, si algo te pasa coméntalo aqui para que los otros aprendan.. por mi parte también trataré de aprender con lo que te pase.

Cómo configurar acoplamiento de tarjetas de red (bonding)

Aqui os dejo este fantástico artículo para hacer bonding con vuestras tarjetas de red. Solamente decir que con este manual se pueden juntar dos conexiones de internet en un mismo ordenador, sumando el ancho de banda de cada una de ellas y usando solamente una IP. Sin mas preambulos os dejo aqui el manual.

Introducción – bonding

El controlador bonding, originalmente creado por Donald Becker, está incluido en prácticamente todas las distribuciones de GNU/Linux y permite sumar las capacidades de varias interfaces físicas de red con objeto de crear una interfaz lógica. Esto se lleva a cabo con el objeto de contar con redundancia o bien balanceo de carga.

Procedimientos.

Fichero de configuración /etc/modprobe.conf.

Se establece el controlador bonding para crear la interfaz bond0 del siguiente modo:

alias bonding bond0

controlador puede llevar parámetros que permiten modificar su funcionamiento, de entre los cuales los más importantes son mode y miimon. A fin de obtener un buen funcionamiento confiable, es importante configurar al menos éstos dos parámetros.

Para fines generales, se puede simplemente configurar del siguiente modo:

alias bond0 bonding
options bonding mode=0 miimon=0

Lo anterior establece en el parámetro mode la política de balanceo de carga y tolerancia a fallos y desactiva en el parámetro miimon la supervisión de MII, que corresponde la configuración más común.

Al terminar con el fichero /etc/modprobe.conf, es importante utilizar el mandato depmod para regenerar el fichero modules.dep y los ficheros mapa de los controladores.

depmod

Lo anterior solo debe devolver el símbolo de sistemas después de unos segundos.

Parámetro mode.

Se utiliza para establecer la política baja la cual se hará trabajar las tarjetas en conjunto. Los posibles valores son:

0 (cero): Establece una política de Round-Robin, que es un algoritmo que asigna una carga equitativa y ordenada a cada proceso, para proporcionar tolerancia a fallos y balanceo de carga entre los miembros del arreglo de dispositivos. Todas las transmisiones de datos son enviadas y recibidas de forma secuencial en cada interfaz esclava del arreglo empezando con la primera que esté disponible. Es la política predeterminada del controlador y la que funciona para la mayoría de los casos.

1 (uno): Establece una política de respaldo activo que proporciona tolerancia a fallos. Todo el tráfico se transmite a través de una tarjeta y solo se utilizará la otra en caso de que falle la primera.

2 (dos): Establece una política XOR (exclusive-or, exclusiva-o) para proporcionar tolerancia a fallos y balanceo de carga. Este algoritmo compara las solicitudes entrantes de las direcciones MAC hasta que coinciden para la dirección MAC (Media Access Control) de una de las tarjetas esclavas. Una vez que se establece el enlace, las transmisiones de datos de datos son enviadas en forma secuencial empezando con la primera interfaz disponible.

3 (tres): Establece una política de Round-Robinpara proporcionar tolerancia a fallos y balanceo de carga. Todas las transmisiones de datos son enviadas de forma secuencial en cada interfaz esclava del arreglo empezando con la primera que esté disponible.

En el siguiente ejemplo se establece la política 0 (cero):

options bonding mode=0

Parámetro miimon.

Se utiliza para especificar cada cuantos milisegundos se debe supervisar el enlace MII (Media Independent Interface). Se utiliza cuando se necesita alta disponibilidad para verificar si la interfaz está activa y verificar si hay un cable de red conectado. En el siguiente ejemplo se establecen 100 milisegundos:

options bonding mode=0

Se requiere que todos los controladores del arreglo de tarjetas tengan soporte para MII. Para verificar si el controlador de la tarjeta tiene soporte para MII, se utiliza el mandato ethtool, donde la salida debe devolver el parámetro Link Detected con el valor yes. Ejemplo:

ethtool eth0

Lo anterior debe devolver algo similar a lo siguiente:

Settings for eth0:
	Supported ports: [ TP MII ]
	Supported link modes:   10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	Supports auto-negotiation: Yes
	Advertised link modes:  10baseT/Half 10baseT/Full
	                        100baseT/Half 100baseT/Full
	Advertised auto-negotiation: Yes
	Speed: 100Mb/s
	Duplex: Half
	Port: MII
	PHYAD: 32
	Transceiver: internal
	Auto-negotiation: on
	Supports Wake-on: pumbg
	Wake-on: d
	Current message level: 0x00000007 (7)
	Link detected: yes

Para desactivar esta función, se utiliza el valor 0 (cero). Ejemplo:

options bonding mode=0 miimon=0

Fichero de configuración /etc/sysconfig/network-scripts/bond0.

Este se configura con los mismo parámetros que una tarjeta normal. Requiere los parámetros ONBOOT, BOOTPROTO, DEVICE, IPADDR, NETMASK y GATEWAY.

En el siguiente ejemplo se configura la interfaz bond0 con la dirección IP estática 192.168.0.1, máscara de subred 255.255.255.0, puerta de enlace 192.168.0.254 y la interfaz inicia junto con el sistema creando el fichero /etc/sysconfig/network-scripts/ifcfg-bond0 con el siguiente contenido:

DEVICE=bond0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192-168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.254

Las interfaces de red a utilizar como esclavas se configuran de la siguiente forma, considerando que se tiene eth0 y eth1, el contenido del fichero /etc/sysconfig/network-scripts/ifcfg-eth0 sería:

DEVICE=eth0
BOOTPROTO=none
ONBOOT=no
SLAVE=yes
MASTER=bond0

Y el contenido del fichero /etc/sysconfig/network-scripts/ifcfg-eth1 sería:

DEVICE=eth1
BOOTPROTO=none
ONBOOT=no
SLAVE=yes
MASTER=bond0

Iniciar, detener y reiniciar el servicio network.

Para ejecutar por primera vez el servicio network tras configurar el acoplamiento de tarjetas, utilice:

service network start

Para hacer que los cambios hechos tras modificar la configuración surtan efecto, utilice:

service network restart

Para detener el servicio network utilice:

service network stop

Comprobaciones.

Para verificar que la interfaz lógica quedó configurada, en el caso de haber utilizado las interfaces eth0 y eth1, utilice:

ifconfig

Lo anterior debe devolver algo similar a lo siguiente:

bond0     Link encap:Ethernet  HWaddr 00:01:80:41:9C:8A
          inet addr:192.168.1.64  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::201:80ff:fe41:9c8a/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:5128 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3817 errors:7 dropped:0 overruns:0 carrier:0
          collisions:3 txqueuelen:0
          RX bytes:3493139 (3.3 MiB)  TX bytes:495025 (483.4 KiB)

eth0      Link encap:Ethernet  HWaddr 00:01:80:41:9C:8A
          inet6 addr: fe80::201:80ff:fe41:9c8a/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:5056 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3781 errors:0 dropped:0 overruns:0 carrier:0
          collisions:3 txqueuelen:1000
          RX bytes:3474685 (3.3 MiB)  TX bytes:488632 (477.1 KiB)
          Interrupt:11 Base address:0xc000 

eth1      Link encap:Ethernet  HWaddr 00:01:80:41:9C:8A
          inet6 addr: fe80::201:80ff:fe41:9c8a/64 Scope:Link
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:72 errors:0 dropped:0 overruns:0 frame:0
          TX packets:36 errors:7 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:18454 (18.0 KiB)  TX bytes:6393 (6.2 KiB)
          Interrupt:10 

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:6138 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6138 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8364864 (7.9 MiB)  TX bytes:8364864 (7.9 MiB)

Para verificar que las interfaces de red están funcionando correctamente, y que hay un cable de red conectado a éstas, se utiliza el mandato ethtool del siguiente modo:

ethtool eth0 |grep "Link detected"
ethtool eth1 |grep "Link detected"

Si ambas tarjetas tiene soporte para MII, lo anterior debe devolver lo siguiente:

Link detected: yes
Link detected: yes

Bibliografía sobre bonding

Fuente: a l c a n c e l i b r e . o r g