Para bloquear el tráfico entrante en un servidor Ubuntu, puedes usar iptables o ufw (Uncomplicated Firewall), que son herramientas comunes para gestionar el tráfico de red en Linux.

En este post nos vamos a centrar en usar el firewall ufw con el que gestionar los permisos para el tráfico en un servidor con Ubuntu Server.

Bloquear el tráfico entrante con ufw

ufw es una interfaz de línea de comandos para gestionar un firewall en Ubuntu. Para bloquear todo el tráfico entrante, puedes seguir estos pasos:

  1. Asegúrate de que ufw esté instalado:

    sudo apt update
    sudo apt install ufw
    
  2. Habilita el firewall:

    sudo ufw enable
    
  3. Bloquea todo el tráfico entrante:

    sudo ufw default deny incoming
    

    Esto bloqueará todo el tráfico entrante, pero permitirá el tráfico saliente.

  4. Permitir tráfico saliente (si es necesario):

    sudo ufw default allow outgoing
    
  5. Si deseas permitir tráfico específico (por ejemplo, SSH en el puerto 22) puedes agregar reglas para esos servicios:

    sudo ufw allow ssh
    
  6. Para comprobar las reglas activas de ufw:

    sudo ufw status verbose
    

Cómo listar reglas en ufw

Para listar las reglas de ufw (Uncomplicated Firewall) en Ubuntu, puedes usar el siguiente comando:

sudo ufw status

Este comando te mostrará una lista básica de las reglas activas, como por ejemplo si el tráfico entrante está bloqueado o permitido en ciertos puertos.

Si deseas ver las reglas con más detalles, puedes usar el siguiente comando:

sudo ufw status verbose

El modo verbose muestra más información, incluyendo las direcciones IP y los puertos específicos asociados con las reglas.

Por ejemplo, el resultado puede verse así:

Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Esto te mostrará qué puertos están permitidos y qué tráfico está bloqueado o permitido en tu servidor.

Bloquear un rango de IP's

Para bloquear un rango de direcciones IP en ufw (Uncomplicated Firewall), puedes usar la opción deny from seguida del rango de direcciones IP que deseas bloquear.

Pasos para bloquear un rango de IPs en ufw:

  1. Bloquear un rango de direcciones IP específicas:

    Supongamos que deseas bloquear el rango de IPs 192.168.1.100 a 192.168.1.200. Para bloquearlo, puedes hacerlo de la siguiente manera:

    sudo ufw deny from 192.168.1.100 to 192.168.1.200
    

    Esto bloqueará todas las conexiones de las direcciones IP dentro de ese rango.

  2. Bloquear una subred completa:

    Si deseas bloquear una subred completa, por ejemplo, toda la red 192.168.1.0/24, puedes usar este comando:

    sudo ufw deny from 192.168.1.0/24
    

    Esto bloqueará todas las direcciones IP dentro de la subred 192.168.1.0/24.

  3. Bloquear un rango de puertos desde un rango de IPs:

    Si deseas bloquear un rango de IPs a través de un puerto específico (por ejemplo, el puerto 80 para la web), puedes hacerlo de la siguiente manera:

    sudo ufw deny from 192.168.1.0/24 to any port 80
    

    Esto bloqueará las conexiones desde la red 192.168.1.0/24 al puerto 80.

  4. Verificar las reglas:

    Después de aplicar las reglas, puedes verificar las reglas activas para asegurarte de que se han aplicado correctamente:

    sudo ufw status verbose
    

Ejemplo de bloqueo de un rango completo:

Si deseas bloquear el rango de direcciones IP 10.0.0.0/8, el comando sería:

sudo ufw deny from 10.0.0.0/8

Esto bloquearía todas las conexiones provenientes de esa subred.

Notas adicionales:

  • Ten cuidado al bloquear rangos de IPs, ya que puedes bloquear accidentalmente direcciones importantes si no es específico.

  • Si ya tienes otras reglas activas, asegúrate de revisar que no interfieran con las nuevas configuraciones.

  • Para permitir acceso después de bloquear, puedes usar el comando allow en lugar de deny y especificar el rango o la IP.

Patrones de IP's

Las direcciones IP pueden ser clasificadas en estáticas y dinámicas dependiendo de cómo se asignan en una red. Ambas tienen características distintas que es importante comprender. Aquí te explico brevemente la diferencia y cómo puede afectar el control de acceso en tu servidor.

1. IP Estática

  • Definición: Una IP estática es una dirección IP que no cambia y se asigna permanentemente a un dispositivo en una red. Esta dirección se configura manualmente en el dispositivo (por ejemplo, un servidor, un router o una computadora).

  • Características:

    • No cambia después de un reinicio o desconexión de la red.

    • Ideal para servidores o dispositivos que necesitan una dirección constante, como servidores web, bases de datos o impresoras de red.

  • Uso común: Se usa en servidores, dispositivos de red y dispositivos de infraestructura donde se requiere una dirección IP constante.

2. IP Dinámica

  • Definición: Una IP dinámica es una dirección IP que cambia con el tiempo. Se asigna automáticamente por un servidor DHCP (Protocolo de Configuración Dinámica de Host) cada vez que un dispositivo se conecta a la red.

  • Características:

    • Puede cambiar con cada nuevo inicio de sesión o reinicio de red.

    • Es más común en redes domésticas y redes de pequeñas empresas.

  • Uso común: Se usa en computadoras, teléfonos móviles y dispositivos que no requieren una dirección IP fija.

