lunes, 29 de abril de 2013

Port Knocking: La mejor seguridad que puedes tener en tu servidor


Golpeteo de puertos (en inglés port knocking) es sin lugar a dudas una práctica que bien todos los que administramos servidores deberíamos conocer, aquí les explico detalladamente qué es esto y cómo implementar y configurar esto ;)
Ahora mismo los que administramos algún servidor tenemos acceso SSH a ese servidor, algunos cambiamos el puerto por defecto de SSH y ya no usa el puerto 22 y otros simplemente lo dejan así (algo no recomendado), no obstante el servidor tiene habilitado el acceso por SSH mediante algún puerto y esto ya es una ‘vulnerabilidad’.
Con Port Knocking podemos lograr lo siguiente:
1. El acceso SSH no está habilitado por ningún puerto. Si tenemos SSH configurado por el puerto 9191 (por ejemplo) ese puerto (9191) estará cerrado para todos. 2. Si alguien desea acceder por SSH al servidor no podrá obviamente, pues el puerto 9191 está cerrado… pero, si usamos una combinación ‘mágica’ o secreta se nos abrirá ese puerto, por ejemplo:
1. Hago un telnet al puerto 7000 del servidor 2. Hago otro telnet  al puerto 8000 del servidor 3. Hago otro telnet al puerto 9000 del servidor 4. El servidor detecta que alguien ha efectuado la combinación secreta (tocar los puertos 7000, 8000 y 9000 en ese orden) y abrirá el puerto 9191 para que se solicite el login por SSH (lo abrirá solo para la IP desde la cual se hizo la combinación de puertos satisfactoria). 5. Ahora para cerrar SSH simplemente hago un telnet al puerto 3500 6. Haré otro telnet al puerto 4500 7. Y finalmente otro telnet al puerto 5500 8. Al efectuar esta otra combinación secreta que el servidor detecta, se cerrará el puerto 9191 de nuevo.
O sea, explicando de forma aún más simple esto…
Con Port Knocking el servidor nuestro podrá tener determinados puertos cerrados, pero cuando el server detecte que desde X IP se efectuó la combinación de puertos correcta (configuración previamente definida en un archivo de configuración) ejecutará determinado comando en él mismo obviamente (comando también definido en el archivo de configuración).
¿Se entiende no? :)

¿Cómo instalar un daemon para Port Knocking?

Yo lo hago con el paquete kockd, que nos permitirá de forma muy pero muy simple y rápida poder implementar y configurar Port Knocking.
Instalen el paquete: knockd

¿Cómo configurar Port Knocking con knockd?

Una vez instalado pasamos a configurarlo, para ello editamos (como root) el archivo /etc/knockd.conf:
nano /etc/knockd.conf
Como podrán ver en ese archivo ya viene una configuración por defecto:
 Explicar la configuración por defecto es realmente simple.
- Primero, UseSyslog significa que para registrar actividad (log) se usará /var/log/syslog.
- Segundo, en la sección [openSSH] es donde obviamente irán las instrucciones para abrir SSH, primeramente tenemos la secuencia de puertos (la combinación secreta) que está configurada por defecto (puerto 7000, puerto 8000 y finalmente puerto 9000). Obviamente los puertos se pueden cambiar (de hecho lo recomiendo) así como no tienen que ser 3 obligatoriamente, pueden ser más o menos, depende de ustedes.
- Tercero, seq_timeout = 5 significa el tiempo que se esperará para que se efectúe la combinación secreta de puertos. Por defecto está puesto 5 segundos, esto significa que una vez empecemos a efectuar el port knocking (o sea, que cuando hagamos un telnet al puerto 7000) tenemos máximo 5 segundos para terminar la secuencia correcta, si pasan 5 segundos y no hemos culminado el port knocking entonces simplemente será como si la secuencia no hubiese sido válida.
- Cuarto, command no necesita de mucha explicación. Este será simplemente el comando que el servidor ejecutará cuando detecte la combinación antes definida. El comando que está puesto por defecto lo que hace es abrir el puerto 22 (cambien este puerto por el de su SSH) solo a la IP que efectuó la combinación correcta de puertos.
- Quinto, tcpflags = syn con esta línea especificamos el tipo de paquetes que reconocerá el servidor como válidos para el port knocking.
Luego está la sección para cerrar el SSH, que la configuración por defecto no es más que la misma secuencia de puertos anterior pero en orden contrario.
Aquí les dejo una configuración con algunas modificaciones:

 ¿Cómo iniciar el daemon knockd?

