Usando Zebedee con Firebird

18 comentarios

Como hemos visto en este artículo:

Proteger a las Bases de Datos visibles en Internet

Internet es muy inseguro y siempre existe la posibilidad de que algún hacker esté metiendo sus narices donde no debe y es nuestra responsabilidad evitar que curiosee en la Base de Datos o peor aún, que la corrompa.

Si un hacker irrumpió en la Base de Datos la culpa es toda tuya por no haberla protegido debidamente.

Un programa que nos puede ayudar con la tarea de protección es Zebedee.

¿Qué hace Zebedee?

  • Crea un túnel entre dos computadoras
  • Envía y recibe datos comprimidos y encriptados a través de ese túnel

Al comprimir los datos, el tamaño de éstos disminuye, al encriptarlos evita (o disminuye muchísimo) la posibilidad de que alguien pueda ver lo que se está enviando.

Por lo tanto se consiguen dos cosas:

  1. que los datos viajen más seguros
  2. que la transferencia se realice más rápido.

¿Cómo funciona Zebedee?

En forma muy similar a como funciona Firebird, o sea a través de un Servidor y de uno o varios Clientes.

  • En una computadora se instala el Servidor del Zebedee. Su tarea es “escuchar” las conexiones de los Clientes. En otras palabras, está atento para responder las peticiones de los Clientes. Cuando un Cliente le hace una petición el Servidor comprime y encripta los datos pedidos y luego se los envía al Cliente
  • En las demás computadoras se instala el Cliente del Zebedee. Su tarea es pedirle al Servidor del Zebedee que le envíe datos. Cuando recibe esos datos los descomprime, los desencripta, y los envía  a quien se los había pedido (el Cliente de Firebird).

El Cliente de Firebird —> a través del Cliente de Zebedee —> a través del Servidor de Zebedee —> le solicita algo al Servidor de Firebird

El Servidor de Firebird —> a través del Servidor de Zebedee —> a través del Cliente de Zebedee —> le responde al Cliente de Firebird

¿Dónde se instala el Servidor de Zebedee?

En cualquier computadora, no necesariamente en la misma donde está instalado el Servidor del Firebird

¿Dónde se instala el Cliente del Zebedee?

En cualquier computadora, no necesariamente en una que tenga instalado un Cliente del Firebird

¿Cómo se realiza la conexión?

A través de un puerto, el cual normalmente es el 11.965 y es el único puerto que debería estar libre para conectarse a Internet. Todos los demás puertos, incluyendo lógicamente el 3.050 (o el que use el Servidor del Firebird), deben estar bloqueados.

¿Cómo se abre un puerto?

El firewall del Windows (o cualquier otro firewall que estés usando) normalmente tiene bloqueados a los puertos. Desde luego que es obligatorio que uses un firewall, esa es una elemental medida de seguridad en cualquier computadora que esté conectada a Internet.

Para abrir el puerto 11.965 con el firewall de Windows:

Inicio | Panel de Control | Firewall de Windows | Configuración avanzada | Reglas de entrada | Nueva regla… | Puerto | TCP | Puertos locales específicos | 11965 | Permitir la conexión | (Dominio, Privado, Público) | Zebedee11965

Zebedee5

Captura 1. Si haces clic en la imagen la verás más grande

Zebedee6

Captura 2. Si haces clic en la imagen la verás más grande

Zebedee7

Captura 3. Si haces clic en la imagen la verás más grande

Conexión no segura

En el Gráfico 1 puedes ver lo que sucede si el Servidor del Firebird está conectado a Internet sin usar a Zebedee (o algún programa similar)

Zebedee2

Gráfico 1. Si haces clic en la imagen la verás más grande

Conexiones seguras

En el Gráfico 2 puedes ver algunas de las configuraciones de protección posibles:

Zebedee1

Gráfico 2. Si haces clic en la imagen la verás más grande

El problema con la Opción 1 es que ambos Servidores están en la misma computadora. Y para que Firebird (o cualquier otro SGBDR) funcione al 100% lo recomendable es que se encuentre en una computadora dedicada, en una computadora donde está el Servidor del Firebird y ningún otro programa de uso autónomo, ni siquiera antivirus. Desde luego que la Opción 1 funcionará bien, pero de ser posible deberías elegir la Opción 3. Si usas la Opción 1 una medida elemental de precaución es que bloquees con tu firewall el puerto 3.050 (o el que sea que esté usando el Firebird) para evitar conexiones directas. Si no bloqueas el puerto 3.050 es como si no hubieras instalado el Zebedee, al menos en cuanto a seguridad se refiere.

La Opción 2 es la única que se puede usar si el usuario se conecta a través de su notebook (también llamada laptop) por ejemplo mientras está viajando.

La Opción 3 es posible (y preferible) dentro de la red local de la empresa. Se usa una computadora para tener en ella el Servidor del Firebird, cualquier otra computadora para el Servidor del Zebedee, cualquier otra computadora para el Cliente del Zebedee y todos los Clientes del Firebird se conectan al Servidor del Firebird a través primero del Cliente de Zebedee y luego del Servidor de Zebedee. La gran ventaja de la Opción 3 es que el Cliente del Zebedee se instala en una sola computadora y entonces no será necesario que cada vez que la empresa adquiera una nueva computadora se tenga que instalar en ella el Cliente del Zebedee. Las empresas medianas y grandes constantemente están aquiriendo nuevas computadoras y si se debe instalar en cada nueva computadora adquirida el Cliente del Zebedee eso causará un trastorno innecesario ya que puede ser evitado.

¿De dónde se puede descargar Zebedee?

http://www.winton.org.uk/zebedee/download.html

http://www.mediafire.com/download/3o4p0fs6eaxbqtb/Zebedee253setup.exe

Configurando a Zebedee

Zebedee debe ser configurado, sí o sí. No es un programa que se instala y ya funciona. Se lo puede configurar a través de la línea de comandos o a través de un archivo de configuración. Yo prefiero usar un archivo de configuración porque me da mucho más poder, pero en este artículo mostraré solamente como se usa con la línea de comandos. Puedes leer la documentación de Zebedee para saber como usar un archivo de configuración.

Opción 1. El Servidor del Firebird y el Servidor de Zebedee están en la misma computadora

En la computadora que quieres que actúe como Servidor de Zebedee debes escribir:

Zebedee8

Captura 4. Si haces clic en la imagen la verás más grande

En el comando ZEBEDEE -s localhost:3050 la opción -s significa que Zebedee se está ejecutando como Servidor, localhost:3050 significa que estará escuchando al puerto 3.050. En otras palabras, que todo lo que envíe a través de ese puerto lo hará en forma comprimida y encriptada.

En las computadoras Cliente de Zebedee debes escribir:

Zebedee9

Captura 5. Si haces clic en la imagen la verás más grande

El comando de arriba significa: “Zebedee, todo lo que leas a través del puerto 3.051 debes enviarlo al puerto 3.050 de la computadora que tiene el IP 99.999.999.99” (por supuesto que debes reemplazar los números 99.999.999.99 por los que correspondan a la IP de la computadora donde se encuentra el Servidor del Zebedee).

Para conectarte a una Base de Datos de Firebird debes escribir:

Zebedee10

Captura 6. Si haces clic en la imagen la verás más grande

Con lo cual estás diciendo que quieres conectarte a través del puerto local 3051 a esa Base de Datos. Pero como ya habíamos visto todo lo que se envía al puerto local 3.051 se reenvía al puerto remoto 3.050, usando para ello al puerto remoto 11.965.

Local 3.051 —> remoto 11.965 —> remoto 3.050

Opción 2 y Opción 3. El Servidor del Firebird y el Servidor de Zebedee están computadoras distintas

Zebedee11

Captura 7. Si haces clic en la imagen la verás más grande

Aquí lo que se le dice es: “Zebedee, utiliza el puerto local 3.050 para comunicarte con la computadora cuya IP es 192.168.0.2 a través del puerto 3.050 de esa computadora”. Desde luego que la computadora remota podría estar usando otro puerto, no necesariamente el 3.050.