Relación con UFW (Uncomplicated Firewall)

En cuanto a ufw y el control de acceso, es importante comprender que las direcciones IP estáticas son más fáciles de gestionar porque siempre son las mismas, mientras que las dinámicas pueden cambiar, lo que puede dificultar la tarea de bloquear o permitir el tráfico de ciertos dispositivos.

¿Cómo manejar esto con UFW?

  1. Bloquear IP estáticas: Puedes bloquear IPs estáticas específicas sin problemas, ya que siempre tendrán la misma dirección. Por ejemplo, si tienes una dirección IP estática 192.168.1.100 que quieres bloquear, lo puedes hacer con:

    sudo ufw deny from 192.168.1.100
    
  2. Bloquear IPs dinámicas: Las IPs dinámicas son más difíciles de bloquear a largo plazo, porque pueden cambiar con el tiempo. Si bloqueas una IP dinámica y esta cambia, el dispositivo podría obtener una nueva dirección IP, lo que haría que el bloqueo sea inefectivo.

    Sin embargo, hay algunos enfoques:

    • Bloquear un rango de IPs: Puedes bloquear un rango de direcciones IP si sabes que la IP dinámica de un dispositivo está dentro de un rango de direcciones. Por ejemplo, si las IPs asignadas dinámicamente están dentro del rango 192.168.1.100 a 192.168.1.150, puedes bloquear este rango:

      sudo ufw deny from 192.168.1.100 to 192.168.1.150
      
    • Usar una lista de control de acceso dinámica: En redes más complejas, algunas configuraciones avanzadas como DHCP reservations (reservas DHCP) pueden asignar las mismas IP dinámicas a ciertos dispositivos cada vez que se conecten, simulando una IP estática dentro de una red dinámica. Esto puede simplificar la gestión de IPs en redes que se basan en DHCP.

  3. Filtrado por subred: Si los dispositivos de tu red tienen direcciones IP dinámicas dentro de una subred específica, puedes bloquear todo el tráfico de esa subred sin tener que bloquear cada IP individualmente. Por ejemplo, para bloquear todo el tráfico de la subred 192.168.1.0/24, podrías hacer:

    sudo ufw deny from 192.168.1.0/24
    

Consideraciones Importantes

  • Si tienes dispositivos con IP dinámica en tu red y los estás controlando con ufw, debes tener en cuenta que los bloqueos pueden ser temporales si las IPs cambian frecuentemente.

  • Si no deseas gestionar manualmente los cambios de las direcciones IP dinámicas, es recomendable considerar la reservación de IPs en tu servidor DHCP o configurar IP estáticas para los dispositivos clave.

Si necesitas bloquear IPs en ufw y no sabes si son estáticas o dinámicas, lo más sencillo es bloquear un rango de IPs o una subred completa (como se mostró antes). Para bloquear IPs dinámicas, sería ideal contar con un sistema que te permita asignar siempre las mismas IPs a ciertos dispositivos, ya sea mediante reservas DHCP o configuraciones estáticas.

Ejemplos de IP's con nombre de dominio

La dirección con forma de un nombre de dominio en lugar de una dirección IP directa, como este caso, 52.red-81-42-233.staticip.rima-tde.net es un nombre de dominio que representa una dirección IP estática.

Cómo manejar direcciones IP basadas en nombres de dominio en UFW

ufw (Uncomplicated Firewall) no puede manejar nombres de dominio directamente como en el ejemplo que proporcionaste. ufw solo puede bloquear o permitir direcciones IP específicas o rangos de IPs. Sin embargo, si necesitas bloquear una dirección IP que corresponde a un nombre de dominio, puedes proceder de la siguiente manera:

Pasos para bloquear una dirección IP asociada a un dominio

  1. Obtener la IP del dominio:

    Para resolver la IP que corresponde al nombre de dominio 52.red-81-42-233.staticip.rima-tde.net, puedes usar el comando nslookup o dig. Aquí te muestro cómo hacerlo:

    • Usando nslookup:

      nslookup 52.red-81-42-233.staticip.rima-tde.net
      

      Esto te devolverá la dirección IP asociada a ese dominio.

    • Usando dig (si tienes dig instalado):

      dig +short 52.red-81-42-233.staticip.rima-tde.net
      

      Esto también te dará la dirección IP correspondiente.

  2. Bloquear la IP con UFW:

    Una vez que obtengas la dirección IP (por ejemplo, 81.42.233.52), puedes bloquearla con el siguiente comando:

    sudo ufw deny from 81.42.233.52
    

    Esto bloqueará todo el tráfico entrante desde esa dirección IP.

Notas sobre dominios con IPs dinámicas o cambiantes

