Archivo de la etiqueta: GNU/Linux

Convertir una máquina GNU/Linux en un “appliance”

Un cliente me pidió que le crease unas máquinas GNU/Linux con varios programas para la monitorización y el análisis del tráfico de red. La idea era repartir varias máquinas por distintos puntos de su extensa red y vigilar durante un tiempo ese segmento.

El cliente tan solo quería varias máquinas con GNU/Linux y algunos programas instalados, que se administrasen remotamente por SSH y enviaran a un servidor splunk central las alertas de Snort. Pero a mí me pareció una ocasión ideal para explotar la flexibilidad de GNU/Linux y las cosas chulas que se pueden hacer de una forma sencilla, así que me planteé los siguientes puntos que debería cubrir la solución:

  • Los usuarios no deben conocer la contraseña de administrador
  • Debe ser factible la gestión de los programas que se instalen (esto requiere privilegios de administrador)
  • Permitir su uso por usuarios con conocimiento cero de GNU/Linux (esto quiere decir que hay que evitar la SHELL)
  • Si llega a manos de un usuario con conocimientos, no quiero que desmonte el chiringuito. Hay que limitar el acceso
  • Los datos deben estar cifrados en el disco, ya que pueden contener datos sensibles y se van a mover por la geografía estatal
  • Se deben poder configurar las tarjetas de red

Para cubrir estos requisitos hay que:

  • Proteger la BIOS y el gestor de aranque (Grub) por contraseña
  • Cifrar la mayor parte del disco duro
  • Modificar el inicio para que init no lance el proceso login
  • Crear una interfaz de uso sencillo y que no permita el acceso a la SHELL

Esto en la práctica implica transformar un GNU/Linux en una caja “tonta” que muestre un menú con las distintas acciones que se le permite realizar al usuario al arrancar la máquina, es decir en el TTy1. Además decidí mostrar el log de Snort en el TTy2.

A continuación muestro la documentación entregada al cliente en la que se explica con detalle la arquitectura. La documentación incluye, en el Anexo, un script que automatiza el proceso de configuración una vez instalado GNU/Linux.

Sigue leyendo

Integrar un servidor GNU/Linux a un directorio activo de Microsoft

Estos son los pasos a seguir para integrar un servidor RedHat a un AD de Microsoft y poder iniciar sesión con usuarios de AD en RedHat.

Excepto los pasos de instalación de paquetes, el resto de pasos deben servir para el resto de distribuciones de GNU/Linux y para los Unix en general.

  • Instalar y configurar NTP para que sincronice con el ad
    • yum install ntp
    • editar /etc/ntp.conf y agegar la línea “server ip_del_DC
  • Instalar samba
    • yum install samba
    • Samba debe estar compilado con las opciones: “–with-shared-modules=idmap_ad,idmap_rid”, para comprobarlo ejecutar los comandos
      • grep idmap_ad $(which smbd)
      • grep idmap_rid $(which smbd)
  • Configurar PAM (Plugable Authentication Modules) Sigue leyendo

Script modular para el bastionado de GNU/Linux

Objetivo

El script bastiona-linux pretende facilitar el proceso de aplicación de los requisitos corporativos de bastionado, a la vez que crea una plataforma flexible para la incorporación de nuevas medidas que puedan surgir en el futuro así como para eliminar o modificar las ya existentes.

Ejecución

El script se puede ejecutar de dos maneras:

1-      Mediante la asignación de permisos de ejecución

chmod +x bastiona-REL.sh

./ bastiona-REL.sh

2-      Invocando una nueva instancia de bash con el script como argumento

bash bastiona-REL.sh

Argumentos de ejecución

Es posible indicar como argumento de ejecución las opciones:

  • -h o –help: Muestra un mensaje de ayuda por pantalla
  • -r o –restore: Restaura el sistema al estado pre-bastionado, deshace todos los cambios realizados por el script de bastionado

Sigue leyendo

Guía de bastionado Linux, basado en RedHat Enterprise Linux

Esta es una guía que he desarrollado para un cliente, por lo tanto hay aspectos que se adaptan a sus necesidades (como iptables). Pero ha grandes rasgos puede ser utilizada en cualquier ámbito. También he desarrollado un script modular que automatiza todo el proceso, para más información ir a este post: Script modular para el bastionado de GNU/Linux

1.     Principios genéricos