El comando en el Cliente de Zebedee es el mismo que vimos en la Captura 5.

La conexión a una Base de Datos es igual a como vimos en la Captura 6.

Conclusión:

Si necesitas que tu Base de Datos pueda ser accedida desde Internet entonces es obligatorio que uses Zebedee (o algún programa similar) para protegerla de intrusos. Internet es muy insegura y los hackers siempre están a la pesca de computadoras o bases de datos desprotegidas y aunque creas que no tienes algo valioso que les pueda interesar podrían destruir tu Base de Datos sólo por maldad y porque quieren y pueden hacerlo. Y de paso, para enseñarte una lección relacionada con la seguridad.

Si usas Zebedee entonces el único puerto abierto, el único puerto que puede ser usado para conectarse a Internet debe ser el 11.965 y todos los demás puertos (incluyendo por supuesto el 3.050 ó el que use el Servidor del Firebird), deben estar bloqueados.

Artículos relacionados:

Usando Zebedee con Firebird. Parte 2

Ejemplos del uso de Zebedee con Firebird

Proteger a las bases de datos visibles en Internet

Conexión a través de Internet

El índice del blog Firebird21

El foro del blog Firebird21

Enlaces:

http://www.winton.org.uk/zebedee/

http://www.intitec.com/varios/firebird_zebedee_esp.pdf

Precaución para no dejar accesibles las bases de datos

7 comentarios

Si usas un programa de administración gráfica como el EMS SQL Manager o el IBExpert notarás que cada vez que ejecutas ese programa todas las bases de datos que habías dejado abiertas la última vez que las usaste están disponibles.

Eso es un riesgo potencial de seguridad porque cualquier persona con acceso a tu computadora podría ver esas bases de datos y por ignorancia o mala intención borrar o modificar los datos o los metadatos.

Por ejemplo, hace unos segundos al ejecutar el EMS SQL Manager esto es lo que ví:

PRECAUCION1

 

(si haces clic en la imagen la verás más grande)

simplemente con doble clic sobre el nombre de cualquiera de esas bases de datos bastaría para abrirla. Y una vez que está abierta la persona ignorante o malintencionada puede causar muchos problemas.

Por lo tanto, si además de tí alguien más puede usar tu computadora una elemental medida de precaución es cerrar todas esas bases de datos antes de salir del programa, o mejor aún desregistrar al host. Para ello:

PRECAUCION2

(si haces clic en la imagen la verás más grande)

 Y así podrás dormir tranquilo, porque si sales del EMS SQL Manager o del IBExpert sin tomar la precaución de desregistrar el host o las bases de datos podrías encontrarte con sorpresas muy desagradables al regresar.

Artículo relacionado:

El índice del blog Firebird21

El archivo SECURITY2.FDB

1 comentario

Firebird guarda los nombres y las contraseñas de los usuarios en un archivo llamado SECURITY2.FDB y que se encuentra en la misma carpeta donde instalaste al Firebird. Por ejemplo, en la carpeta: C:\Archivos de Programa\Firebird\Firebird_2_5\

SECURITY2.FDB es una Base de Datos internamente igual a cualquier otra Base de Datos de Firebird pero con una gran diferencia: no es posible conectarse a ella. Ni siquiera el usuario SYSDBA puede hacerlo.

SECURITY2_1

 

(Haciendo clic en la imagen la verás más grande)

Como ves, el intento de conexión fue rechazado.

Sin embargo, hay un truco para hacerlo, si te interesa ver su contenido y eres curioso:

  1. Detienes el Servidor del Firebird (Inicio | Panel de control | Firebird Server Manager | Stop)
  2. Copias el archivo SECURITY2.FDB con otro nombre (Por ejemplo con el nombre SECURITY_COPIA.FDB)
  3. Reinicias el Servidor del Firebird (Inicio | Panel de control | Firebird Server Manager | Start)
  4. Te conectas a la Base de Datos SECURITY_COPIA.FDB

SECURITY2_2

 

(Haciendo clic en la imagen la verás más grande)