Si el nombre de dominio está asociado a una IP dinámica (que cambia con el tiempo), el método anterior no será 100% efectivo a largo plazo. Para manejar situaciones donde las direcciones IP pueden cambiar, hay algunas alternativas:

  1. Resolver el dominio periódicamente: Si es esencial bloquear un dominio específico, puedes escribir un script que resuelva el dominio a la IP de forma periódica y actualice las reglas de ufw en función de las nuevas direcciones IP. Sin embargo, esto requiere configuración adicional y puede no ser la opción más sencilla.

  2. Uso de un servidor proxy o firewall más avanzado: Si necesitas un control más preciso basado en dominios o URLs, podrías usar un firewall de nivel superior o un proxy que sea capaz de resolver nombres de dominio y hacer filtrado basado en estos.

Cómo ordenar las reglas en ufw

En ufw (Uncomplicated Firewall), no puedes "ordenar" las reglas directamente de la misma manera que puedes hacerlo en herramientas como iptables. Sin embargo, puedes gestionar las reglas de manera eficaz eliminando, agregando y reorganizando reglas en la secuencia correcta.

Aquí te dejo algunas formas de gestionar y organizar las reglas de ufw:

1. Listar las reglas activas

Primero, puedes listar las reglas existentes para ver cómo están configuradas:

sudo ufw status numbered

Esto muestra las reglas numeradas, lo que facilita la eliminación o modificación de una regla específica.

Ejemplo de salida:

Status: active

To                         Action      From
--                         ------      ----
[ 1] 22/tcp                 ALLOW       Anywhere
[ 2] 80/tcp                 ALLOW       Anywhere
[ 3] 443/tcp                ALLOW       Anywhere
[ 4] 22/tcp (v6)            ALLOW       Anywhere (v6)
[ 5] 80/tcp (v6)            ALLOW       Anywhere (v6)
[ 6] 443/tcp (v6)           ALLOW       Anywhere (v6)

2. Eliminar reglas

Si deseas eliminar una regla específica, puedes usar el número de la regla. Por ejemplo, para eliminar la primera regla de la lista (en el ejemplo anterior, la regla que permite el tráfico en el puerto 22/tcp):

sudo ufw delete 1

Esto eliminaría la regla 22/tcp de las reglas de ufw.

3. Modificar las reglas

Aunque no puedes "reordenar" las reglas directamente, puedes eliminar y agregar nuevas reglas en el orden que desees. Si deseas cambiar el orden de las reglas, puedes hacerlo de la siguiente manera:

  1. Eliminar la regla que deseas reordenar.

    Por ejemplo, si deseas mover la regla para el puerto 443/tcp al principio:

    sudo ufw delete 3
    
  2. Agregar la regla nuevamente en el orden deseado. En este caso, añadir la regla 443/tcp primero:

    sudo ufw allow 443/tcp
    
  3. Luego, si necesitas agregar otras reglas, puedes continuar con los pasos normales de ufw para permitir o denegar otros puertos o rangos de IP.

4. Guardar reglas en un archivo de configuración (opcional)

Si deseas tener un control más avanzado sobre el orden y la gestión de las reglas, puedes exportar las reglas de ufw a un archivo y luego editar este archivo para agregar o reorganizar las reglas.

Para exportar las reglas de ufw a un archivo:

sudo ufw status verbose > /ruta/al/archivo.txt

Luego, puedes editar el archivo y aplicar las reglas de forma manual. Sin embargo, ten en cuenta que esto no es algo comúnmente hecho en la práctica debido a que ufw está diseñado para ser una herramienta simplificada para la administración de firewall.

5. Reiniciar ufw para aplicar cambios

Una vez que hayas agregado o eliminado reglas en el orden que deseas, puedes reiniciar ufw para asegurarte de que todos los cambios se apliquen correctamente:

sudo ufw reload

6. Verificar las reglas después de los cambios

Una vez que hayas organizado y aplicado tus reglas, puedes verificar nuevamente las reglas activas:

sudo ufw status numbered

Esto te dará una lista de las reglas activas con los números correspondientes, para que puedas verificar que todo esté en el orden correcto.

Cómo añadir reglas a ufw

Para agregar reglas a ufw (Uncomplicated Firewall), simplemente utilizas el comando ufw allow o ufw deny dependiendo de si quieres permitir o denegar acceso a ciertos puertos, direcciones IP, o rangos. Aquí te dejo una guía paso a paso para agregar diferentes tipos de reglas a ufw:

1. Permitir un puerto específico

Para permitir el tráfico hacia un puerto específico (por ejemplo, el puerto 80 para HTTP):

sudo ufw allow 80/tcp

Esto permitirá el tráfico en el puerto 80 para conexiones TCP.

  • UDP: Si el tráfico que deseas permitir es UDP en lugar de TCP, puedes especificarlo de la siguiente forma:

    sudo ufw allow 53/udp
    

    Esto permitiría el tráfico en el puerto 53 para DNS (usualmente sobre UDP).

2. Permitir acceso a un servicio por nombre

Si tienes un servicio común (como http o ssh), puedes agregar reglas para permitir tráfico usando el nombre del servicio en lugar de especificar el puerto:

sudo ufw allow ssh

Esto permitirá el tráfico en el puerto 22/tcp (el puerto predeterminado para SSH).

sudo ufw allow http

Esto permitirá el tráfico en el puerto 80/tcp (para HTTP).

3. Permitir tráfico desde una IP específica

Si quieres permitir el acceso solo desde una IP específica, puedes agregar una regla como esta:

sudo ufw allow from 192.168.1.100

