Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

martes, 24 de febrero de 2015

Port bonding en Linux

El nivel de carga de las tarjetas de red se ha ido incrementando de forma meteórica a durante los últimos años. Hace años el uso de una tarjeta de red de 100 Mbps parecía exagerado cuando hoy el uso de una tarjeta de 1 Gbps es algo normal. Los servidores suelen ser los más perjudicados de esta evolución ya que se pueden ver con un tráfico mayor de lo normal debido a distintos factores (más visitas, nuevo software que consume más ancho de banda, etc...) y de pronto el administrador del servidor se da cuenta de que aunque el servidor es capaz de soportar la carga a nivel de RAM y CPU, la tarjeta de red no es capaz de soportar tan tráfico, haciendo que los datos pasen por un cuello de botella que haría que no se pudiese sacar todo el partido que se desearía al servidor. La solución puede parecer sencilla: Cambiar la tarjeta de red; pero no siempre se puede realizar dicho cambio y uno puede verse en una necesidad de ampliar las capacidades de la tarjeta de red sin cambiarla. Afortunadamente existe una solución a dicho problema: Port bonding.

Port bonding consiste en la unificación de dos o más puertos de red para que actúen cómo uno solo. Dicha funcionalidad posee las siguientes ventajas:


  • Fusión de la potencia de todos los puertos que actúan cómo uno sólo. Obviamente todos los puertos fusionados tienen que estar conectados dentro de la misma red. Por ejemplo si se fusionasen 2 puertos de 1 Gbps se obtendrían 2Gbps.
  • Redundancia: Si uno de los puertos se estropea, se pierden las virtudes que ofrece dicho puerto pero el servicio que ofrece el conjunto de puertos en sí no se pierde, con lo que si por ejemplo se tuviesen 2 puertos  de 1 Gbps configurados y se tuviese en marcha un servicio web, en caso de que se estropease uno se podría seguir pudiendo acceder a dicho servicio pero ahora sólo tendría 1 Gbps en vez de 2. Esta funcionalidad es especialmente útil en redes que necesiten alta disponibilidad.
Vistas las ventajas, es lógico que uno desee probarlo; En este caso la "fusión" de puertos se ha hecho en Linux, pero antes de hacerlo uno tiene que mirar que versión de Kernel tiene. Para ello, accediendo a la consola, se escribe el siguiente comando:

uname -r

Al teclear dicho comando aparecerán una serie de números con un pequeño texto al final. Esos números corresponden a la versión del Kernel que se tiene instalada en Linux. El kernel de Linux es un elemento vital usado por muchísimos dispositivos, incluido el todopoderoso Android, que se encarga de acciones indispensables para que el sistema funcione; se trata de básicamente del corazón del sistema, el núcleo. Debería aparecer algo parecido a esto:

3.13.0.32-generic

La versión del Kernel debe de ser superior a 2.4.12, ya que a partir de dicha versión es cuando el Kernel incluye nativamente el soporte del port-bounding. En versiones ligeramente más antiguas existen parches que habría que aplicar a mano, pero se recomienda no usar dichas versiones para evitar contratiempos. De todas formas es difícil no tener dicha versión ya que actualmente la última versión estable es la 3.19. 

En caso de cumplir con la versión de Kernel, con copiar las líneas que aparecen a continuación a un script e incluirlo al arranque, bastaría para activar el port bonding.

  1. #!/bin/bash
  2. #VARIABLES
  3. IPifconfig eth0 |grep inet: |awk '{print $2}' |cut -d ":" -f 2
  4. MAC=ifconfig eth0 |grep Eth |awk '{print $5}'
  5. #MODULO BONDING
  6. modprobe bonding mode=0 miimon=100
  7. #DESHABILITACION DE INTERFACES
  8. ifconfig eth0 down     
  9. ifconfig eth1 down     
  10. #HABILITACION DE INTERFACES CON BONDING
  11. ifconfig bond0 hw ether ${MAC}
  12. ifconfig bond0 ${IP} up
  13. ifenslave bond0 eth0   
  14. ifenslave bond0 eth1