Con la Base de Datos renombrada, la conexión se realizó exitosamente.

Si queremos ver las tablas que tiene esta Base de Datos usamos el comando SHOW TABLES;

SECURITY2_3

 

(Haciendo clic en la imagen la verás más grande)

Esta Base de Datos tiene una sola tabla, cuyo nombre es RDB$USERS.

Para ver la estructura de esa tabla escribimos el comando SHOW TABLE RDB$USERS

SECURITY2_4

(Haciendo clic en la imagen la verás más grande)

También podemos conectarnos usando el programa EMS SQL Manager, pero siempre con la copia, nunca podremos conseguirlo si lo intentamos con la Base de Datos original.

SECURITY2_5

(Haciendo clic en la imagen la verás más grande)

 Al hacer doble clic sobre el nombre de la tabla vemos su estructura:

SECURITY2_6

 

(Haciendo clic en la imagen la verás más grande)

Y al hacer click sobre la pestaña Data vemos el contenido de esa tabla:

SECURITY2_7

 

(Haciendo clic en la imagen la verás más grande)

Como puedes ver, las contraseñas (passwords) de los usuarios están encriptadas. El algoritmo usado es muy eficiente y no podrás conocer cual es la contraseña de un usuario aunque lo intentes.

Recuerda que el archivo SECURITY2.FDB no se puede copiar ni borrar ni renombrar si el Servidor del Firebird está corriendo. Para que puedas realizar esas tareas el Servidor debe estar detenido (si no recuerdas como detenerlo puedes leer al principio de este artículo).

Normalmente nunca tendrías que hacer algo así, pero hay una excepción: cuando copias la Base de Datos que está en producción (o sea: a la que normalmente se conectan los usuarios) a otra computadora. En este caso, en lugar de estar volviendo a escribir los nombres y contraseñas de cada usuario (que pueden ser decenas o cientos) es mucho más rápido, práctico y fácil, copiar el archivo SECURITY2.FDB a la nueva computadora.

 

Proteger a las Bases de Datos visibles en Internet

9 comentarios

En ocasiones necesitas que tu Base de Datos pueda ser accedida desde Internet, generalmente a los usuarios les gusta tener esa opción: poder conectarse usando su notebook, su tableta, su teléfono celular o estando en un cybercafé es muy atractivo a simple vista.

Sin embargo como profesional informático debes saber que cualquier Base de Datos que no esté lo suficientemente protegida está en grave riesgo y puede ser atacada por los hackers. Una IP pública sin protección es una invitación para que cualquier malhechor intente el acceso.

cyberattack

Dos computadoras que se encuentran en Internet generalmente no tienen un comunicación directa entre ellas sino que la comunicación va pasando de servidor a servidor hasta llegar a su destino. A esas computadoras intermedias se las llama “nodos” y en algunos casos podría haber decenas de nodos entre ambas. Como se ve en el gráfico superior, para ir desde “A” hasta “B” se requiere pasar por varios nodos. ¿Y cuál es el problema? que cualquiera de esos nodos puede interceptar los datos que pasan por él y enterarse de todo.

Los hackers utilizan programas que les permiten revisar en cuestión de minutos todas las IP que se encuentran en un rango. Por ejemplo, podrían buscar todas las IP públicas que se encuentren activas entre 200.120.60.0 y 200.120.90.255 y eso solamente les tomará unos cuantos minutos. Anotan los números de las que están activas e intentan realizar la conexión. Para eso también tienen programas que les facilitan la tarea.

Y si la IP donde se encuentra tu Base de Datos está dentro del rango en el cual algún hacker está buscando, estás corriendo un riesgo gravísimo. Y no te olvides que en el mundo hay cientos de miles de hackers y muchísimos de ellos están “trabajando” en este mismo momento.

Para que tu conexión sea segura y sin riesgos (o con un riesgo pequeñisimo) lo que necesitas es un túnel privado de conexión.

¿Qué es un túnel privado?

Es una comunicación que se realiza entre dos computadoras. La computadora que envía los datos los encripta y los comprime, la computadora que recibe los datos los descomprime y los desencripta.