Esto permitirá todas las conexiones entrantes desde la dirección IP 192.168.1.100.

Si también deseas especificar un puerto, puedes hacerlo de esta manera:

sudo ufw allow from 192.168.1.100 to any port 80

Esto permitirá el acceso a puerto 80 solo desde la IP 192.168.1.100.

4. Permitir un rango de direcciones IP

Si necesitas permitir un rango de direcciones IP, puedes especificarlo como un rango CIDR (por ejemplo, 192.168.1.0/24 para toda la subred):

sudo ufw allow from 192.168.1.0/24

Esto permitirá todo el tráfico desde cualquier IP en la subred 192.168.1.0/24.

5. Denegar acceso a una IP o un rango de IPs

Si deseas denegar el acceso desde una dirección IP específica, puedes usar el siguiente comando:

sudo ufw deny from 192.168.1.100

Si quieres bloquear un rango completo de direcciones IP, puedes hacerlo de esta manera:

sudo ufw deny from 192.168.1.0/24

Esto bloquearía todo el tráfico proveniente de la subred 192.168.1.0/24.

6. Permitir tráfico en un puerto específico para IPv6

Si estás usando IPv6, y quieres permitir tráfico en un puerto (por ejemplo, el puerto 443 para HTTPS):

sudo ufw allow 443/tcp from any to any

Esto permite el tráfico en el puerto 443 para IPv6.

7. Permitir tráfico desde un rango de IPs hacia un puerto específico

Si deseas permitir acceso desde un rango de IPs hacia un puerto específico, puedes hacerlo así:

sudo ufw allow from 192.168.1.0/24 to any port 22

Esto permitirá el acceso al puerto 22 (SSH) desde la subred 192.168.1.0/24.

8. Revisar las reglas actuales

Una vez que agregues las reglas, puedes comprobar qué reglas están activas con:

sudo ufw status

Si deseas obtener más detalles sobre las reglas activas, puedes usar:

sudo ufw status verbose

9. Eliminar una regla de ufw

Si en algún momento deseas eliminar una regla que agregaste, puedes hacerlo de la siguiente manera:

  1. Primero, lista las reglas con números asignados:

    sudo ufw status numbered
    
  2. Luego, elimina una regla específica por su número:

    sudo ufw delete [número]
    

    Por ejemplo, si deseas eliminar la regla número 3:

    sudo ufw delete 3
    

10. Reiniciar ufw (si es necesario)

En general, ufw se actualizará inmediatamente después de que agregues o elimines reglas, pero si deseas reiniciar el servicio para asegurarte de que todo esté actualizado:

sudo ufw reload

Resumen de comandos comunes para agregar reglas en UFW:

  • Permitir un puerto específico (ej. puerto 80):

    sudo ufw allow 80/tcp
    
  • Permitir acceso a un servicio (ej. SSH):

    sudo ufw allow ssh
    
  • Permitir acceso desde una IP específica:

    sudo ufw allow from 192.168.1.100
    
  • Denegar acceso desde una IP:

    sudo ufw deny from 192.168.1.100
    
  • Permitir acceso desde un rango de IPs:

    sudo ufw allow from 192.168.1.0/24
    

Qué reglas añadir a un servidor web

Para configurar un servidor web en un sistema con UFW (Uncomplicated Firewall), necesitas asegurarte de que los puertos necesarios para el tráfico web estén permitidos. Los puertos más comunes para servidores web son:

  • Puerto 80 para HTTP (tráfico web sin cifrar).

  • Puerto 443 para HTTPS (tráfico web cifrado, recomendado para la mayoría de las páginas web).

Dependiendo de tu configuración, también puedes necesitar permitir otros puertos, como el puerto 22 para SSH (si necesitas acceder al servidor de forma remota) o cualquier otro puerto para servicios adicionales como FTP, base de datos, etc.

Reglas básicas para un servidor web con UFW

Aquí están las reglas más comunes para permitir el tráfico web básico (HTTP/HTTPS) en un servidor web:

  1. Permitir tráfico HTTP (puerto 80/tcp): Este puerto es utilizado para tráfico web no cifrado.

    sudo ufw allow 80/tcp
    
  2. Permitir tráfico HTTPS (puerto 443/tcp): Este puerto es utilizado para tráfico web cifrado. Es fundamental si tu servidor web utiliza SSL/TLS para cifrar las conexiones (lo cual es altamente recomendable).

    sudo ufw allow 443/tcp
    
  3. Permitir tráfico SSH (puerto 22/tcp): Si necesitas acceso remoto al servidor a través de SSH, asegúrate de permitir el puerto 22 (si aún no lo has hecho).

    sudo ufw allow 22/tcp
    

    Esto es importante si deseas poder acceder al servidor y gestionarlo de forma remota.