Para aquel que sienta curiosidad con respecto a los modos, le listaré los modos de bonding disponibles:

  1. mode=0 (balance rr)--> Modo balanceado que transmite los paquetes de forma secuencial entre los puertos. Posee balance de carga y además tiene tolerancia a fallos (es decir que si falla uno de los puertos que componen el bounding no pasa nada más que la perdida de "potencia")
  2. mode=1 (active-backup)-->Sólo un puerto está activo y en caso de fallar se activaría el otro. Su propósito es únicamente la alta disponibilidad
  3. mode=2 (balance-xor)-->Este modo siempre escoge el mísmo puerto "esclavo" para cada MAC de destino. Este método también tiene tolerancia a fallos y balance de carga.
  4. mode=3 (broadcast) --> Pasa todo el tráfico a las tarjetas esclavas por igual. Este método tiene tolerancia a fallos.
  5. mode=4 (802.3ad) --> Agregación de link dinámico. Requisitos: Los drivers de la tarjeta de red tienen que soportar Ethtool. El switch tiene que soportar la funcionalidad de agregación de link dinámico.
  6. mode=5 (balance-tlb) -->Balance de carga adaptado a las necesidades de la red.  El tráfico de red saliente escoge una interfaz u otra dependiendo de la carga de los puertos, mientras que el tráfico entrante siempre va a por una interfaz a menos que ésta falle, en cuyo caso el tráfico iría a la otra interfaz de red. Requisitos: Los drivers de la tarjeta de red tienen que soportar Ethtool
  7. mode=6 (balance-alb)--> Balance de carga activo para el tráfico ipv4 que se consigue mediante la negociación de la tabla ARP.
Los modos más usados son los cuatro primeros, y en la mayoría de los casos el 0 es el que mejor cubre las necesidades de uno.

Saludos.

sábado, 21 de febrero de 2015

Los peligros de acceder a una wifi pública abierta y cómo evitarlos

Las nuevas tecnologías han proliferado el uso de elementos capaces de conectarse a Internet, tales como los portátiles, tablets o smartphones. El hábito de estar conectados todos los días y a todas horas a Internet (especialmente con los smartphone) a hecho que la gente se encuentre prácticamente desesperada cuando, por las circunstancias, no tienen cobertura o no pueden conectarse a internet por sus propios medios, recurriendo a la alternativa más cómoda: El uso de una red wifi pública abierta. Durante años he intentado prevenir a la gente de conectarse a este tipo de redes, ya que no sabemos quien puede haberla implantado, quien la ha implantado y qué tipo de seguridad hay en ésta; Aunque desgraciadamente he fracasado estrepitosamente en mis intentos. Yo personalmente, siempre he intentado animar a mis seres cercanos a no usar estas redes o a que en caso de hacerlo, sea a través de una VPN (y para cosas que no sean importantes), pero tan pronto como menciono el termino VPN la gente directamente desecha la idea aún cuando se les subraya que el procedimiento es muy sencillo. Esto de por sí no me preocuparía si optasen directamente por no conectarse a dichas redes, pero como bien acabo de decir, la gente desoye completamente cualquier referencia a la seguridad y se conectan indiferentemente a cualquier red preocupándose como mucho de que el nombre de la red en cuestión no sea demasiado sospechoso. En este artículo quiero demostrar los peligros que conllevan dichas prácticas y las sencillas medidas que se pueden tomar para ayudar a conservar la privacidad de nuestra navegación.

Primero veamos la relativa sencillez con la que se puede vulnerar la privacidad de uno. Hay muchísimos métodos, pero como englobarlos todos haría este artículo kilométrico, solo explicaré uno de ellos: El método de "man in the middle".

Esta técnica es usada para interponerse entre dos máquinas con el fin de modificar y/o capturar paquetes. La técnica en sí es muy agresiva y si administrador de red corriese una herramienta como por ejemplo wireshark, vería que el atacante manda muchísimas más peticiones a la tabla ARP de lo normal. ARP es el encargado de relacionar una determinada dirección de hardware (más conocida como MAC) con una IP, y en este caso el objetivo es "envenenar" la tabla ARP del router y del equipo que se quiere espiar. Ese "envenenamiento" es comúnmente conocido como ARP spoofing y su finalidad es hacer creer a la tabla ARP de la victima que el router es el ordenador que se quiere usar para espiar y también se engaña a la tabla ARP del router para que se piense que el ordenador atacante es el de la víctima. Ello hace que todos los paquetes que fluyen entre la víctima y el router pasen por el PC atacante, haciendo posible capturarlos. Por si suena muy lioso lo voy a esclarecer con el siguiente esquema:



Para lograr este propósito hay una gran variedad de herramientas, muchas de éstas son muy intuitivas y otras no tanto. Las herramientas más populares son Ettercap(para Linux y Windows) y Cain y Abel(solo para Windows), debido a la facilidad con la que uno puede spoofear la arp de destino sin tener demasiados conocimientos informáticos y suelen ser las más usadas por aquellos con malas intenciones.

Cómo se realizan estos ataques:

Antes de proseguir, he de resaltar que la prueba que voy a realizar ha sido hecha dentro de una wifi cerrada y segura y con elementos controlados en todo momento a modo de test; El crear una wifi pública abierta para realizar este tipo de acciones es un delito y el único objetivo de esta demostración es concienciar a los usuarios sobre el los peligros de las redes wifi abiertas.

Para la prueba que voy a realizar, voy a utilizar una de las herramientas antes mencionadas. Personalmente me gusta más el método manual con irpas, un paquete de Debian que tiene un conjunto de herramientas y que junto con Wireshark y un editor hexadecimal te permite hacer lo mismo que el resto, pero como el objetivo de este artículo en particular es demostrar la facilidad con la que la seguridad de uno se puede ver vulnerada, voy a optar por una opción más intuitiva y al alcance de todos: Cain&Abel.

Esta herramienta destaca por estar expresamente diseñada para Windows y por ser detectada por casi todos los antivirus como un virus aún sin serlo. Aún así, yo personalmente prefiero ejecutar este programa en una maquina virtual únicamente diseñada para este propósito. Al ejecutar Cain&Abel nos aparecerá una pantalla con multitud de opciones y pestañas, pero solo nos interesan unas pocas funciones en estos momentos. 

El primer paso para realizar el envenenamiento de ARP es la elección de los puntos que se desean vulnerar. Para ello se tiene que ir a la sección sniffers -->hosts tal y como muestro en la siguiente pantalla:


En dicha pantalla he resaltado el botón en rojo las secciones a las que se tiene que acceder. Los dos recuadros verdes resaltán los botones que tienen que estar activados para lograr el ARP spoofing, ya que son los encargados espiar y envenenar las tablas ARP, mientras que el recuadro azul es el encargado de establecer las preferencias de dicho espionaje, con lo que tras activar los dos botones resaltados en verde habría que clickar el botón de + resaltado en azul, el cual mostraría algo como lo siguiente:


En dicha ventana simplemente se tiene que seleccionar el scanneo de todos los hosts dentro de la red y seleccionar todos los Tests, tras lo cual se clickaría el botón de OK y se listarían todos los hosts dentro de la red tal que así:




Ahora que se tiene el listado disponible, ahora sólo habría que ir a la sección ARP que se encuentra dentro de la sección Sniffer, y clickar el mismo botón de +, el cual mostraría el siguiente listado:


En el lado derecho se pondría el destino número 1 y en el izquierdo el número 2. Teniendo ambos seleccionados se pulsaría OK y con ello empezaría el envenenamiento de la tabla ARP con sus consecuencias...

Ahora sólo faltaría una herramienta que espíe la red... Existen muchas, la más famosa probablemente sea Wireshark, y con razón, ya que es una herramienta realmente completa que da información muy detallada de la red, pero existen herramientas de más alto nivel que aunque no demuestran los datos tan detallados como la herramienta que acabo de mencionar, son más intuitivas y fáciles de controlar y pueden obtener información de la navegación de las victimas con suma facilidad...

Cómo protegernos

Como podeis apreciar, hoy en día no es nada difícil vulnerar la privacidad de otras personas, más aún con la ayuda de herramientas como la que acabo de utilizar. Por ello es importante tomar medidas que nos ayuden a navegar con seguridad por la red; El método más recomendado es el uso de una VPN; En su día hablé de OpenVPN, pues bien, ahora voy a utilizar el software orientado a dispositivos móviles OpenVPN Connect, que incluye algunas facilidades para que no tengas que tener tu propio servidor VPN (cosa que evidentemente, la mayoría no posee). Bien, tras descargar y ejecutar el software apreciareis que os aparece un pantalla muy parecida a la siguiente:


