
Como alguien con conocimientos bastante limitados sobre seguridad de redes, me gustaría saber: ¿Es «seguro» ejecutar (1) un servidor MySQL, (2) algunos contenedores acoplables con servicios arbitrarios y (3) un apache o nginx como DNS inverso? , en una LAN doméstica estándar y exponerlos a Internet? La configuración de mi red es bastante simple: un enrutador se conecta a Internet, todos los dispositivos de la casa se conectan directamente a ese enrutador. Puedo usar el reenvío de puertos y DDNS para permitir que cualquier dispositivo en la LAN se convierta en un servidor. Actualmente no hay ninguna DMZ configurada y no estoy usando un firewall físico.
¿Es seguro reenviar puertos como el 80 a dispositivos en dicha LAN, o debería incluso abstenerme de registrar la IP pública del enrutador en un DDNS? En otras palabras: ¿Puede la configuración descrita (1) hacer vulnerables los dispositivos a los que se reenvían los puertos (inyección de malware, robo de datos,...) o incluso (2) hacer vulnerables otros dispositivos en la LAN, que no tienen nada que hacer? que hacer con los servidores?
Por supuesto, este no es un entorno de producción. A menudo trabajo en varios proyectos a la vez, a los que quiero llegar desde fuera de mi casa, y no quiero pagar grandes cantidades de dinero por AWS, GCP, etc. Entonces, quería tener servidores para MySQL, Mongo. , Neo4J, etc. siempre en funcionamiento, y también implemento algunas de mis aplicaciones web para fines de prueba y demostración personal.
Respuesta1
[...] ¿Puede la configuración descrita (1) hacer vulnerables los dispositivos, a qué puertos se reenvían (inyección de malware, robo de datos,…) o incluso (2) hacer vulnerables otros dispositivos en la LAN, que no tienen nada? que ver con los servidores?
Si y si.
Es seguro[?]
Probablemente sea una opinión personal dependiendo de lo que usted llame "seguro". Sin embargo, en términos prácticos, probablemente haya que considerar dos cosas:
Los servidores modernos sonconstantementebajo un aluvión de scripts de explotación automatizados (que suele ser la forma en que la mayoría de los atacantes atacan a las víctimas).
La mayoría de estas amenazas se pueden mitigar con actualizaciones periódicas de software, una mínima cantidad de precaución y algunas configuraciones de seguridad adecuadas (que puede investigar razonablemente).
En pocas palabras, si sigue este camino, jugará como administrador de sistemas aficionado para su red (probablemente leyendo registros, buscando actualizaciones de software, etc.). Si no le importa asumir este rol, puede estar relativamente seguro con una configuración en el hogar. De lo contrario, los servicios tradicionales de terceros podrían ser más rápidos.
La configuración de mi red es bastante simple: un enrutador se conecta a Internet, todos los dispositivos de la casa se conectan directamente a ese enrutador.
Esto puede ser relativamente seguro si se implementa la configuración de firewall correcta. Dicho esto, es posible que desees dedicar una PC barata (una vieja o tal vez incluso una Raspberry Pi) a realizar tareas de firewall con algo comopfsentido.
¿Es seguro reenviar puertos como el 80 a dispositivos en dicha LAN, o debería incluso abstenerme de registrar la IP pública del enrutador en un DDNS?
Es cierto que esto es anecdótico, pero después de haber tenido una configuración extremadamente similar durante años para pruebas y uso personal, nunca he tenido problemas con la seguridad.
Con respecto a Apache/Nginx y MySQL específicamente, solo algunos pequeños detalles:
Asegúrese de que Apache/Nginx no esté actuando como un proxy abierto (lo cual es propicio para abuso y convierte a su servidor en un objetivo). Este peligro generalmente se mitiga con algunos comandos de configuración simples (como los que se detallan aquí para Apache).
Para Apache, recomendaría deshabilitar los archivos .htaccess.
Para MySQL, un gran problema es el uso de herramientas de administración basadas en navegador como phpMyAdmin. Junto con WordPress, al revisar los registros, este es uno de los programas más atacados que he visto (probablemente porque la inyección SQL puede ser potencialmente muy poderosa). Cualquier aplicación web que se conecte a una base de datos debe estar protegida adecuadamente, pero ejecutar herramientas como estas (potencialmente) genera problemas.
Tenga en cuenta que lo anterior va de la mano con limitar el acceso al servidor de la base de datos solo a computadoras locales seleccionadas y permisos limitados de la base de datos.
Los ataques de inyección SQL pueden ayudar a mitigarse mediante firewalls de aplicaciones web (WAF). Los servicios de terceros como CloudFlare ofrecen este tipo de servicios (actualmente $20/mes con otras características también) para una solución de "configurar y olvidar". Sin embargo, es bastante fácil agregar este tipo de característica usted mismo a través de Apache o Nginx con módulos comoModSeguridad.
Como última palabra, los conceptos básicos para proteger su servidor web y MySQL están bien documentados y normalmente son bastante sencillos de investigar, por ejemplo, "¿Cómo protejo Apache en Linux" o "Cómo evito ataques de inyección SQL?". Ambos ofrecen consejos comunes que evitarán que la mayoría de los usuarios malintencionados alteren sus sistemas.
Puedes ser sofisticado, por supuesto, e intentar agregar seguridad adicional (como una verdadera DMZ), pero esto potencialmente implica mucho más trabajo.