VPN

Esto se realiza a través de una VPN (Virtual Private Network) o red privada virtual. Se le dice virtual porque usa la misma conexión de Internet, no una conexión propia con cables propios sino un programa que se encarga de realizar la tarea. Y se le dice privada porque solamente quienes conozcan las contraseñas podrán conectarse a esta red y la información siempre viajará encriptada, por lo cual aunque sea interceptada no hay riesgo de que sea fácilmente leída.

Dos programas que se usan mucho para crear y usar los túneles son ZebeDee y OpenVPN, cuyos enlaces son:

http://www.winton.org.uk/zebedee/

http://openvpn.net/

Como los datos viajan encriptados:

  • el riesgo de ser leídos por personas no autorizadas disminuye muchísimo
  • el viaje es más rápido porque la cantidad de datos que viajan es menor

Conclusión:

Si tu Base de Datos será accedida desde Internet debes protegerla con una VPN (red privada virtual) o de lo contrario estará muy expuesta a ser atacada por los hackers. Y aunque tú creas que no hay en ella nada importante los hackers podrían destruirla y corromperla o llenarla de basura con todos los perjuicios que dichas acciones causarían (podrían hacer eso sólo por maldad, porque quieren y pueden hacerlo). Usando una VPN obtendrás dos beneficios: que el riesgo de ser atacada disminuya muchísimo y que las velocidades de las operaciones aumenten mucho.

La gran mayoría de los hackers desiste de atacar las computadoras o bases de datos que están muy protegidas, salvo que crean que obtener éxito les resultará de mucho provecho. Por lo tanto, cuanto más protejas a tus bases de datos, mucho mejor.

Artículos relacionados:

Usando Zebedee con Firebird

Usando Zebedee con Firebird. Parte 2

El índice del blog Firebird21

Aumentando la seguridad con ALIASES.CONF

14 comentarios

En la carpeta donde instalaste el Firebird (por ejemplo en C:\ARCHIVOS DE PROGRAMA\FIREBIRD\FIREBIRD_2_5) encontrarás un archivo cuyo nombre es ALIASES.CONF

¿Para qué sirve el archivo ALIASES.CONF?

Para que les des un nombre abreviado a tus bases de datos y con eso conseguirás dos cosas:

  • Escribir menos cuando quieras conectarte a una Base de Datos
  • Aumentar la seguridad

¿Cómo especifico cuál será el alias de mi Base de Datos?

Abres el archivo ALIASES.CONF y escribes el nombre del alias, un símbolo igual y la ruta y el nombre completos de tu Base de Datos, por ejemplo:

CONTA=C:\MisBasesDatos\Contabilidad.fdb

Escribir menos cuando quieras conectarte a una Base de Datos

Como tu Base de Datos tiene un alias (es decir: un apodo, un sobrenombre, un nombre alternativo) entonces el Firebird puede usar ese alias para la conexión, por ejemplo:

CONNECT CONTA USER SYSDBA PASSWORD masterkey;

En cambio, si no usas un alias tendrías que escribir:

CONNECT C:\MisBasesDatos\Contabilidad.fdb USER SYSDBA PASSWORD masterkey;

Como puedes ver, se escribió mucho menos al usar un alias y además es más fácil recordar una sola palabra (en este caso: CONTA) que toda la ruta y el nombre de la Base de Datos (en este caso: C:\MisBasesDatos\Contabilidad.fdb)

Aumentar la seguridad

Al usar un alias también aumentas la seguridad de los datos, sobre todo si lo combinas con la entrada DatabaseAccess, tal como puedes leer en este artículo:

https://firebird21.wordpress.com/2013/04/25/restringiendo-el-acceso-a-las-bases-de-datos/

Si alguien quiere atacar tu Base de Datos y lo único que sabe de ella es que se llama CONTA (por ejemplo, claro) pero no tiene la menor idea de donde se encuentra le resultará mucho más difícil que si sabe que se llama Contabilidad.fdb y que se encuentra en la carpeta C:\MisBasesDatos\