Pantalla principal OpenVpn Connect


El programa no trae perfil de conexión alguno, con lo que se necesita crear uno; Para ello, si os fijáis veréis que en la parte inferior aparecen dos enlaces: uno para  privatetunnel y otro para openvpn. En este caso nos interesaría usar la primera opción. Al entrar en la página nos aparecería algo como lo siguiente:



En este caso no se desea descargar ningún software, solamente se hace falta registrarse en la página, la cual te va a guiando durante el proceso de registro. La única parte que puede llegar a ser ligeramente confusa es la de la selección de servidor. Private Tunnel te da a elegir una serie de servidores VPN que ellos tienen distribuidos por el mundo. Estos son los servidores a los que uno se conectará para navegar seguramente por Internet. Si os fijáis bien en la página principal (antes de registrarse) ya te dice los servidores que poseen.




Con lo que a la hora de escoger uno lo recomendable es siempre escoger el más cercano al país donde residimos con el fin de tener la conexión más rápida posible. Una vez creada la cuenta es hora de volver a la pantalla principal de OpenVpn Connect y si os fijáis bien, en la parte superior derecha aparece tres cuadrados grises alineados en vertical; Al pulsar allí os aparecerá un menú desplegable donde os aparecerán varias opciones. Entre ellas hay una que es la que nos interesa en estos momentos que es: Import. Dentro de dicha opción aparece otro menú desplegable en el cual habría que escoger Import Private Tunnel Profile.























Al seleccionar dicha importación nos redirigirá automáticamente a la página principal de private tunnel, donde habría que introducir nuestros datos de usuario.


Y con ello ya tendríamos nuestro perfil de private tunnel importado y listo para ser usado. A partir de ahora dicho perfil quedaría guardado y no haría falta volver a importarlo nunca más. Ahora vuestra pantalla principal debería mostrar algo cómo esto:


Esa pantalla siempre será así y a partir de ahora, cada vez que uno se conecte a una wifi, solo necesitaría darle al botón de Connect para conectarse y poder disfrutar de una conexión más segura. He aquí la captura de lo que mostraría el smartphone tras establecer la conexión:



Ahora la navegación que se realice ser realizará a través de la VPN, ayudando así a evitar intrusiones externas; Como todo sistema de seguridad no es perfecto, pero es una protección muy eficaz para la mayoría de entornos.

Como veis, aunque la primera vez que uno se quiere conectar a la VPN puede parecer un poco laborioso, el proceso merece la pena ya que después solamente hay que pulsar un botón para conectarse y desconectarse y podremos navegar más tranquilos por la red; Con lo que recordad, si veis una red wifi pública y abierta, desconfiad y usar una VPN; Ese pequeño esfuerzo podría ahorrar a muchos más de un disgusto.

Saludos.

lunes, 9 de febrero de 2015

Disfrutando de raspbmc mediante carpetas compartidas

Recientemente adquirí un nuevo cable HDMI que deseaba tener para hacer pruebas con mi raspberry pi. Llevaba tiempo deseando adquirir uno para no tener que hacer todo mediante VLC, y especialmente para poder probar raspbmc cómo un centro multimedia. La prueba con raspbmc ha sido más que satisfactoria, y creo que merece la pena compartir la experiencia, especialmente debido a algunos puntos que me han parecido interesantes.

Teniendo experiencia previa con la instalación de Raspbian y owncloud en raspberry pi, el proceso de instalación se me hizo muy ameno. La gente usa diferentes métodos para grabar la imagen en la tarjeta SD, aunque yo personalmente me decanto por win32diskimager. En mi caso personal opté por una tarjeta SD de 16GB y al principio uno se puede asustar tras grabar la imagen, ya que le puede aparecer algo cómo esto:


No pasa nada, eso es debido a que Windows no reconoce el sistema de archivos NFS y no es capaz de reconocer el tamaño real de la tarjeta, pero no es algo que importe; Es tan solo un problema de visualización, no es algo que vaya afectar luego a la raspberry.

Únicamente quedaría insertar la tarjeta y arrancar el dispositivo, el cual tarda bastante la primera vez debido a las actualizaciones que está ejecutando la primera vez:


