database - El mejor método para asegurar la conexión a firebird a través de internet
security tunnel (4)
Tengo una aplicación cliente-servidor que utiliza un servidor firebird 2.5 a través de Internet. He encontrado el problema de tener un acceso seguro a las bases de datos de FB y, como primer acercamiento, intenté resolver este problema integrando una solución de túnel en la aplicación (el software STunnel más exactamente). PERO, este enfoque tiene muchos aspectos: - esto agrega más consumo de recursos (CPU, memoria, subprocesos) en el lado del cliente / servidor, - la implementación de sotware se convierte en un problema serio porque el software STunnel está escrito como un Servicio WinNT, no como un DLL o un componente (el servicio WinNT necesita privilegios de administrador para la instalación) y mi aplicación cliente debe ejecutarse sin instalación.
Entonces, decidí tomar el toro por el cuerno (o el pájaro por las plumas cuando hablamos de Firebird). He descargado el código fuente de Firebird 2.5 y he inyectado un código de tunelización seguro directamente en su capa de comunicación de bajo nivel (la capa de socket INET). AHORA, el cifrado / descifrado se realiza directamente mediante el motor firebird para cada paquete TCP / IP.
¿Qué opinas sobre este enfoque frente a la tunelización externa?
En general, mi opinión sobre el código crítico de seguridad es la siguiente: "desea tener tantos ojos como sea posible sobre el código en cuestión y no desea mantenerlo usted mismo". La razón es que todos cometemos errores y, en un entorno de colaboración, es más probable que se detecten. Además, es probable que estos se prueben mejor.
En mi opinión, hay algunas soluciones aceptables aquí. Todos los enfoques agregan cierta sobrecarga, pero esta sobrecarga podría, si lo desea, ser manejada en un servidor separado si es necesario. Las posibilidades incluyen:
stunnel
IPSec (uno de mis favoritos). Tenga en cuenta que con IPSec puede crear túneles, que luego pueden reenviarse a otros hosts, de modo que puede mover su administración de VPN a una computadora que no sea su host de db. También puede hacer IPSec directamente al host.
PPTP
Software vpn multiplataforma como tinc y similares.
Tenga en cuenta que aquí, en materia de seguridad, no hay almuerzo gratis y debe revisar sus requisitos con mucho cuidado y asegurarse de que comprende a fondo las soluciones con las que está trabajando.
La forma más rápida de hacer las cosas no sería mejorar firebird, sino mejorar su conexión. Obtenga dos dispositivos de firewall que pueden realizar la autenticación con certificado SSL y colóquelos frente a su servidor de base de datos y su dispositivo firebird. Deje que los dispositivos de firewall hagan el cifrado / descifrado, y haga que su servidor de DB haga su trabajo sin la molestia de entrometerse con cada paquete.
La sugerencia de stunnel es buena, pero, si eso no es adecuado, puede ejecutar una verdadera clase de VPN confiable, en una máquina virtual. (Intenta decirlo unas cuantas veces). Es un poco extraño, pero funcionaría algo como esto:
- Configura una VM en la máquina firebird y dale a esa VM dos interfaces, una que salga a tu LAN externa (mejor si realmente puedes vincularla a una tarjeta LAN) y otra que es una LAN solo para el host para firebird.
- Cargue un servidor openvpn en esa máquina virtual y use certificados de cliente y servidor
- Ejecute su cliente openvpn en sus clientes
Extraño, pero asegura lo siguiente:
- Sus clientes no pueden conectarse al servidor a menos que el cliente y el servidor estén de acuerdo con los certificados
- Su servicio firebird solo acepta conexiones a través de este enlace VPN de confianza.
- Técnicamente, las entidades locales aún podrían conectarse al servidor firebird fuera de la VPN si lo deseara, por ejemplo, una consola de desarrollador en la misma LAN local.
Recomendaría envolver el intercambio de datos en el flujo SSL / TLS, desde ambos lados. Esto es estándar probado Mientras que las implementaciones personalizadas, con claves estáticas, pueden ser inseguras.
Por ejemplo, el modo CTR con constante IV puede revelar una gran cantidad de información, ya que solo encripta el vector incrementado y lo carga con datos, por lo que al XORing dos paquetes encriptados se mostrará la versión mejorada de los paquetes sin encriptar.