Para iniciarlo primero debemos modificar (como root) el archivo /etc/default/knockd:
nano /etc/default/knockd
Ahí cambiamos la línea número 12 que dice: “START_KNOCKD=0” y cambiar ese 0 por un 1, nos quedaría: “START_KNOCKD=1
Una vez hecho esto ahora simplemente lo iniciamos:
service knockd start
Y listo, ya está configurado y funcionando.

Port Knocking con knockd en funcionamiento!

Como pueden ver en la configuración anterior, si se hace un port knock al puerto 1000, luego al 2000 y finalmente al 3000 entonces se abrirá el puerto 2222 (mi SSH), pues bien aquí otro ordenador ejecutando el port knock:
Una vez presione [Enter] en el Knock No.1, en el No.2 y finalmente en el No.3 se abrirá el puerto, aquí les dejo el log:
Como pueden ver al hacer el knock al puerto 1000 se registró el stage (paso) 1, luego al 2000 será el stage 2 y finalmente al 3 con el 3000, al hacer esto se ejecuta el comando que le declaré en el .conf y listo.
Luego para cerrar el puerto solo sería hacer un knock al 9000, 8000 y finalmente al 7000, aquí les dejo el log:
Y bueno aquí termina la explicación de uso :D
Como pueden ver, el Port Knocking es verdaderamente interesante y útil, pues si bien no queremos simplemente abrir un puerto luego de determinada combinación de puertos, el comando u orden que el servidor ejecutará puede variar, o sea… en vez de abrir un puerto podemos declarar que mate un proceso, detenga un servicio como apache o mysql, etc … el límite es su imaginación.
El Port Knocking solo funciona cuando se tiene un servidor físico o cuando el servidor virtual es tecnología KVM. Si tu VPS (servidor virtual) es OpenVZ entonces el Port Knocking no creo que te funcione pues no puedes manipular directamente iptables
Bueno y hasta aquí el artículo… no soy ni de lejos un experto en esta materia pero quería compartir con ustedes este tan interesante proceso.

Enlace

jueves, 25 de octubre de 2012

HackRF: Una auténtica navaja suiza para hackers a US$ 300

Pese a los avances de la tecnología durante los últimos años, existe un aspecto de ella que no ha avanzado mucho durante las últimas décadas. Mientras que un computador es prácticamente una máquina universal capaz de procesar casi cualquier tipo de información, la tecnología de la radio lleva años estancada cumpliendo sólo un tipo de función: 3G, Wi-Fi, FM, AM, GPS, etcétera.
Para remediarlo, el co fundador de Great Scott GadgetsMichael Ossmann, está desarrollando un sistema de Radio Definido por Software (Software Defined Radio, SDR) que tendría la particularidad de cambiar de frecuencias de radio instantáneamente llamado HackRF. Una auténtica navaja suiza para los hackers.
En general, los dispositivos inalámbricos –como un celular– funcionan usando una banda de radiofrecuencia fija, sin embargo el HackRF podría potencialmente transmitir y recibir cualquier frecuencia de radio entre los 100 megahertz y los 6 gigahertz, un rango que abarcaría la radiodifusión, GSM, Bluetooth, Wi-Fi e incluso los controles remotos de las alarmas de autos.
Si bien ya existen bastantes dispositivos similares, el HackRF está diseñado para optimizar al máximo la versatilidad y su costo, pues tendría el tamaño de un pendrive USB a un precio estimado de US$ 300 (cuando finalmente se lance al mercado).
¿Y lo mejor? “HackRF está diseñado para satisfacer las necesidades de los profesionales de la seguridad inalámbrica, investigadores y aficionados. Es para hackers, en el más amplio sentido de la palabra“, afirmó Ossmann, quien afirma que gracias a que el proyecto es de Código Abierto (Open Source), le permitirá a los usuarios encontrar usos que ni siquiera han previsto.
Links:-Introducing HackRF (mossmann’s blog)-A radio for all frequencies to rule the airwaves (New Scientist)

jueves, 19 de julio de 2012

Saber qué paquetes están instalados