Este proceso puede tardar varios minutos, hasta que al final tiene que mostrarte la pantalla principal del sistema, aunque no siempre es así. Puede pasar (a mí personalmente me ha pasado) que se llegue a un punto en el que se entre en un bucle infinito; Me explico: Tras finalizar la instalación te tiene que mostrar un mensaje en el que te dice que XBMC está reiniciando... Por desgracia ese reinicio nunca llega y no importa cuantas veces reinicies la raspberry, siempre sale dicha pantalla. La solución es sencilla e inmediata. Conectandonos por SSHal dispositivo, entramos cómo usuario:pi contraseña:raspberry y ejecutamos los siguientes comandos:


sudo rm -f /home/pi/.xbmc
sudo rm -f /home/pi/.kodi


La función de esos comandos es borrar toda configuración de los servicios kodi y xmbc. Cómo en este caso no se posee configuración alguna, no se pierde nada importante y tan pronto cómo se borran dichos archivos el sistema se encarga de generar automáticamente unos nuevos que en este caso sí que funcionarán correctamente.

Existen numerosas opciones para sacarle partido a este sistema, pero la que a mí más me ha llamado la atención es la visualización de contenido multimedia mediante una carpeta compartida en otro equipo, lo cual hace que el consumo en la raspberry sea prácticamente nulo. Esta prueba la voy a realizar mediante una carpeta compartida en windows, pero se puede hacer lo mismo en Linux sin ningún problema.

Para ello he creado una carpeta llamada raspbmc y he entrado en sus propiedades para luego entrar en la sección, compartir:


En este caso ya la tenía compartida de antes para realizar las pruebas, pero el procedimiento es muy sencillo en entornos de Microsoft. Simplemente con con clickar en compartir debería aparecer una pantalla cómo la que muestro a continuación:


En esta sección habría que clickar en el menú desplegable y seleccionar todos con sólo permisos de lectura, ya que lo único que se hará desde el dispositivo será leer su contenido. Ahora que tenemos la carpeta preparada, únicamente habría que añadirle el contenido que deseemos, cómo películas o música.

Ahora sólo quedaría controlar la raspberry para acceder al contenido compartido; Hay diferentes para controlar raspbmc, pero un método muy útil para controlar el sistema es mediante un smartphone con Yatse instalado; Un softwate realmente intuitivo que hace la función de mando para este entorno. Si uno no desea instalarse dicho software puede optar por otras alternativas, cómo el uso del propio mando de la tele, pero requiere algunas configuraciones especiales y que la TV sea compatible con CEC.

Tras obtener el control del software, iríamos a la sección en la que deseemos agregar la carpeta compartida, en mi caso he escogido la sección MOVIES, pero es completamente al gusto de cada usuario:



Al principio sólo se podrá realizar una acción, que será "Add Videos..." ya que se carece de contenido multimedia alguno. Al entrar en dicha opción nos aparecerá una ventana muy intuitiva que sólo nos dará dos opciones: Browse o Cancel. Evidentemente habría que acceder al botón browse donde nos aparecerá un listado muy parecido al que muestro a continuación:




Aún cuando se ve un gran número de opciones, sólo nos interesa una en estos instantes, que es la opción que aparece seleccionada en pantalla: Add network location. Allí habría que introducir los datos del pc anteriormente configurado, incluyendo la ip, el usuario y la contraseña, quedando algo cómo esto:




Una vez introducidos todos los datos, el destino debe aparecer en la lista de carpetas, y con seleccionarlo ya se tendría la carpeta "registrada" en el sistema y tendría que aparecer algo cómo esto:


Ahora bien, aunque el contenido aparecer en la carpeta, la librería local del xmbc no tiene registrado el contenido de la carpeta, con lo que si queremos que el sistema tenga todo de acuerdo al contenido de la carpeta compartida, habría que entrar en el submenu de la carpeta Raspbmc; La forma de entrar varía dependiendo de cómo controlemos el sistema; En mi caso, al usar Yatse, me basta con pulsar el botón que muestro a la izquierda, el cual mostraría el submenú de la derecha, en el cual habría que seleccionar "scan for new content"



En cuestión de segundos, la base de datos del sistema estaría actualizada y ya podremos disfrutar de un media center sencillo, práctico y barato.