A la hora de instalar, configurar y administrar un servidor, se debe:

  • Cifrar todos los datos que se transmiten a través de la red, son particularmente importante los datos relativos a nombres de usuario y contraseñas
  • Minimizar la cantidad de programas y servicios instalados y en ejecución para minimizar el riesgo potencial ante vulnerabilidades
  • Utilizar medidas de seguridad adicionales como: SELinux, IPtables, Apparmor
  • Auditar los elementos críticos y/o de mayor riesgo de cada servidor
  • Minimizar la instalación de varios servicios en un mismo servidor, para reducir el riesgo de que un servicio comprometido afecte a otros servicios
  • Realizar un buen seguimiento de las cuentas de usuario, crear una política de contraseñas sólida y forzar su uso así como eliminar las cuentas de usuarios innecesarias o que ya no se utilicen
  • Revisar los logs de sistema y de aplicación de manera rutinaria. Enviar los logs a un servidor de logs
  • Evitar el inicio de sesión con el usuario root. Los administradores deben usar el comando sudo para ejecutar comandos como root. Utilizar el comando visudo para editar el archivo /etc/sudoers, este comando comprueba la sintaxis del archivo antes de guardarlo
  • Utilizar la metodología del menor privilegio en todos los ámbitos

Sigue leyendo

Script to make SNMP templates (for zabbyx at the moment)

Here you have a bash script that scan a device and allow the selection of items to be added to a template in a wizard way, it support extension by modules in two ways, to manage some special OIDs (like NIC ones) and by defining output modules (that builds the final result, at the moment a zabbix template)

The zabbix template module can build multi or single graph items.

Just download, untar the file, cd make_template and run:

bash make_template.sh -i -a IP_ADDRESS SNMP OPTIONS

and follow the wizard.

The script generate an OID file that is used by template_modules to make the final template

send me bugs (sure they ll be there) improvements you do or whatever related to the script

Download it now
enjoy it 😉

Gestor de scripts Unix centralizado y distribuible

Voy a describir el funcionamiento y la estructura de una herramienta que creé hace tiempo, pero que creo que puede serle útil a más gente, la herramienta sirve para gestionar los scripts de forma centralizada en entornos de tipo Unix y se llama DCSM de sus siglas en inglés (Distributable Centralized Scripts Manager, Gestor de scripts centralizado y distribuible) esta programada mediante shell scripts y se desarrolló sobre Solaris pero funciona en cualquier Unix, el único requisito es un servidor CVS (era muy complejo instalar subversion en los Solaris 8 😉 ) y crond. A continuación reproduzco el documento que describe esta herramienta.

La situación general, en gran cantidad de redes,  a la hora de gestionar los scripts de los servidores, que siempre existen, es crear los scripts específicos para cada servidor, y si es necesario en otro servidor se copia. Este sistema de administración de scripts es muy típico y, aunque evita algo de trabajo, tiene unas claras desventajas, las que intento solucionar son las siguientes:

  1. Es difícil hacer un seguimiento de los scripts que están en cada servidor.
  2. Si se modifica un script que se usa en más de un servidor hay que modificarlo en cada uno de los servidores, si tenemos en cuenta el punto 1 puede ser que no se apliquen los cambios deseados a todos los servidores.

Estas desventajas se pueden resolver mediante la centralización de la gestión y distribución de los scripts.

Sigue leyendo

Como saber la versión de gcc usada para compilar el kernel de Linux

Quien no ha compilado un módulo X y al intentar cargarlo se ha encontrado con el desagradable mensaje de que no se puede cargar el módulo por que se ha compilado con una versión de gcc distinta a la utilizada para compilar el kernel. Cada vez que me pasa me encuentro con lo mismo…¿Cómo se que versión de gcc utilizaron para compilar el kernel? y es que es tan sencillo que siempre se me olvida, a ver si al escribirlo aquí se me queda también en la cabeza y si no pues aquí lo tengo… bueno es tan sencillo como ejecutar en un terminal:

shell#: cat /proc/version

¿fácil no?

byte byte 😉

Configurar Linux como cliente web de Microsoft ISA Server o Forefront en 5 pasos

