¿Cómo podría hacer un túnel de todas las acciones que hago en mi VPS desde mi navegador (como las acciones de PHPmyadmin)?

1

No soy del campo de la seguridad de la información, lo siento mucho si algo que escribí a continuación le parece patético.

Debo defender la base de datos de mi servidor y para eso filtré el puerto 3306 con CSF-LFD y ahora controlo mi base de datos solo internamente a través del puerto 80, principalmente a través de PHPmyadmin (PMA) durante 2 horas cada vez (hice que se instale PMA y eliminado automáticamente después de 2 horas por un script).

Estas 2 acciones (bloquear el puerto y usar PMA temporales) se consideran bastante seguras, pero hay una última cosa que quiero hacer para garantizar una protección adicional:

Me han dicho que podría realizar cada transición de datos basada en el puerto 80 entre mi PC y mi VPS, para cifrarlos.

Pensé en hacer esto con un túnel a través de OpenSSH, así que al principio probé un comando similar al siguiente, con mi usuario, ip y clave privada. La ejecución me llevó a mi VPS y pude operarlo bien pero no hubo encriptación para las acciones que realicé desde mi navegador web:

ssh [email protected] -L 22:localhost:22 -L 80:localhost:80 -i ~/.ssh/user_private_key 

Debido a que el comando aparentemente no respondió a mi necesidad, me dirigí a la compañía de alojamiento y un asesor de soporte me dijo que es obvio porque ya uso OpenSSH para iniciar sesión en mi propio VPS y cualquier cifrado adicional que haga es siempre solo sesión (CLI) basado en lugar de GUI, por lo tanto, no afectará la transición de datos realizada desde el navegador (debo decir que me suena ilógico). Si hacemos un túnel entre un puerto y otro, entre 80 y 80, entonces todo lo que pasa a través de él. ya sea de CLI o GUI debe estar cifrado).

Aprendí que podría usar el proxy SOCKS en su lugar. SOCKS es realmente la única manera posible de lograr este cifrado. ¿Realmente no puedo usar OpenSSH?

Gracias,

Actualización para Xiong Chaimov:

Xiong me preguntó en los comentarios a continuación:

  

Lo que te llevó a la conclusión de que las acciones que tomaste no fueron   encriptado?

Dos cosas me llevaron a creer que no había túneles entre los dos bordes del puerto 80:

.1. Error de comando (como es):

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
bind: Address already in use

.2. Netstat I / O:

netstat -n --protocol inet | grep ':22':

tcp        0     2.2.2.2:22         1.1.1.1:49214     ESTABLISHED

-

netstat -n --protocol inet | grep ':80'

No output...
    
pregunta JohnDoea 28.12.2016 - 04:13
fuente

4 respuestas

2

Ya que se trata de un reenvío de puertos SSH, debe estar encriptado. También hay una solución en la que no usa el servidor web subyacente o phpmyadmin, para simplemente reenviar el puerto mysql, como -L 3306:localhost:3306 y conectarse a la base de datos utilizando un cliente como el banco de trabajo MySQL (o la mayoría de los IDE tienen una integración similar similar) .

    
respondido por el Rápli András 28.12.2016 - 10:32
fuente
1

Para una encriptación adecuada, también puede usar HTTPS (también es más apropiado), pero para una solución como la suya, debería conectar un puerto de host local a su servidor OpenSSH y conectarse a través de la configuración del proxy SOCKS como se describe en este artículo de DigitalOcean .

    
respondido por el Michael Bailey 28.12.2016 - 06:24
fuente
0

En general, debe configurar su servidor de base de datos para escuchar la conexión de base de datos en un socket de dominio Unix o para escuchar solo en localhost. MySQL no debe configurarse para escuchar en una dirección IP externa o, lo que es peor, para escuchar en todas las direcciones, a menos que el usuario habitual de la base de datos (generalmente una aplicación web) no esté ejecutándose en la misma máquina. Y si la aplicación es remota, hay varias cosas que debe tener en cuenta.

La forma en que lo hace es establecer la configuración de la dirección de enlace en la dirección de loopback (127.0.0.1). Si haces esto, nadie podrá conectarse a MySQL de forma remota, a menos que ya tengan una conexión con el servidor (por ejemplo, SSH) y realicen una conexión "local" desde allí. En este caso, confiará en SSH para realizar el cifrado y la autenticación, y el sistema operativo para no enrutar los paquetes remotos que llegan a la dirección de bucle de retorno a su aplicación. Además, puede configurar MySQL para que requiera contraseña / autenticación, para restringir que los usuarios locales sin privilegios se conecten a la base de datos. Tenga en cuenta que no puede restringir a los usuarios con privilegios (root y alguien con acceso físico sin restricciones). Además, puede configurar un servidor de seguridad de host (es decir, iptable en Linux) para limitar aún más los puertos abiertos en el sistema.

Puede realizar la administración remota mediante el reenvío local de SSH. Configurará Workbench para conectarse al puerto local de su máquina local, y SSH reenviará esa conexión al puerto MySQL en el servidor.

Otra forma de hacer la administración remota es configurar PHPMyAdmin para que escuche en un puerto HTTPS público. En esta configuración, confiará en PHPMyAdmin para realizar la autenticación y HTTPS para el cifrado. Tenga en cuenta que el uso de PHPMyAdmin a través de HTTP no encriptado es inseguro, debe usar HTTPS, también PHPMyAdmin, si bien es conveniente, expone una gran superficie de ataque, ya que es una aplicación compleja de PHP. Por ejemplo, puede ser vulnerable a CSRF o XSS.

Puede proteger aún más PHPMyAdmin configurando su servidor web (por ejemplo, Apache) para que requiera un "certificado de cliente TLS" para acceder a la aplicación PHPMyAdmin. En esta configuración, confiará en Apache para la autenticación y HTTPS para el cifrado. Debe usar esto junto con el propio mecanismo de autenticación de PHPMyAdmin.

Si su aplicación no se está ejecutando en la misma máquina que su base de datos (común en las bases de datos con gran cantidad de usuarios o que comparten varias aplicaciones), puede permitir que MySQL se enlace a la dirección IP de una red privilegiada. En este modelo de seguridad, cualquier persona que esté conectada a la red privilegiada y que el administrador de la red pueda enviar paquetes IP al servidor de la base de datos se considera de confianza. En este caso, dependerá del administrador de red del servidor. A menos que tenga experiencia en redes y confíe en quien configuró el administrador de red y su configuración de firewall, no lo recomendaría. La administración remota, en este caso, se haría conectándose a la red privilegiada mediante una VPN. Es necesario que haya un firewall de red que impida que las conexiones desde fuera de la red privilegiada se enruten al servidor de la base de datos. En esta configuración, la autenticación la realiza el servidor VPN y los enrutadores que aplican la tabla de enrutamiento de LAN.

Además, puede configurar MySQL para requiere un cliente TLS certificado . Con esta configuración, el servidor MySQL también está haciendo autenticación. Se puede usar si no confía plenamente en el administrador de la red o si no confía en todos los usuarios de la red que pueden conectarse a la máquina de la base de datos.

Finalmente, puede exponer MySQL para enlazar a una dirección IP pública. No lo recomiendo, ya que MySQL no es una aplicación diseñada para exponerse en un puerto público (aunque MySQL puede requerir el certificado de cliente TLS). Apache, sshd y la puerta de enlace VPN, por otro lado, están diseñadas para que puedan configurarse para ser expuestas en una dirección pública de forma segura.

A menos que sepa que lo necesita, recomendaría no configurar MySQL para escuchar en una dirección sin loopback. Y no hay ninguna buena razón para exponer deliberadamente un servidor de base de datos en una dirección IP pública por un período de tiempo prolongado. Esto solo puede considerarse una mala configuración o incompetencia.

No deberías necesitar SOCKS (OpenSSH Dynamic forwarding). SOCKS solo es útil si tiene una gran cantidad de máquinas de destino y no desea configurar a qué puerto local va a dónde. En este caso, tiene una máquina de destino específica, que es su servidor de base de datos en el puerto de la base de datos, por lo que solo necesita reenviar ese puerto.

    
respondido por el Lie Ryan 28.12.2016 - 15:49
fuente
0

No necesitas calcetines, de hecho, es una complicación adicional que realmente no quieres ahora. El reenvío de puertos a través de ssh proporciona cifrado independientemente del cliente.

El comando que está utilizando con ssh no tiene ningún sentido. Con este modelo de tunelización, le dice a ssh que escuche en un puerto local y reenvíe su conexión a un sistema remoto. SSH no puede escuchar un informe que ya está en uso. Necesitas pasar mucho más tiempo aprendiendo lo básico y menos tiempo en esquemas bizantinos como las instalaciones temporales de pma.

Lo siguiente (ejecutado desde su PC) hará que los dbms estén disponibles en 127.0.0.1 en pirt 3307 (tenga en cuenta que los clientes mysql generalmente asumen que las conexiones a 'localhost' deben usar un socket de sistema de archivos)

ssh -L 3307:localhost:3306 $yourvps

Sin embargo, proporcionarle al sistema remoto una dirección IP a la que pueda conectarse (y definir las reglas de la red) es mucho más flexible. Personalmente, me gustaría una vpn basada en ssh como this

    
respondido por el symcbean 28.12.2016 - 15:21
fuente

Lea otras preguntas en las etiquetas