Reglas adicionales según sea necesario

  1. Permitir HTTP y HTTPS de forma abreviada:

    UFW tiene perfiles predefinidos para HTTP y HTTPS. Si prefieres, puedes permitir ambos con estos comandos simplificados:

    sudo ufw allow http
    sudo ufw allow https
    

    Estos comandos permiten los puertos 80 y 443 respectivamente.

  2. Permitir tráfico para FTP (puertos 21/tcp y 20/tcp): Si el servidor web también ofrece un servicio FTP (por ejemplo, para transferir archivos), puedes permitir estos puertos:

    sudo ufw allow 21/tcp
    sudo ufw allow 20/tcp
    
  3. Permitir acceso a un puerto adicional (por ejemplo, para una base de datos): Si tu servidor web necesita conectarse a una base de datos (por ejemplo, MySQL en el puerto 3306), también deberás permitir este puerto:

    sudo ufw allow 3306/tcp
    

    Nota: Es importante ser cauteloso al permitir puertos de bases de datos a través de un firewall público, ya que esto puede exponer tu base de datos a ataques. Generalmente, es mejor restringir el acceso a la base de datos solo a las direcciones IP necesarias.

Revisar las reglas activas de UFW

Después de agregar las reglas necesarias, puedes verificar que todo esté configurado correctamente con el siguiente comando:

sudo ufw status

Para obtener detalles más completos, incluyendo números de reglas y configuraciones adicionales, puedes usar:

sudo ufw status verbose

Ejemplo completo de configuración para un servidor web

Imagina que quieres configurar un servidor web básico con acceso a HTTP, HTTPS y SSH. Los pasos serían los siguientes:

  1. Permitir tráfico HTTP y HTTPS:

    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    

    O alternativamente:

    sudo ufw allow http
    sudo ufw allow https
    
  2. Permitir tráfico SSH (si aún no lo has hecho):

    sudo ufw allow 22/tcp
    
  3. Verificar las reglas activas:

    sudo ufw status
    
  4. Si todo está bien, habilitar UFW (si aún no está habilitado):

    sudo ufw enable
    
  5. Reiniciar UFW si es necesario para aplicar los cambios:

    sudo ufw reload
    

Resumen

Para un servidor web básico, las reglas mínimas que necesitarás agregar en UFW son:

  • Permitir HTTP (puerto 80):

    sudo ufw allow 80/tcp
    
  • Permitir HTTPS (puerto 443):

    sudo ufw allow 443/tcp
    
  • Permitir SSH (puerto 22):

    sudo ufw allow 22/tcp
    

Si el servidor necesita otros servicios como FTP o bases de datos, también puedes agregar las reglas correspondientes.

Cómo insertar una regla en primera posición

Para insertar una regla en una posición específica en la lista de reglas de UFW (en este caso, en la posición 1), UFW no tiene un comando directo para reordenar las reglas de forma explícita. Sin embargo, puedes lograrlo de manera indirecta utilizando una combinación de eliminación y adición de reglas.

Procedimiento para insertar una regla en la posición 1:

  1. Verifica las reglas actuales: Primero, ve las reglas activas y sus posiciones numeradas:

    sudo ufw status numbered
    

    Esto te mostrará una lista numerada de reglas, por ejemplo:

    Status: active
    
    To                         Action      From
    --                         ------      ----
    [ 1] 22/tcp                 ALLOW       Anywhere
    [ 2] 80/tcp                 ALLOW       Anywhere
    [ 3] 443/tcp                ALLOW       Anywhere
    [ 4] 22/tcp (v6)            ALLOW       Anywhere (v6)
    [ 5] 80/tcp (v6)            ALLOW       Anywhere (v6)
    [ 6] 443/tcp (v6)           ALLOW       Anywhere (v6)
    
  2. Eliminar la primera regla (si es necesario): Si quieres insertar una nueva regla en la primera posición y ya hay reglas en esa posición, puedes eliminar la regla existente en la posición 1. Por ejemplo, para eliminar la primera regla, puedes usar:

    sudo ufw delete 1
    

    Esto eliminaría la regla que está en la primera posición (en este caso, el puerto 22/tcp).

  3. Agregar la nueva regla: Ahora que la posición 1 está libre, puedes agregar la nueva regla en esa posición. Por ejemplo, si quieres agregar la regla para permitir el tráfico en el puerto 8080/tcp:

    sudo ufw insert 1 allow 8080/tcp
    

    Aquí, insert 1 asegura que la nueva regla se inserte en la posición 1 de las reglas.

  4. Verifica las reglas después de agregar la nueva regla: Finalmente, verifica que la nueva regla esté correctamente insertada en la primera posición con el siguiente comando:

    sudo ufw status numbered
    

    Esto debería mostrar algo como:

    Status: active
    
    To                         Action      From
    --                         ------      ----
    [ 1] 8080/tcp               ALLOW       Anywhere
    [ 2] 22/tcp                 ALLOW       Anywhere
    [ 3] 80/tcp                 ALLOW       Anywhere
    [ 4] 443/tcp                ALLOW       Anywhere
    [ 5] 22/tcp (v6)            ALLOW       Anywhere (v6)
    [ 6] 80/tcp (v6)            ALLOW       Anywhere (v6)
    [ 7] 443/tcp (v6)           ALLOW       Anywhere (v6)
    

    Ahora, la regla 8080/tcp estará en la primera posición de la lista de reglas.

Resumen de los comandos:

  1. Listar reglas numeradas:

    sudo ufw status numbered
    
  2. Eliminar una regla en una posición específica (si es necesario):

    sudo ufw delete 1
    
  3. Insertar una nueva regla en la primera posición:

    sudo ufw insert 1 allow 8080/tcp
    