La consola de Linux - consultar qué aplicaciones tenemos instaladas

En distribuciones basadas en Debian, como Ubuntu, pueden consultarle los programas que tenemos instalados usando dpkg. Por supuesto que también puede consultarse con la herramienta de instalación de paquetes, pero ahora estamos hablando de cómo hacerlo a través de la consola.

Si usamos:

dpkg -l

veremos el listado completo de paquetes instalados. Es una buena opción si te sobra el tiempo :-) . Lo mejor es filtrar los resultados usando el comando grep. En el siguiente ejemplo vamos a ver cómo ver sólo los paquetes relacionados con postgresql:

usuario@homer-desktop:~$ dpkg -l | grep postgresql


Sencillo, cómodo y rápido.

Fuente

En muchas ocasiones he tenido que comprobar si tengo instalado o no algún paquete usando el Synaptic, con la molestia que ello supone (vago que es uno). Y como quiera que desde el inicio de sesión tengo un terminal semitransparente permanentemente en el fondo del escritorio, pues quería saber si existe alguna manera de hacerlo desde el terminal, y hoy lo he descubierto.

Haciendo aptitude show [nombre-paquete] me salen una serie de parámetros con sus respectivos valores sobre el paquete en cuestión (Paquete, Nuevo, Estado, Versión, Prioridad, etc.); pues bien, para saber si está instalado en el disco duro solo hay que fijarse en el parámetro Estado. Si su valor es instalado, entonces es que lo tengo instalado, y si pone sin instalar, quiere decir que no.

No es que haya descubierto la pólvora, pero esto me ahorrará abrir muchas veces el dichoso Synaptic. Que no es que tenga nada contra él, pero uno pertenece a la vieja escuela del M$-DOS y del Unix en monitor de fósforo verde (:P) y para ciertas cosas prefiero trabajar en modo consola a las ventanitas.

En fin, espero que esto le sirva a alguien, a mi me servirá para que no se me olvide.

AÑADIDO: acabo de descubrir otra forma no menos sencilla de hacerlo pero igual de útil
$ dpkg --get-selections | grep [paquete]
donde [paquete] puede ser el nombre del paquete o una palabra descriptiva (p.ej.: openoffice, y me salen todos los paquetes relacionados con openoffice que tengo instalados).

Fuente

lunes, 11 de junio de 2012

Bash: Las condiciones (if-then-else)

En esta ocasión les mostraré cómo hacer un script con condición en Bash, lo cual traducido es:
Si se cumple X cosa que ustedes deseen, se hace Y acción, si no se cumple entonces se hace otra acción.
Simple la explicación no :D
Ahora, he pensado durante unos minutos algún ejemplo para usar en este tutorial, se me ha ocurrido el siguiente dilema/problema/situación:
Estamos en la red de nuestra empresa, y deseamos saber si X ordenador está conectado a la red. Para ello hacemos un script que hará ping hacia ese ordenador, y si está en red (o sea, si devuelve el ping) nos dirá que SÍ, está en red, de lo contrario (o sea, que no esté en red) nos dirá que NO está en red.
Una vez hecho esto, ahora les explicaré cómo hacer un ciclo con condiciones :)
Eh aquí el código:
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
No se preocupen, les explico esto al detalle ;)
ping es el comando que usaremos, y nos dirá si esa PC está en red. Para decirle qué PC queremos comprobar si está o no en red, debemos cambiar DIRECCION-IP por obviamente, la dirección IP de la PC que deseamos comprobar.
Como ven, puse “-c 1“, lo cual nos es necesario. Cuando hacemos ping a un ordenador, esta acción no se detiene (el ping) hasta que nosotros mismos presionemos [Ctrl]+[C], por lo que poniendo “-c 1” le indicamos que haga solo una verificación (solo un intento de ping) y ningún otro, esto hará que se detenga al instante, o sea… comprobará si el ordenador está en red solo una vez.
Si tienen dudas con esto, sin pena… lo dicen y yo con MUCHO gusto se los explico de nuevo ;)
Ahora viene el ciclo, pues lo que acabo de explicar no es más que un comando/acción normal :D
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Para que entiendan esto, les explicaré un detalle sumamente importante de Bash :)
Los más conocedores del tema me podrían tildar de equivocado o algo así, pero bueno, esto lo escribo para lo novatos o menos expertos, mientras ellos lo entiendan entonces genial ;)
Sucede que como en Bash es algo así como 0 y 1, o sea, o estás vivo o estás muerto, cuando se ejecuta un comando o acción: O se ejecutó bien sin problemas (1), o hubo algún problema o error (0).
Nosotros efectuamos X acción o comando, y esto que hicimos puede haberse efectuado bien o mal, puedo haber tenido error o no, y aquí es donde está el detalle ;)
Si lo que mandamos a hacer (en este caso: ping -c 1 DIRECCION-IP) no dió error y se efectuó bien, entonces devolverá el valor: 1 . En caso contrario, y que la acción (o sea, el ping) no fuese exitoso, devolverá valor 0.
 Y finalmente, lo que significa el código anterior es esto:
