Ahora que ya tenemos un VPS ejecutándose en Oracle, seguramente queremos agregar servicios como una página web, un servidor de correo SMTP, un servidor de archivos FTP o cualquier otro servicio que se nos ocurra. Para cualquier comunicación entre nuestro ordenador local, lo que se denomina cliente, y el servidor, necesitamos establecer una comunicación a través de internet a la IP pública o dominio del servidor. Según el tipo de comunicación o, dicho de otra manera, el tipo de mensaje recibido, será reenviado a un número de puerto.
Cada una de las diferentes aplicaciones o procesos tiene un puerto asignado. Existen 65535 puertos en cada IP. Ya hemos visto que al establecer una conexión por Secure Shell (SSH) lo hacemos por el puerto 22, aunque se podría configurar para asignar otro. De hecho, para darle más seguridad a un servidor, suele ser una práctica común no usar el puerto 22 para ponérselo un poco más difícil a los hackers. Hay un conjunto de puertos típicos para los usos más comunes de un servidor. Así tenemos los puertos 80 y 443 para servicios web si instalamos Apache o Nginx, para correo saliente SMTP los puertos más habituales son 25, 465, 587 y 2525, para FTP el 21, SNMP 161, etc. Asignando un puerto diferente para cada función conseguimos darle orden al tráfico entrante y saliente y aunque un servidor solo tenga una IP o dominio podemos ejecutar diversas aplicaciones a la vez sin que se interfieran.
En Oracle Cloud tenemos un firewall o listas de seguridad que se configuran desde la web de Oracle, pero además, al crear una instancia nos encontramos que el servidor también tiene su propio firewall o iptables. Esto hace que debamos abrir los puertos en ambos sitios o no se podrá establecer una conexión.
Con la instancia de ubuntu recien creada, el hecho de poder iniciar sesión por SSH nos indica que el puerto 22 está abierto. Tanto el VPS Ubuntu como las reglas de entrada de la VCN (Tarjeta de red virtual) en su configuración inicial tienen todos los puertos de entrada cerrados excepto el 22 para SSH. De otra forma, sería imposible abrir sesión por SSH. Por seguridad, suelen estar todos los puertos cerrados excepto los que realmente se necesitan. Enseguida veremos como averiguar que puertos tenemos abiertos y como abrir nuevos. No servirá de nada instalar, por ejemplo, Apache o Nginx si los puertos 80 y 443 están filtrados en el firewall de la instancia o en la plataforma OCI ya que será imposible establecer comunicación. Hay que ser especialmente cuidadoso con la administración de los puertos. MUY IMPORTANTE: Cerrar por error el puerto SSH nos impide entrar a nuestro propio servidor y solucionarlo puede ser un proceso largo y complicado.
En este artículo vamos a aprender a configurar el firewall creando reglas tanto en la plataforma Oracle como en una instancia de VPS. En Oracle Cloud, necesitaremos agregar reglas de entrada y salida, mientras que en el VPS deberemos crear reglas de firewall.
El servicio de Networking ofrece dos funciones de firewall virtual para controlar el tráfico en el nivel de paquete:
Ya sea por listas o por grupos utilizaremos Reglas de Seguridad. Los grupos dan una ventaja de rápidez de configuración en proyectos muy grandes al poder asignar conjuntos de reglas a muchos recursos. En el modo gratuito de Oracle que tenemos un número pequeño de recursos el usar Listas o Grupos, no es tan importante ni útil salvo el hecho de tener buenas costumbres.
Una diferencia importante entre ambas es que las listas se aplican a todos los resources de la VCN, como por ejemplo las instancias, en el momento de crearlas mientras que los grupos se deben asignar manualmente a los recursos que queramos como pronto veremos editando la VINC (Virtual Interface Network Cloud).
Para configurar la VCN (Virtual Cloud Network) debemos ir a Networking->Virtual Cloud Networks y en la lista de VCN entrar en la única que permite OCI en el modo gratuito.
De manera alernativa para llegar al mismo sitio, podemos ir Compute->Instances y seleccionamos la instancia. En los detalles de instancia muestra la Virtual Cloud Network (VCN) asignada.
Al clickar sobre el nombre de VCN entramos en los detalles de la red.
En esta página, "Virtual network cloud details", podemos añadir y modificar carácteristicas de la red. Para gestionar puertos abrimos Security List, en la sección de Resources.
Clickamos la VNC vinculada a la instancia. En mi ejemplo Default Security List for MasellaVCN.
Aquí tendremos por separado las reglas de entrada (Ingress Rules) y de salida (Egress Rules) de la VCN. Al entrar en la sección de reglas de entrada vemos que ya tenemos una regla que permite el tráfico TCP por el puerto 22 para SSH y 2 reglas mas para ICMP que de momento no vamos a tocar.
Un pequeño inciso para recordar que son los protocolos TCP y ICMP:
ping
para enviar paquetes ICMP y verificar si un dispositivo está conectado a una red. Por defecto, las instancias en OCI no
responden a ping por seguridad para no facilitar datos de nuestro servidor. Sin embargo, si lo que vamos a implementar es un servidor web
tiene escaso peligro habilitar ping ya que la mayoría de datos que se pueden extraer por este método ya son públicos y además, hace muchos años,
se parchearon sus agujeros de seguridad.Para añadir una nueva regla , botón Add ingress Rules y entramos en un formulario bastante claro y fácil de rellenar. Vamos a hacer una regla que permita HTTP:
Una vez añadida la regla, ya tenemos ese puerto abierto. Tenemos un menú contextual para eliminar o editar un puerto que se abre con los 3 puntos de la deracha.
Para crear reglas de salida, el procedimiento es el mismo. Si examinamos la única regla que tenemos indica que permite el tráfico de salida de todos los rangos de IP, de todos los protocolos y todos los puertos.
Otra manera de asignar reglas es creando Network Security Groups. Son conjuntos de uno o mas reglas que se agrupan y se asignan a las instancias que lo necesiten. Las NSG son muy prácticas si tienes muchas instancias con reglas comunes porque creas una sola vez la lista de reglas para muchos recursos.
Las NSG se encuentran en Networking->Virtual Cloud Networks->Virtual Cloud Network Details->Network Security Groups en el menú Resources, justo arriba de Security List que acabamos de explicar.
Tras pulsar el botón de Create Network Security Groups, le damos un nombre al Grupo.
A continuación, accedemos a un formulario similar al de creación de Ingress y Egress Rules en las Security Lists. Como ejemplo,
voy a crear una NSG de una sola
regla de entrada para habilitar ping
en las instancias. El comando ping
requiere una regla de entrada
de tipo ICMP, tipo 8 (echo), para orígenes de todo internet 0.0.0.0/0 o si solo necesitas tener ping
desde la subred privada
pondremos 10.0.0.0/16 o el rango que tu tengas.
Tras crear esta regla, si no necesitamos mas en el grupo, solo falta vincularlo con las instancias o otros recursos que esten en la misma VCN. A diferencia con las Security List, los Grupos no están activos en los recursos hasta que se vinculan.
Para asignar el grupo a una instancia vamos a Compute->Instance, seleccionamos la instancia para ver los detalles y en el apartado Primary VNIC pulsando en edit en la ventana popup podremos seleccionar los grupos. Sin embargo desde aquí no podremos elimanarlos.
Si intentas eliminar un NSG desde Virtual Cloud Network Details->Network Security Groups te dará error pidiendo que primero desvincules el grupo de la VNIC. Este tema me costó un poco solucionarlo pero finalmente encontré como hacerlo.
Para eliminar un NSG:
1 - Hay que ir a los detalles de la instancia, hacer scroll para abajo hasta encontrar Resources->Attached VNICs.
2 -En la lista de VNICS clickar en el nombre y abrirá una ventanda de detalles.
3 - Aquí aparecen dentro del apartado Primary IP Information, todos los NSG agregados y podemos elimarlos.
En este artículo, hemos aprendido a configurar el firewall de Oracle por medio de entrada y salida en las Listas de Seguridad y en los Grupos de Seguridad de Red. En la medida de lo posible, usaremos los Grupos al ser el sistema recomendado por Oracle. En el próximo artículo vamos a instalar algunos servicios comunes de servidor y configurar el firewall de la instancia.