Seguridad del Sistema Linux-Firewall- Línea de Comandos.
Como veíamos en el anterior artículo titulado “GUFW “EL GUARDIÁN DE NUESTRO CASTILLO LINUX” donde comentábamos como se podía manejar de un modo inmediato las distintas variantes de nuestro Firewall en Linux mediante la interfaz gráfica llamada GUFW. Hoy revisaremos como podemos hacer uso de la terminal he ir explorando los aspectos de manejo básicos desde la misma, tomando el control de esta pieza fundamental de seguridad que es nuestro socorrido cortafuegos.
Contenido:
- Requisitos previos
- Haciendo uso de la interfaz de red IPv6 paso opcional
- Verificando el estado de UFW
- Configuración de las Políticas Predeterminadas
- Permitiendo las conexiones SSH
- Habilitando UFW
- Permitiendo otro tipo de conexiones necesarias
- Conexiones FPT- FTPES
- Permitir un rango de puertos específicos
- Permitiendo direcciones IP específicas
- Permitiendo conexiones de subredes.
- Permitir las conexiones a una interfaz de red especifica
- Denegar conexiones
- Comprobar el estado y las reglas de UFW
- Deshabilitando o reiniciando nuestro Firewall UFW
En este artículo tocarnos los niveles fundamentales que posiblemente iremos ampliando en próximos artículos para alcanzar un nivel aceptable de manejo de nuestro poderoso cortafuegos desde la terminal.
Requisitos previos
Partimos de la base que ya tenemos Gufw instalado en nuestra distro, si por alguna razón no fuese así podemos instalarlo fácilmente en distros Ubuntu y derivadas y Debian con el siguiente comando
$ sudo apt-get install ufw |
Haciendo uso de la interfaz de red IPv6 paso opcional
Si la tenemos habilitada en casos de servidores principalmente de hemos asegurarnos que UFW está correctamente configurado para admitir las reglas del cortafuegos para IPv6 además de las de IPv4. Para realizar tal labor basta con que editemos la configuración de UFW con nuestro editor de texto favorito.
Si su servidor Ubuntu tiene habilitado IPv6, asegúrese de que UFW esté configurado para admitir IPv6 para que administre reglas de Firewall para IPv6 además de IPv4. Para hacer esto, abra la configuración de UFW con su editor favorito. Usaremos Nano:
& sudo nano /etc/default/ufw |
Debemos asegurarnos que el valor “IPV6” sea igual a Yes. Aparecerá reflejado en la línea de “/etc/default/ufw excerpt”
/etc/default/ufw excerpt
…IPV6=yes… |
Para Guardar y Salir. Presiona Ctrl-X para salir del archivo, luego Y para guardar los cambios que hiciste, luego ENTER para confirmar el nombre del archivo.
Cuando nuestro UFW esté habilitado se configurara para escribir reglas del Firewall en formato
IPv4 e IPv6.
Verificando el estado de UFW
Esta operación la podamos realizar en cualquier momento con el siguiente comando desde nuestra terminal.
& sudo ufw status verbose |
La primera vez que lo realicemos estará desactivado por defecto y nos arrojara el siguiente resultado:
Output:Status: inactive |
Resultado |
Posteriormente veremos como activarlo fácilmente y cambiar su estado aún debemos realizar algunos pasos previos.
Si estuviese ya activo y con reglas mínimas configuradas como por ejemplo podrá permitir conexiones SSH (por el puerto 22) desde cualquier lugar nos saldría algo parecido a lo siguiente:
Output:Status: activeLogging: on (low)Default: deny (incoming), allow (outgoing), disabled (routed)New profiles: skipTo Action From— —— —-22/tcp ALLOW IN Anywhere |
Resultado |
Previamente a la activación de cortafuegos es recomendable asegurarnos que esté configurado adecuadamente para permitir conexiones SSH. Por lo que procederemos a establecer unas políticas mínimas que nos garanticen su buen funcionamiento.
Configuración de las Políticas Predeterminadas
Como acabamos de comenzar con la configuración y no tenemos nada establecido aún procederemos con orden para establecer unas reglas mínimas que establezca las políticas predeterminadas parecidas a los perfiles de los que hablábamos en anterior artículo.
Dichas reglas controlarán el tráfico genérico de la aplicación que no coincide con otras políticas particulares especificas de aplicaciones definas o concretas.
Por ejemplo por defecto UFW quedara configurado para denegar todas las conexiones del trafico entrantes y permitir todas las salientes, con estas políticas básicas, lo que nos asegurara en principio que cualquier aplicación podrá establecer comunicaciones salientes pero los intentos se acceder desde fuera al servidor serán denegados.
Procedamos a establecer las reglas básicas de UFW para ello nos serviremos de los siguientes comandos:
& sudo ufw default deny incoming& sudo ufw default allow outgoing |
Con ello nos aseguraremos de establecer los valores adecuados para denegar las comunicaciones entrantes y permitir el flujo completo de las conexiones salientes. Valores que por si solos, son suficientes para las necesidades de un PC. Personal. Salvo algunas aplicaciones que revisamos después como correo etc. En un servidor necesitará responder a solicitudes entrantes de distintos niveles como revisaremos a continuación.
Permitiendo las conexiones SSH
Una vez habilitado nuestro cortafuegos con las anteriores políticas este denegará todas las conexiones entrantes lo cual puede, limitar enormemente el buen funcionamiento de comunicación de distintas aplicaciones que usen determinados servicios, como gestores de correo o similar, u otras que se sirvan de las conexiones SSH o HTTP, por mencionar algunas, con lo cual no funcionaran como es debido. Si queremos solventarlo y conseguir que nuestro servidor responda correctamente a estos tipos de solicitudes de conexión entrantes o estamos sirviéndonos de un servidor desde la nube.
Podemos configurar estas conexiones SSH entrantes con el siguiente comando:
& sudo ufw allow ssh |
Esto creará una serie de reglas en el Firewall, que permitirá las conexiones en el puerto 22 que escuche el demonio SSH nuestro UFH, él mimo sabe lo que significa estas siglas y otra gran cantidad de nombres de servicios, ya que están listados como servicio y que usa el puerto 22 en el /etc/servicies.
De igual modo podemos escribir una regla equivalente especificando el puerto en lugar del servicio con lo que funcionara de modo similar a la anterior.
& sudo ufw allow 22 |
Si configuramos nuestro demonio SSH para usar un puerto diferente le tenemos que especificar el mismo. En este caso nuestro servidor escucha el puerto 2222 le daremos permiso en nuestro cortafuegos con el siguiente comando.
& sudo ufw allow 2222 |
Bien ahora ya que tenemos unas políticas establecidas procederemos a encender nuestro cortafuegos.
Habilitando UFW
Ya lo tenemos todo listo procederemos a habilitarlo con el siguiente comando.
& sudo ufw enable |
Seguramente recibiremos un aviso en estos momentos como advertencia que se pueden ver interrumpidas las conexiones SSD desde este momento, pero recordar que ya creamos unas reglas básicas para las mismas con anterioridad. Le decimos que si y seguimos.
Ahora podemos ejecutar “sudo ufw status verbose” para ver las reglas establecidas hasta ahora.
Permitiendo otro tipo de conexiones necesarias
Ahora nos dedicaremos a crear otras reglas habituales para conexiones rutinarias de aplicaciones comunes que usan una serie de puertos rutinarios.
Puerto HHT 80
Son para las conexiones de la navegación Web mediante el servicio HTPP o servidores no cifrados. Las podemos habilitar con el siguiente comando:
& sudo ufw allow http |
Recordar que si lo preferimos podemos hacerlo también mediante el número de puerto.
& sudo ufw allow 80 |
Habilitando conexiones seguras mediante el formato HTTPS en el puerto 443.
& sudo ufw allow https |
O también mediante el número del puerto con el siguiente comando:
& sudo ufw allow 443 |
Conexiones FPT- FTPES
Estas conexiones algo ya en desuso pero aún necesarias y que sirven para mover archivos sin encriptar de una computadora a otra suelen usar generalmente el puerto 21.
& sudo ufw allow ftp |
Si lo preferimos mediante el número de puerto:
& sudo ufw allow 21/tcp |
Permitir un rango de puertos específicos
Hasta ahora veíamos como abrir un único puerto, pero algunas aplicaciones necesitan una serie de puertos abiertos por donde poder conectarse, debido a su necesidad de conexión por puertos múltiples, un claro conocido ejemplo son las aplicaciones P2P como las usándolas por los programas de descargas o similar.
En el siguiente ejemplo vamos a permitir la conexión de la aplicación “X” usando los siguientes puertos desde el 6000 al 6007 ambos inclusive usando los protocolos tpc y udp.
& sudo ufw allow 6000:6007/tcp& sudo ufw allow 6000:6007/udp |
Debemos aplicar los protocolos mencionados en dicha reglas para definirlas mejor por defecto cuando creamos una regla y no los especificamos se permitirá ambos automáticamente.
Permitiendo direcciones IP especificas
También podemos permitir una serie de dicciones IP del trabajo o domésticas desde otra PC donde debemos especificar el llamado “from” y luego la dirección IP especificas.
& sudo ufw allow from 15.15.15.51 |
Desde luego también lo podemos realizar por el puerto que deseemos en este caso el n.º 22
& sudo ufw allow from 15.15.15.51 to any port 22 |
Permitiendo conexiones de subredes.
Si deseamos permitir una subred o conjunto de direcciones IP, podemos hacerlo usando la anotación CIDR para especificar una máscara de red. Por ejemplo, si deseamos permitir todas las direcciones IP que van desde 15.15.15.1 a 15.15.15.254 , usaremos el siguiente comando:
& sudo ufw allow from 15.15.15.0/24 |
De igual forma podemos especificar un puerto de destino para dicho rango de conexiones de la subred (15.15.15.0/24)
para poder conectarse usaremos como ejemplo de nuevo el puerto 22
(SSH)
& sudo ufw allow from 15.15.15.0/24 to any port 22 |
Permitir las conexiones a una interfaz de red específica
Ahora creamos una regla que solo se aplique a una interfaz de red concreta para ello lo aremos especificando el término “allow in on” seguido de nombre de la interfaz de red.
Primero revisaremos las interfaces de red existentes en nuestro equipo antes de continuar con el siguiente comando:
& ip addr |
Nos lanzará el siguiente resultado:
Output Excerpt2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state. . .3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default. . . |
Resultado |
En el resultado aparecerán los nombres de las distintas interfaz de red que tengamos. Y los nombres mayoritariamente serán similares a eth0 o enp3s2.
De este modo vemos como nuestro servidor tiene una interfaz de red pública llamada eth0 , la cual podría permitir el tráfico HTTP por el puerto 80 con el siguiente comando.
& sudo ufw allow in on eth0 to any port 80 |
Realizando todo esto permitirá a nuestro servidor la posibilidad de recibir solicitudes HTTP desde la internet publica.
Por otro lado podemos configurar la posibilidad que un servidor de base de datos de MySQL se comunique por el puerto 3306 y escuche las conexiones dela interfaz de una red privada eth 1. Nos serviríamos del siguiente comandos:
& sudo ufw allow in on eth1 to any port 3306 |
Esto permitirá que otros servidores de nuestra red privada se conecten a nuestra base de datos MySQL
Denegar conexiones
Recordar que si no hemos cambiado la política inicial de UFW es la de denegar todas las conexiones entrantes Normalmente esto simplifica la creación de una política del cortafuegos segura al exigirnos crear reglas específicas que nos permitan de forma explícita el acceso de puertos determinas y direcciones IP.
En algunos casos si nos veremos en la necesidad de denegar conexiones específicas basadas en una dirección IP subred de origen, quizás por saber que nuestro servidor está siendo atacado desde ella.
Para escribir reglas específicas de bloqueo podemos servirnos de los comandos mencionados anteriormente sustituir “allow por deny”.
Pongamos un ejemplo
& sudo ufw deny http |
Ahora usemos una dirección IP a bloquear
& sudo ufw deny from 203.0.113.4 |
Pasaremos a continuación a eliminar algunas reglas
Eliminando reglas anteriormente establecidas
Esta función es primordial si sabemos crearlas para poder tener un pleno y eficaz control sobre las mismas, es importante saber eliminarlas oportunamente cuando lo necesitemos por la seguridad del sistema.
Tenemos dos modos de selección por número de regla o por regla real.
- Por número de regla
Para ver todas las existentes lo primero que nos facilitara la labor es conseguir un listado de las reglas existentes usaremos el comando UFW estatus para que nos muestre los números juntos a las reglas veamos un ejemplo:
& sudo ufw status numbered |
Dándonos el resultado siguiente
Numbered Output:Status: active To Action From — —— —-[ 1] 22 ALLOW IN 15.15.15.0/24[ 2] 80 ALLOW IN Anywhere |
Resultado |
Nos interesa limpiar la regla n.º 2 la cual permite las conexiones del puerto 80 (HTTP) lo especificamos con el siguiente comando:
& sudo ufw delete 2 |
Esto nos mostrará un mensaje de confirmación y la eliminación de la regla n.º 2 Debemos tener en cuenta que si tenemos el IPv6 habilitado deberíamos eliminar la regla IPv6 correspondiente.
Eliminando mediante la regla
En el ejemplo anterior procedimos a la eliminación de una regla mediana el número específico de la misma ahora procederemos a servirnos de nombre real que la demos para eliminarla de igual modo.
- Por nombre de la regla
Tenemos que eliminar la regla que permitida la comunicación allon http
Nos serviremos del siguiente comando:
& sudo ufw delete allow http |
Si queremos hacerla mediante un puerto específico lo realizamos usando el paramero allow 80 en este ejemplo molo en vez del nombre del servicio.
& sudo ufw delete allow 80 |
Este método además eliminará las reglas IPv4 y IPv6” si existen.
Bueno como veis hemos dado un repaso en profundidad a varios aspectos y ahora veremos algunas opciones básicas de manejo del Firewall.
Comprobar el estado y las reglas de UFW
Paso fundamentalmente que podemos realizar en cualquier momento
& sudo ufw status verbose |
Si estuviese desactivado nos mostrara algo similar a esto
OutputStatus: inactive |
Resultado |
Si estuviese activo nos lo mostrará junto con las reglas configuradas existentes por ejemplo si el Firewall estuviese configurado para permitir conexiones SSH por el puerto 22 desde cualquier parte os mostraría algo parecido a lo siguiente:
OutputStatus: activeLogging: on (low)Default: deny (incoming), allow (outgoing), disabled (routed)New profiles: skipTo Action From— —— —-22/tcp ALLOW IN Anywhere |
Resultado |
Si deseamos verificar la configuración que UFW aplico al Firewall usaremos “estatus”.
Deshabilitando o reiniciando UFW
Aveces podríamos necesitar realizar alguna acción que requiera de esta opción así que no está mal que sepamos como realizarla.
- Apagando
& sudo ufw disable |
Cualquier regla creada con UFW quedará inactiva para reiniciarlo de nuevo recordar usar el comando:
- Encendido
& sudo ufw enable |
Imaginaos que necesitamos deshacernos de todo lo hecho anteriormente y comenzar desde 0 con una configuración y políticas nuevas del Firewall lo realizaremos fácilmente con el siguiente comando, lo cual eliminara lo realizado hasta ahora y nos dejara la aplicación como recién instalada.
& sudo ufw reset |
Desactivará nuestro UFW y eliminará todas las reglas y políticas creadas.
Podéis realizar muchas de las acciones señaladas mediante la interfaz GUFW que hablamos en el artículo anterior titulado GUFW “EL GUARDIÁN DE NUESTRO CASTILLO LINUX” desde el siguiente enlace.
Fuentes consultadas: