
Cómo bloquear tráfico en Ubuntu Server con ufw
0 comentarios
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
- Cómo listar reglas en ufw
- Bloquear un rango de IP's
- Patrones de IP's
- Ejemplos de IP's con nombre de dominio
- Cómo ordenar las reglas en ufw
- Cómo añadir reglas a ufw
- Qué reglas añadir a un servidor web
- Cómo insertar una regla en primera posición
- ¿Es importante el orden de las reglas en ufw?
- ¿Es mejor deny o reject en ufw?
- ¿Es posible cambiar un reject por un deny?
- Existe alguna tabla de ips o rangos de ips que debería conocer para bloquearlos
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:
-
Asegúrate de que
ufw
esté instalado:sudo apt update sudo apt install ufw
-
Habilita el firewall:
sudo ufw enable
-
Bloquea todo el tráfico entrante:
sudo ufw default deny incoming
Esto bloqueará todo el tráfico entrante, pero permitirá el tráfico saliente.
-
Permitir tráfico saliente (si es necesario):
sudo ufw default allow outgoing
-
Si deseas permitir tráfico específico (por ejemplo, SSH en el puerto 22) puedes agregar reglas para esos servicios:
sudo ufw allow ssh
-
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:
-
Bloquear un rango de direcciones IP específicas:
Supongamos que deseas bloquear el rango de IPs
192.168.1.100
a192.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.
-
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
. -
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. -
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 dedeny
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?
-
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
-
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
a192.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.
-
-
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
-
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 comandonslookup
odig
. 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 tienesdig
instalado):dig +short 52.red-81-42-233.staticip.rima-tde.net
Esto también te dará la dirección IP correspondiente.
-
-
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:
-
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. -
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:
-
Eliminar la regla que deseas reordenar.
Por ejemplo, si deseas mover la regla para el puerto
443/tcp
al principio:sudo ufw delete 3
-
Agregar la regla nuevamente en el orden deseado. En este caso, añadir la regla
443/tcp
primero:sudo ufw allow 443/tcp
-
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:
-
Primero, lista las reglas con números asignados:
sudo ufw status numbered
-
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:
-
Permitir tráfico HTTP (puerto 80/tcp): Este puerto es utilizado para tráfico web no cifrado.
sudo ufw allow 80/tcp
-
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
-
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
-
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.
-
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
-
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:
-
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
-
Permitir tráfico SSH (si aún no lo has hecho):
sudo ufw allow 22/tcp
-
Verificar las reglas activas:
sudo ufw status
-
Si todo está bien, habilitar UFW (si aún no está habilitado):
sudo ufw enable
-
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:
-
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)
-
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
). -
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. -
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:
-
Listar reglas numeradas:
sudo ufw status numbered
-
Eliminar una regla en una posición específica (si es necesario):
sudo ufw delete 1
-
Insertar una nueva regla en la primera posición:
sudo ufw insert 1 allow 8080/tcp
Nota importante:
-
El comando
insert
deufw
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?
-
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.
-
-
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 desde192.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
-
Sí, 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, elreject
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:
-
Listar reglas activas:
sudo ufw status numbered
-
Eliminar la regla
reject
(por ejemplo, en la posición 1):sudo ufw delete 1
-
Agregar la nueva regla
deny
:sudo ufw deny 22/tcp
-
Verificar las reglas:
sudo ufw status
Consideraciones:
-
Recuerda que
deny
simplemente bloquea el tráfico sin enviar una respuesta explícita, mientras quereject
envía una respuesta de rechazo (como un paquete ICMP "Destination Unreachable" o un TCP RST). -
Si cambias
reject
pordeny
, 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?
-
AbuseIPDB: Una plataforma pública para reportar y ver IPs maliciosas.
-
Spamhaus: Proporciona bases de datos de IPs relacionadas con el envío de spam.
-
Project Honey Pot: Ofrece una base de datos de IPs que intentan realizar ataques.
-
IP2Location: Servicio para obtener información geolocalizada de IPs.
-
MaxMind (GeoIP2): Base de datos geolocalizada para obtener rangos de IP por país.
-
ipdeny: Ofrece rangos de IP por país.
-
Web: http://ipdeny.com/
-
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.