El otro día en el curro me iva fatal la conexión ADSL que utilizaba para funcionar con el único pc con Linux de la empresa (un laptop viejo que me cedieron en su día), por otro lado buscando un proxy en python para una idea que me ronda la cabeza encontré proxies que soportan la autenticación NTLM (NT Lan Manager) que es la usada por Windows y, por lo tanto, por el ISA server o Forefront, entonces se me encendió la bombilla, hice una busqueda rápida y efectivamente!! se puede validar un Linux contra un ISA server mediante un proxy que soporte NTLM, siempre y cuando el servidor de Microsoft tenga activada la opción de ser proxy web. En los repositorios de ubuntu hay varios, yo he elegido el cntlm. No es necesario añadir el pc Linux al dominio ya que conectaremos al proxy web pero ya que estamos ¿porqué no hacerlo?

Pasos a seguir

1-Añadir el pc al dominio mediante likewise-open

Como he dicho esto es OPCIONAL, y se puede obviar si no se dispone de una cuenta con suficientes privilegios para añadir elementos al Active Directory o simplemente no queremos que la máquina forme parte del mismo

  • shell#: sudo aptitude install likewise-open5
  • shell#: sudo domainjoin-cli dominio usuario_administrador_del_dominio
  • shell#: sudo /etc/init.d/likewise-open restart

Si se desea añadir el usuario del dominio a sudo hay que  editar /etc/sudoers y añadir una line del tipo DOMINIO\\usuario permisos

2- Instalar y configurar el proxy

Simplemente así

A- Instalar cntlm

shell#: sudo aptitude install cntlm

B -Editar/etc/cntlm.conf

shell#: sudo vi /etc/cntlm.conf

y establecer las variables: Username, Domain, Password, Proxy (Normalmete es ip_isa_server:8080)

C -Ejecutar

shell#: sudo cntlm -M http://abdulet.net (o cualquier url)

Default config file opened successfully
cntlm: Proxy listening on 127.0.0.1:3128
cntlm: Resolving proxy 192.168.50.37…
cntlm: Workstation name used: kubuntu
cntlm: Using proxy proxyserver:8080
Config profile  1/11… OK (HTTP code: 301)
—————————-[ Profile  0 ]——
Auth            NTLMv2
PassNTLMv2      XXXXXXXXXXXXXXXXXXXXXXX

————————————————
cntlm: Terminating with 0 active threads

D -Vomver a editar /etc/cntlm.conf, pegar el texto en rojo ¿Qué… en donde? pues donde más rabia te de 😉 y además borrar la linea del Password en texto plano

E -Reiniciar el proxy

shell#: sudo /etc/init.d/cntlm restart

F -Configurar las aplicaciones para usar el proxy 127.0.0.1 puerto 3128 (estas opciones se puede cambiar en el archivo /etc/cntlm.conf). Para configurar el proxy para las aplicaciones en general hay que editar el archivo .profile

shell#: vi .profile

, añadir estas lineas

http_proxy=”http://localhost:3128″

ftp_proxy=”ftp://localhost:3128″

y volver a iniciar sesión

Y a disfrutar la navegación!!

Como evitar las contraseñas al iniciar sesión en Gnome, también la de la wifi ;)

Aún que no sea lo más seguro, la verdad es que cansa tener que escribir la contraseña cada vez que enciendo el ordenador, sobre todo cuando no tengo nada que esconder en él y si alguien lo necesita se encuentre con este tipo de problemas, así que voy a explicar como hacer que Gnome no pida ningún tipo de contraseña, ni para iniciar sesión ni para conectarse a Internet o usar alguna de las contraseñas que están almacenadas en el anillo de claves. Sigue leyendo

Demostrando la debilidad de la encriptación inalámbrica mediante WEP

Voy a demostrar la debilidad y facilidad de craquear redes wireless protegidas mediante la obsoleta encriptación WEP, paradójicamente WEP significa “privacidad equivalente a cable” (Wirede Equivalent Privacy en inglés) pero como veremos a continuación nada más lejos de la realidad. Es muy recomendable poder injectar paquetes, lo más fácil es descargar una distribución Live que se ejecute desde USB o CD por ejemplo la bactrack del equipo de remote-exploit (agradecerles su trabajo desde aquí 😉 ) estas distros además de tener aplicados todos los parches necesarios para inyectar paquetes traen todas las herramientas que vayamos a necesitar y muchas más que pueden abrir la puerta a nuevas ideas y retos (keep your mind moving…)

Herramientas que se utilizarán:

  • Kismet: Para la localización de redes
  • wirelesstools: Para la gestión de la tarjeta inalámbrica
  • aircrack-ng: Suit completa de herramientas para los ataques wireless Sigue leyendo