Nota importante:

  • El comando insert de ufw permite agregar reglas en posiciones específicas, lo cual es útil cuando necesitas organizar las reglas en un orden determinado.

  • Ten cuidado al eliminar reglas existentes, ya que puedes afectar el acceso a tu servidor si no se agrega una nueva regla adecuada.

¿Es importante el orden de las reglas en ufw?

En UFW (Uncomplicated Firewall), el orden de las reglas sí importa, pero no de la misma manera que en herramientas como iptables.

¿Cómo funciona el orden de las reglas en UFW?

  1. UFW evalúa las reglas en orden secuencial: UFW procesa las reglas de arriba hacia abajo, es decir, evalúa las reglas en el orden en que se encuentran. Esto significa que si una regla permite o deniega un tipo de tráfico, las reglas que están debajo de esa ya no serán evaluadas para ese tráfico.

    • Si una regla de aceptación (ALLOW) coincide primero con un paquete de red, UFW lo permitirá y no procesará las reglas que vienen después.

    • Si una regla de denegación (DENY) es la primera en coincidir, el paquete será denegado, y las reglas siguientes no se evaluarán para ese paquete.

  2. Reglas más específicas se procesan antes que las generales: Como en cualquier sistema de control de acceso, las reglas más específicas (como aquellas que permiten o deniegan una IP particular o un puerto específico) deben estar antes que las reglas más generales. Si una regla general (por ejemplo, permitir tráfico a todos los puertos) está antes que una regla más específica (como permitir un puerto solo para una IP), la regla general puede bloquear el acceso que intentas permitir de manera específica.

Ejemplo de cómo el orden afecta el comportamiento

Supongamos que tienes las siguientes reglas en UFW:

1. ALLOW from 192.168.1.100 to any port 80
2. DENY from anywhere to any port 80
3. ALLOW from anywhere to any port 22

En este caso:

  • La regla 1 permite el tráfico en el puerto 80 solo desde 192.168.1.100.

  • La regla 2 niega todo el tráfico en el puerto 80 de cualquier origen.

  • La regla 3 permite el tráfico en el puerto 22 desde cualquier origen (esto normalmente es para SSH).

Si un paquete de red llega al puerto 80 de la dirección 192.168.1.100, la regla 1 permite que el tráfico pase. Pero si llegara desde cualquier otra dirección IP (excepto 192.168.1.100), la regla 2 lo denegaría, porque la regla de denegación para el puerto 80 está antes de la regla de aceptación.

¿Cómo manejar correctamente el orden de las reglas?

  • Reglas específicas primero: Si quieres permitir o bloquear accesos muy específicos (por ejemplo, desde una IP concreta a un puerto determinado), asegúrate de colocar esas reglas antes de las reglas generales.

  • Reglas generales después: Las reglas más generales (como "permitir todo el tráfico a un puerto" o "denegar todo desde una subred") deben ir después de las reglas más específicas para que no bloqueen o interfieran con los accesos más específicos que quieres permitir.

¿Puedo reordenar las reglas de UFW?

Sí, puedes reorganizar las reglas de UFW, pero no hay un comando directo para reordenarlas. En su lugar, puedes eliminar y volver a agregar las reglas en el orden que desees, usando el comando ufw insert para insertar reglas en una posición específica.

Ejemplo para insertar una nueva regla en la posición 1:

sudo ufw insert 1 allow 8080/tcp

Conclusión

  • , el orden de las reglas importa en UFW.

  • Las reglas más específicas deben ir primero, seguidas de las reglas generales.

  • UFW procesará las reglas de arriba hacia abajo, por lo que la primera coincidencia será la que determine si el tráfico se permite o se bloquea.

¿Es mejor deny o reject en ufw?

En UFW (Uncomplicated Firewall), tanto deny como reject sirven para bloquear el tráfico entrante o saliente, pero hay una diferencia en cómo se manejan las respuestas a los paquetes bloqueados. Vamos a explorar las diferencias y cuándo usar cada uno.

1. deny

Cuando usas deny, el firewall silencia el paquete y no envía respuesta al remitente. El tráfico es bloqueado de forma silenciosa, lo que significa que el remitente no recibe ninguna notificación explícita de que su intento de conexión ha sido rechazado.

Características de deny:

  • No hay respuesta: El remitente no sabe si el puerto está cerrado o si el tráfico está siendo bloqueado.

  • Más discreto: El uso de deny puede ser útil en situaciones donde no deseas que el atacante sepa si un puerto está cerrado o bloqueado.

  • Tiempo de espera: En algunos casos, el remitente podría experimentar un tiempo de espera (timeout), lo que puede hacer que la conexión tarde más en fallar.

Ejemplo de uso:

sudo ufw deny from 192.168.1.100

Este comando bloquea el tráfico desde la IP 192.168.1.100 sin enviar una respuesta explícita.

2. reject

Cuando usas reject, el firewall envía una respuesta explícita al remitente, indicando que el tráfico ha sido rechazado. Dependiendo del protocolo, puede enviar un paquete de tipo ICMP "Destination Unreachable" o un paquete TCP RST (Reset). Esto le dice al remitente que la conexión ha sido rechazada de manera activa.

Características de reject:

  • Respuesta explícita: El remitente recibe una notificación de que su intento de conexión ha sido explícitamente rechazado.

  • Más ruidoso: Dado que el remitente recibe una respuesta de rechazo, puede ser más fácil para él saber que el puerto está cerrado o que el tráfico está siendo bloqueado.

  • Más rápido: Al enviar una respuesta de rechazo, la conexión fallará de forma más rápida, sin necesidad de esperar un timeout.

Ejemplo de uso:

sudo ufw reject from 192.168.1.100

Este comando bloquea el tráfico desde la IP 192.168.1.100 y envía una respuesta de rechazo.

¿Cuándo usar deny vs reject?

  • Usa deny cuando prefieras discreción. Si quieres que los atacantes o usuarios malintencionados no sepan si el puerto está cerrado, un comportamiento más sigiloso puede ser útil. En este caso, el atacante no sabrá si el puerto está activo y simplemente seguirá intentando, lo que podría dificultar la tarea de un atacante de encontrar puertos abiertos.

  • Usa reject cuando quieras ser explícito y rápido. Si prefieres que el remitente sepa inmediatamente que su intento de conexión ha sido rechazado (por ejemplo, para evitar que sigan intentando realizar conexiones a puertos que no están disponibles), reject es una opción más adecuada. Además, en algunos casos, el reject puede ser útil en entornos donde quieres asegurar que el tráfico no se quede esperando indefinidamente.

Resumen:

  • deny: Bloquea el tráfico sin enviar una respuesta (más discreto).

  • reject: Bloquea el tráfico y envía una respuesta de rechazo (más ruidoso y rápido).

¿Cuál es mejor?

  • No hay una respuesta definitiva sobre cuál es mejor, ya que depende de tus necesidades:

    • Para mayor sigilo y privacidad, usa deny.

    • Para mayor claridad y rapidez en el rechazo, usa reject.

¿Es posible cambiar un reject por un deny?

Sí, es posible cambiar un reject por un deny en las reglas de UFW. De hecho, si necesitas modificar las reglas en UFW, puedes hacerlo eliminando una regla existente y luego añadiendo la nueva con el tipo de acción que desees (es decir, deny en lugar de reject).

Pasos para cambiar reject por deny en UFW:

1. Listar las reglas activas:

Primero, asegúrate de listar las reglas actuales para identificar la regla que deseas cambiar. Puedes hacerlo con el siguiente comando:

sudo ufw status numbered

Esto te mostrará una lista numerada de reglas, como por ejemplo:

Status: active

To                         Action      From
--                         ------      ----
[ 1] 22/tcp                 REJECT      Anywhere
[ 2] 80/tcp                 ACCEPT      Anywhere

2. Eliminar la regla existente:

Una vez que hayas identificado la regla que quieres cambiar, elimínala. Por ejemplo, si la regla REJECT está en la posición 1, puedes eliminarla con:

sudo ufw delete 1

Esto eliminará la regla de rechazo.

3. Agregar la nueva regla con deny:

Después de eliminar la regla de rechazo, puedes agregar una nueva regla con deny. Si, por ejemplo, la regla original era para bloquear el puerto 22/tcp (SSH), puedes agregarla nuevamente como deny de la siguiente manera:

sudo ufw deny 22/tcp

Esto bloqueará el tráfico en el puerto 22/tcp, pero de forma silenciosa (sin responder con un mensaje de rechazo, lo que lo hace más discreto).

4. Verificar las reglas:

Después de agregar la nueva regla con deny, puedes verificar que todo esté configurado correctamente con el siguiente comando:

sudo ufw status

Esto te mostrará las reglas actuales y podrás confirmar que se ha cambiado el reject por deny.

Resumen de comandos:

  1. Listar reglas activas:

    sudo ufw status numbered
    
  2. Eliminar la regla reject (por ejemplo, en la posición 1):

    sudo ufw delete 1
    
  3. Agregar la nueva regla deny:

    sudo ufw deny 22/tcp
    
  4. Verificar las reglas:

    sudo ufw status
    

Consideraciones:

  • Recuerda que deny simplemente bloquea el tráfico sin enviar una respuesta explícita, mientras que reject envía una respuesta de rechazo (como un paquete ICMP "Destination Unreachable" o un TCP RST).

  • Si cambias reject por deny, el tráfico será bloqueado sin que el remitente reciba una notificación explícita, lo que podría ser útil para discreción y evitar que el atacante sepa si el puerto está bloqueado o cerrado.

Existe alguna tabla de ips o rangos de ips que debería conocer para bloquearlos

En general, no existe una tabla específica o lista de rangos de IPs que debas bloquear universalmente, ya que las necesidades de seguridad y los rangos de IP que podrían considerarse peligrosos o irrelevantes para tu servidor dependen de tu contexto particular (por ejemplo, qué servicios ofreces, qué región geográfica quieres bloquear, qué tipo de ataques estás tratando de prevenir, etc.).

Sin embargo, hay algunas listas y rangos de IPs comunes que podrían ser relevantes dependiendo del caso, y algunos rangos que generalmente se bloquean por razones de seguridad:

1. Rangos de IPs privadas (RFC 1918)