Si se devolvió valor 0 entonces
Pon en pantalla el texto: “No está en red
De lo contrario (y que se devuelva NO 0, sino 1)
Pon en pantalla el texto: “Si está en red
Esto que les acabo de explicar, nos servirá en un futuro para muchísimas cosas, pues es realmente útil poder decir que si X acción dió error, haga Y acción, y en caso de que X acción no haya dado error, que haga Z acción.
Sé que a algunos podría liaros un poco, por lo que he intentado explicarlo de varias formas diferentes, intentando que todos lo entiendan de una vía u otra. En caso de que alguien se quede con dudas, me lo hace saber.
Ahora, hagamos nuestro script :D
Debemos seguir los pasos de este tutorial: Bash: Cómo hacer un script ejecutable
Luego copiemos el siguiente código en ese archivo (script.sh), y al final pongamos “exit” (sin las comillas):
ping -c 1 DIRECCION-IP
if [ $? -ne 0 ]; then
echo "No está en red"
else
echo "Sí está en red"
fi
Les debe quedar así (recuerden que deben haber cambiado DIRECCION-IP por la IP que desean):

Aquí pueden ver el script en ejecución:

Como ven, al final nos dice “Sí está en red:)
Lo importante aquí es que en realidad entiendan esto de las condiciones, por lo que les dejo otro código para volver a explicarlo, pero desde otro punto de vista.
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
Lo que esto significa es simple, les dejo línea a línea la explicación:
1ra línea: Lo que escribamos, ese será el valor de la variable “texto” (sin las comillas).
2da línea: Comprueba si el contenido de la variable (lo que acabamos de escribir) es 3.
3ra línea: En caso de ser 3, nos mostrará el texto “Correcto” (sin las comillas).
4ta línea: De lo contrario (o sea, en caso de que no hayamos escribo 3).
5ta línea: Nos mostrará el texto “Incorrecto” (sin las comillas).
6ta línea: Fin de la condición.
Como han podido darse cuenta, si ponemos echo y seguidamente entre comillas dobles () un texto, esto hará que se muestre en la terminal ese texto. O sea, si ponemos:
echo "esto es una prueba"
Nos mostrará en la terminal el texto: esto es una prueba
Pero volviendo a este segundo ejemplo, les mostraré la utilidad (y ejecución) de este segundo script con algo MUY simple :D … el típico “cuánto es 1 + 2?
Les dejo el código del script completo:
#!/bin/bash
# -*- ENCODING: UTF-8 -*-
echo "¿Cuánto es 1 + 2?"
read "texto"
if [ "$texto" = "3" ]; then
echo "Correcto"
else
echo "Incorrecto"
fi
exit
Les dejo aquí cómo funciona el script:

Y bueno… nada más que agregar.
Esto es algo elemental, simple sí, pero aún así he intentado explicarlo lo mejor posible, pues no todos tienen alma de programador, y muchas veces necesitamos hacer scripts como estos (o similares), de cualquier forma espero que este artículo le sea de utilidad a alguien :)
Cualquier duda o pregunta, queja o sugerencia por favor, la dejan acá, con mucho gusto les respondo y así, todos aprendemos un poco más :D 

jueves, 7 de junio de 2012

Newrez, script útil para aumentar la resolución en netbooks

Los scripts de Linux son una forma potente y sencilla de ofrecer tareas útiles para el usuario, y en esta ocasión hemos encontrado uno especialmente orientado a usuarios de netbooks. Se trata de Newrez, un script para Nautilus que permite mejorar la resolución de estos portátiles y aplicar resoluciones no nativas.

Por ejemplo, lo normal es que la resolución en netbooks sea de 1.024×600, pero con Newrez podremos cambiar esa resolución para situarla por ejemplo en 1.280×800 o incluso a mayores cifras.
Esto puede ser interesante para usuarios que necesiten esa mejora visual para mostrar aplicaciones que no se muestran correctamente en la resolución convencional de los netbooks. Como indican en WMLCloud, no se hacen cosas raras a nivel hardware, sino que se construye una imagen de alta resolución en un buffer que se escala para ajustarse a nuestra pantalla física.
Para usar este script lo único que tendremos que hacer es descargarlo desde este enlace, extraer los ficheros del script (newrez y newrez-v) a  ~/.Gnome2 –> Nautilus-Scripts. Si no vemos la carpeta “.Gnome2″ podemos pulsar Ctrl+H en Nautilus para mostrar los elementos ocultos.
Una vez metidos en esa carpeta, podremos pulsar con el botón derecho en la pantalla, lo que hará que aparezca un nuevo menú Scripts con los dos scripts de newrez, y eligiéndolos podremos establecer la resolución que queremos mostrar en cada momento. El segundo script (newrez-v) es para usuarios que no pueden ejecutar el script original, y que por lo visto es una versión “a prueba de fallos”.

Fuente

martes, 5 de junio de 2012

Gestión de documentos Open Source

OpenKM es un Sistema de Gestión Documental Open Source, que debido a sus características, puede usarse tanto en grandes empresas como en las PYMES. Es una herramienta muy útil para Gestión del Conocimiento, proporcionando una alternativa flexible y con menores costes que otras aplicaciones propietarias.

El uso de un Sistema de Gestión del Conocimiento en la empresa ayuda a gestionar, de forma más eficiente, la inteligencia colectiva que reside en los recursos humanos de la compañía; esto implica un incremento de la productividad a corto plazo. A través de estos sistemas, tanto la información como el conocimiento generado en la organización, están disponibles globalmente.

Hacer fácil lo complejo

  • Web 2.0. UI
  • Drag and drop.
  • Control de versiones.
  • Búsqueda por contenido y metadata.
  • Integración con LDAP o DBMS.
  • API de webservices .
  • Soporta los principales DBMS.
  • Traducido a mas de 32 idiomas.
  • WebDAV.
  • Workflow (JBPM).
  • Jasper reports.
  • OCR.
  • Soporte para dispositivos móbiles.
  • Addins.
  • Thesaurus.
  • Planificador de tarea
Fuente

domingo, 3 de junio de 2012

Dell apuesta por servidores bajo ARM

Dell prepara el lanzamiento a medio plazo de servidores bajo arquitectura RISC ARM, uniéndose con el proyecto ‘Copper’ a HP y otros fabricantes.
Dell confirma así el interés de la industria por la utilización de estos chips (no muy distintos al que utilizan dispositivos como el iPhone o el iPad) y que ofrecen mayor rendimiento por vatio y menor precio que los basados en la arquitectura x86

“El mercado de servidores basados ??en ARM se está acercando a un punto de inflexión, marcado por un interés del cliente cada vez mayor en las pruebas y el desarrollo de aplicaciones… Creemos que ahora es el momento adecuado para ayudar a fomentar el desarrollo y prueba de sistemas operativos y aplicaciones para servidores ARM, explican desde Dell.
Por ello, Dell lanzará “en la fecha apropiada” servidores propios con ARM bajo la serie PowerEdge C5000, con SoC Marvell Armada XP que incluye procesadores de cuádruple núcleo a 1,6 GHz
Además, Dell entregará equipos a Canonical y Cloudera para apoyar las actividades de desarrollo y ofrecerá acceso a clientes seleccionados a los clústeres de servidores ‘Copper’ para pruebas remotas de esta arquitectura y a través de su asociación con Texas Advanced Computing Center (TACC)
Un amplio esfuerzo consecuencia del “gran interés por esta arquitectura expresado por los clientes” que va a suponer que ARM consiga el 20 por ciento del mercado de servidores en los próximos años, según los analistas.
El interés por esta arquitectura se muestra también en la preocupación del gigante Intel que ya prepara la entrada de ARM en el sector con microservidores basados en procesadores Atom de bajo consumo.

Fuente