Al usar un alias (CONTA, en este ejemplo) le das muy poca información y le complicas la vida al atacante. Y muchísimo más se la complicarías si en lugar de llamar a tu alias CONTA lo llamaras de forma mucho menos informativa como por ejemplo: XDFDRT

(Encontrar algo así le puede dar un ataque cerebral a cualquier atacante)

Conclusión

Que tus bases de datos tengan alias es muy bueno porque te permite escribir menos y aumentar la seguridad. El Firebird te da esa posibilidad, por algo está allí, deberías usarla.

Artículos relacionados:

El índice del blog Firebird21

El foro del blog Firebird21

Restringiendo el acceso a las Bases de Datos

4 comentarios

Cuando se instala el Servidor del Firebird por defecto permite que las bases de datos se encuentren en cualquier carpeta de cualquier disco que esté conectado a esa computadora.

Aunque esto les facilita la tarea a los programadores (porque pueden crear o copiar sus bases de datos en cualquier carpeta que deseen) tiene un potencial y grave riesgo de seguridad: ese mismo Servidor podría estar siendo usado para conectarse a otras bases de datos de esa computadora.

Afortunadamente, nosotros podemos restringir a cuales carpetas o a cuales bases de datos el Servidor permitirá que los usuarios se conecten.

En el archivo FIREBIRD.CONF que se encuentra en la carpeta donde instalaste el Firebird (por ejemplo en: C:\ARCHIVOS DE PROGRAMA\FIREBIRD\FIREBIRD_2_5) hay una entrada denominada DatabaseAccess

DatabaseAccess puede ser:

  • None
  • Restrict
  • Full

Si es None entonces el Servidor solamente permitirá la conexión a las bases de datos listadas en el archivo ALIASES.CONF (que también se encuentra en la misma carpeta donde instalaste el Firebird)

Si es Restrict entonces el Servidor solamente permitirá conectarse a las bases de datos que se encuentren en la/s carpeta/s listada/s a continuación (separadas por punto y coma si hay más de una)

Si es Full entonces el Servidor permitirá conectarse a cualquier base de datos que se encuentre en cualquier carpeta de cualquier disco duro de esa computadora

Ejemplos:

DatabaseAccess = None

DatabaseAccess = Restrict C:\MisBasesDatos

DatabaseAccess = Restrict C:\MisBasesDatos;D:\MisBackups

DatabaseAccess = Full

En el primer ejemplo, como el acceso es None el Servidor solamente permitirá que los usuarios se conecten a las bases de datos listadas en el archivo ALIASES.CONF

En el segundo ejemplo, como el acceso es Restrict el Servidor solamente permitirá conectarse a las bases de datos que se encuentren en la carpeta C:\MisBasesDatos

En el tercer ejemplo, como el acceso es Restrict el Servidor solamente permitirá conectarse a las bases de datos que se encuentren en las carpetas C:\MisBasesDatos o D:\MisBackups (los nombres de las carpetas fueron separados con un punto y coma)

En el cuarto ejemplo, como el acceso es Full el Servidor permitirá conectarse a cualquier base de datos que se encuentre en cualquier carpeta de cualquier disco duro de la computadora

NOTA: Fíjate que se quitó el símbolo de numeral (#) que se encontraba delante de la palabra DatabaseAccess, eso es porque el símbolo de numeral (#) le indica al Firebird que lo que está a continuación es un comentario.

Conclusión

Para tener mayor seguridad y disminuir la probabilidad de ataques maliciosos debemos restringir el acceso a las bases de datos. Lo recomendable es que el valor de la entrada DatabaseAccess sea None lo cual nos asegurará que solamente a las bases de datos listadas en el archivo ALIASES.CONF los usuarios puedan conectarse. Si por algún motivo eso no es admisible entonces el acceso debería ser Restrict pero nunca deberíamos dejarlo en Full.

NOTA: Cualquier cambio que realices en el archivo FIREBIRD.CONF solamente tendrá efecto después que reinicies el Servidor del Firebird o reinicies la computadora donde se encuentra el Servidor del Firebird.

Newer Entries