Estas son direcciones IP reservadas para uso dentro de redes privadas y no deben estar en la red pública de Internet. En muchos casos, puedes bloquear rangos como los siguientes para evitar accesos indeseados:

  • 10.0.0.0 - 10.255.255.255 (Clase A)

  • 172.16.0.0 - 172.31.255.255 (Clase B)

  • 192.168.0.0 - 192.168.255.255 (Clase C)

Estas IPs son típicamente utilizadas en redes internas, por lo que no deberían intentar conectarse a tu servidor si está en la red pública.

Ejemplo de regla en UFW para bloquear IPs privadas:

sudo ufw deny from 10.0.0.0/8
sudo ufw deny from 172.16.0.0/12
sudo ufw deny from 192.168.0.0/16

2. Rangos de IPs locales o de tu propia red

Si tienes una red interna con un rango de IPs específico que no debería acceder a tu servidor desde fuera de la red, puedes bloquear ese rango para evitar accesos no deseados.

3. Direcciones IP conocidas por ser maliciosas

Existen bases de datos y listas negras (blacklists) de IPs que han sido identificadas como maliciosas, como aquellas usadas por botnets, troyanos, o hackers que intentan atacar sistemas. Algunas fuentes de estas listas incluyen:

  • Project Honey Pot: Ofrece una lista de IPs utilizadas para ataques a nivel de aplicación web.

  • Spamhaus: Proporciona una lista de IPs que están asociadas con el envío de spam.

  • AbuseIPDB: Base de datos de IPs reportadas por comportamiento malicioso.

Estas listas suelen estar disponibles en línea, y puedes obtenerlas para bloquear rangos específicos de IPs.

4. IPs de países enteros (Geofencing)

Si tu servidor solo debe recibir tráfico desde un conjunto limitado de países o regiones, puedes bloquear todas las direcciones IPs que no correspondan a esas regiones mediante geofencing. Algunos servicios permiten obtener rangos de IPs de países completos, y puedes usar esa información para crear reglas específicas.

Existen bases de datos como IP2Location, MaxMind, o GeoIP que ofrecen mapas de geolocalización de IPs, pero UFW no soporta geolocalización directamente. Sin embargo, puedes usar herramientas adicionales como xt_geoip con iptables para realizar este tipo de bloqueos.

Ejemplo de bloqueos por país (requiere configuración adicional):

  • Usa xt_geoip con iptables o herramientas externas.

  • Puedes obtener rangos de IP de un país en servicios como ipdeny o geolite2 de MaxMind.

5. Rangos de IPs asociadas con "DDoS" y bots

Algunos rangos son conocidos por estar involucrados en ataques DDoS (Denial of Service). Es posible que desees bloquear estas IPs si estás recibiendo ataques. Existen herramientas como Fail2ban o DDoS Blacklists que permiten bloquear IPs de origen de ataques de denegación de servicio.

6. IPs de servicios de anonimización (VPN/Proxy)

Si no deseas que los usuarios se conecten a tu servidor a través de VPNs o proxys, puedes bloquear los rangos de IPs asociados con estos servicios. Algunas listas públicas como IP2Proxy o VPNFilter pueden proporcionarte estos rangos.

7. Botnets conocidas

También hay rangos de IPs asociados con botnets (redes de computadoras infectadas) que se utilizan para llevar a cabo ataques. Algunas bases de datos públicas permiten identificar estas IPs y bloquearlas.

8. Bloqueo de IPs de países específicos

Si deseas bloquear accesos de países específicos, puedes hacerlo mediante el uso de listas de geolocalización de IPs, aunque UFW por sí solo no tiene una función incorporada para esto. Sin embargo, con herramientas adicionales (como xt_geoip para iptables o servicios como MaxMind o GeoLite), podrías obtener rangos de IPs de esos países y luego crear reglas.

9. Bloquear IPs de rangos asociados con servicios de escaneo de vulnerabilidades

Algunos rangos de IPs están asociados con escáneres de vulnerabilidades (por ejemplo, herramientas como Nmap o servicios de CVE). Si ves que tu servidor está siendo escaneado por estos servicios y no lo deseas, puedes bloquear esos rangos.

¿Cómo obtener las listas de rangos de IPs?

  1. AbuseIPDB: Una plataforma pública para reportar y ver IPs maliciosas.

  2. Spamhaus: Proporciona bases de datos de IPs relacionadas con el envío de spam.

  3. Project Honey Pot: Ofrece una base de datos de IPs que intentan realizar ataques.

  4. IP2Location: Servicio para obtener información geolocalizada de IPs.

  5. MaxMind (GeoIP2): Base de datos geolocalizada para obtener rangos de IP por país.

  6. ipdeny: Ofrece rangos de IP por país.

Resumen:

Aunque no existe una "tabla universal" de IPs que debes bloquear, puedes obtener rangos y listas de IPs maliciosas, privadas o asociadas con actividades indeseables (como VPNs, bots, escaneos de vulnerabilidades) para aplicar restricciones en tu servidor. Si deseas bloquear el tráfico de ciertas regiones o tipos de usuarios, puedes usar herramientas externas de geolocalización de IPs.

Si tienes un caso específico o necesitas una lista para un propósito concreto, puedes buscar en bases de datos públicas de IPs maliciosas, o incluso crear tus propias reglas personalizadas.