Cómo Configurar un Firewall con UFW en Ubuntu 14.04.
Introducción
Cómo Configurar un Firewall con UFW en Ubuntu 14.04. No es complicado manejar UFW, o Firewall, en donde iptables
es una interfaz que está orientada a simplificar el proceso de configuración de un firewall. Si bien iptables
es una herramienta sólida y flexible, puede ser difícil para los principiantes aprender a usarla para configurar adecuadamente un firewall. Si está buscando comenzar a proteger su red y no está seguro de qué herramienta usar, UFW puede ser la opción
correcta para usted.
Este tutorial le mostrará cómo configurar un firewall con UFW en Ubuntu 14.04.
Prerrequisitos
Antes de comenzar a utilizar este tutorial, debe tener una cuenta de superusuario no root, un usuario con privilegios sudo, configurada en su servidor Ubuntu. Puede aprender cómo hacer esto completando al menos los pasos 1 a 3 en la Configuración inicial del servidor Ubuntu
UFW está instalado por defecto en Ubuntu. Si se ha desinstalado por alguna razón, puede instalarlo con apt-get
:
sudo apt-get install ufw
Usando IPv6 con UFW
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
Luego, asegúrese de que el valor de "IPV6" sea igual a "sí". Él debe parecer así.
...
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 UFW está habilitado, se configurará para escribir reglas de firewall IPv4 e IPv6.
Este tutorial está escrito con IPv4 en mente, pero funcionará bien para IPv6 mientras lo habilite.
Verifique el Estado y las Reglas de UFW
En cualquier momento, puede verificar el estado de UFW con este comando:
sudo ufw status verbose
Por defecto, UFW está deshabilitado, por lo que debería ver algo como esto:
Output:
Status: inactive
Si UFW está activo, la salida dirá que está activo y mostrará una lista de las reglas establecidas. Por ejemplo, si el Firewall está configurado para permitir conexiones SSH (puerto 22) desde cualquier lugar, el resultado podría verse más o menos así:
Output:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
Como tal, use el comando de estado si alguna vez necesita verificar cómo UFW ha configurado el firewall.
Antes de habilitar UFW, querremos asegurarnos de que su firewall esté configurado para permitirle conectarse a través de SSH. Comencemos por establecer las políticas predeterminadas.
Configurar las Políticas Predeterminadas
Si recién está comenzando con su firewall, las primeras reglas para definir son sus políticas predeterminadas. Estas reglas controlan cómo manejar el tráfico que no coincide explícitamente con otras reglas. Por defecto, UFW está configurado para denegar todas las conexiones entrantes y permitir todas las conexiones salientes. Esto significa que cualquier persona que intente llegar a su servidor no podra conectarse, mientras que cualquier aplicación dentro del servidor podría alcanzar el mundo exterior.
Establezcamos las reglas de UFW en los valores predeterminados para que podamos estar seguros de que podrá seguir este tutorial. Para configurar los valores predeterminados utilizados por UFW, use estos comandos:
sudo ufw default deny incoming
sudo ufw default allow outgoing
Como habrás adivinado, estos comandos establecen los valores predeterminados para denegar la entrada y permitir conexiones salientes. Estos valores predeterminados de firewall, por sí solos, podrían ser suficientes para una computadora personal, pero los servidores generalmente necesitan responder a solicitudes entrantes de usuarios externos. Veremos eso a continuación.
Permitir Conexiones SSH
Si habilitamos nuestro firewall UFW ahora, denegaría todas las conexiones entrantes. Esto significa que necesitaremos crear reglas que permitan explícitamente conexiones entrantes legítimas (conexiones SSH o HTTP, por ejemplo), si queremos que nuestro servidor responda a esos tipos de solicitudes. Si está utilizando un servidor en la nube, probablemente quiera permitir conexiones SSH entrantes para que pueda conectarse y administrar su servidor.
Para configurar su servidor para permitir conexiones SSH entrantes, puede usar este comando UFW:
sudo ufw allow ssh
Esto creará reglas de firewall que permitirán todas las conexiones en el puerto 22, que es el puerto que escucha el daemon SSH. UFW sabe lo que significa "ssh" y un montón de otros nombres de servicios, porque está listado como un servicio que usa el
puerto 22 en el /etc/services
.
De hecho, podemos escribir la regla equivalente especificando el puerto en lugar del nombre del servicio. Por ejemplo, este comando funciona igual que el anterior:
sudo ufw allow 22
Si configuró su daemon SSH para usar un puerto diferente, tendrá que especificar el puerto apropiado. Por ejemplo, si su servidor SSH está escuchando en el puerto 2222, puede usar este comando para permitir conexiones en ese puerto:
sudo ufw allow 2222
Ahora que su Firewall está configurado para permitir conexiones SSH entrantes, podemos habilitarlo.
Habilitar UFW
Para habilitar UFW, use este comando:
sudo ufw enable
Recibirá una advertencia que dice que el "comando puede interrumpir las conexiones ssh existentes". Ya configuramos una regla de firewall que permite conexiones SSH, por lo que debería estar bien continuar. Responda al aviso con y
.
El firewall ahora está activo. No dude en ejecutar el comando sudo ufw status verbose
para ver las reglas establecidas.
Permitir otras Conexiones
Ahora debería permitir todas las otras conexiones a las que su servidor necesita responder. Las conexiones que debe permitir dependen de sus necesidades específicas. Afortunadamente, ya sabes cómo escribir reglas que permiten conexiones basadas en un nombre de servicio o puerto: ya lo hicimos para SSH en el puerto 22.
Mostraremos algunos ejemplos de servicios muy comunes que quizás deba permitir. Si tiene otros servicios para los cuales desea permitir todas las conexiones entrantes, siga este formato.
Puerto HTTP 80
Las conexiones HTTP, que es lo que utilizan los servidores web no cifrados, se pueden permitir con este comando:
sudo ufw allow http
Si prefiere usar el número de puerto, 80, use este comando:
sudo ufw allow 80
HTTPS-puerto 443
Las conexiones HTTPS, que es lo que utilizan los servidores web cifrados, se pueden permitir con este comando:
sudo ufw allow https
Si prefiere usar el número de puerto, 443, use este comando:
sudo ufw allow 443
Puerto FTP 21
Las conexiones de FTP, que se utilizan para transferencias de archivos sin encriptar (que probablemente no debería usar de todos modos), se pueden permitir con este comando:
sudo ufw allow ftp
Si prefiere usar el número de puerto, 21, use este comando:
sudo ufw allow 21/tcp
Permitir Rangos de Puertos Específicos
Puede especificar rangos de puertos con UFW. Algunas aplicaciones usan puertos múltiples, en lugar de un solo puerto.
Por ejemplo, para permitir las conexiones X11, que usan los puertos 6000-6007, use estos comandos:
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
Al especificar rangos de puertos con UFW, debe especificar el protocolo ( tcp
o udp
) al que deben aplicarse las reglas. No hemos mencionado esto antes porque no especificar el protocolo simplemente permite ambos protocolos,
lo que está bien en la mayoría de los casos.
Permitir Direcciones IP Específicas
Cuando trabaje con UFW, también puede especificar direcciones IP. Por ejemplo, si desea permitir conexiones desde una dirección IP específica, como una dirección IP de trabajo o doméstica de 15.15.15.51
, debe especificar "desde" luego la
dirección IP:
sudo ufw allow from 15.15.15.51
También puede especificar un puerto específico al que la dirección IP puede conectarse agregando "a cualquier puerto" seguido del número de puerto. Por ejemplo, si desea permitir que 15.15.15.51
conecte al puerto 22 (SSH), use este comando:
sudo ufw allow from 15.15.15.51 to any port 22
Permitir Subredes
Si desea permitir una subred de direcciones IP, puede hacerlo usando la notación CIDR para especificar una máscara de red. Por ejemplo, si desea permitir todas las direcciones IP que van desde 15.15.15.1
a 15.15.15.254
, puede
usar este comando:
sudo ufw allow from 15.15.15.0/24
Del mismo modo, también puede especificar el puerto de destino al que la subred 15.15.15.0/24
puede conectarse. Nuevamente, usaremos el puerto 22 (SSH) como ejemplo:
sudo ufw allow from 15.15.15.0/24 to any port 22
Permitir Conexiones a una Interfaz de Red Específica
Si desea crear una regla de Firewall que solo se aplique a una interfaz de red específica, puede hacerlo especificando "allow in on" seguido del nombre de la interfaz de red.
Es posible que desee buscar sus interfaces de red antes de continuar. Para hacerlo, usa este comando:
ip addr
Output Excerpt:
...
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
...
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
...
La salida resaltada indica los nombres de la interfaz de red. Por lo general, reciben el nombre de "eth0" o "eth1".
Entonces, si su servidor tiene una interfaz de red pública llamada eth0
, puede permitir el tráfico HTTP (puerto 80) con este comando:
sudo ufw allow in on eth0 to any port 80
De lo contrario, su servidor podría recibir solicitudes HTTP de Internet público.
O, si quiere que su servidor de base de datos MySQL (puerto 3306) escuche conexiones en la interfaz de red privada eth1
, por ejemplo, podría usar este comando:
sudo ufw allow in on eth1 to any port 3306
Esto permitiría que otros servidores en su red privada se conecten a su base de datos MySQL.
Denegar Conexiones
Si no ha cambiado la política predeterminada para las conexiones entrantes, UFW está configurado para denegar todas las conexiones entrantes. En general, esto simplifica el proceso de creación de una política de firewall seguro al requerirle que cree reglas que permitan explícitamente la administración de puertos y direcciones IP específicos. Sin embargo, a veces querrá negar conexiones específicas basadas en la dirección IP o subred de origen, tal vez porque sabe que su servidor está siendo atacado desde allí. Además, si desea cambiar su política entrante predeterminada para permitir (lo cual no se recomienda en interés de la seguridad), deberá crear reglas de denegación para cualquier servicio o dirección IP para los que no desee permitir conexiones.
Para escribir reglas de denegación , puede usar los comandos que describimos anteriormente, excepto que debe reemplazar "permitir" por "denegar".
Por ejemplo, para negar conexiones HTTP, puede usar este comando:
sudo ufw deny http
O si quiere negar todas las conexiones desde 15.15.15.51
, puede usar este comando:
sudo ufw deny from 15.15.15.51
Si necesita ayuda para escribir cualquier otra regla de denegación , simplemente mire las reglas de permiso anteriores y actualícelas según corresponda.
Ahora echemos un vistazo a cómo eliminar reglas.
Eliminar Reglas
Saber cómo eliminar las reglas del firewall es tan importante como saber cómo crearlas. Hay dos formas diferentes de especificar qué reglas eliminar: por número de regla o por regla real (similar a cómo se especificaron las reglas cuando se crearon). Comenzaremos con el método de eliminar por número de regla porque es más fácil, en comparación con escribir las reglas reales para eliminar, si es nuevo en UFW.
Por Número de Regla
Si usa el número de regla para eliminar reglas de firewall, lo primero que debe hacer es obtener una lista de sus reglas de firewall. El comando de estado de UFW tiene una opción para mostrar los números al lado de cada regla, como se muestra aquí:
sudo ufw status numbered
Numbered Output:
Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
Si decidimos que queremos eliminar la regla 2, la que permite las conexiones del puerto 80 (HTTP), podemos especificarla en un comando de eliminación UFW como este:
sudo ufw delete 2
Esto mostraría un mensaje de confirmación y luego eliminaría la regla 2, que permite conexiones HTTP. Tenga en cuenta que si tiene habilitado IPv6, también querrá eliminar la regla IPv6 correspondiente.
Por Regla Real
La alternativa a los números de reglas es especificar la regla real para eliminar. Por ejemplo, si desea eliminar la regla "permitir http", puede escribirla así:
sudo ufw delete allow http
También puede especificar la regla por "permitir 80", en lugar de por nombre del servicio:
sudo ufw delete allow 80
Este método eliminará las reglas IPv4 e IPv6, si existen.
¿Cómo Deshabilitar UFW? (opcional)
Si decide que no desea usar UFW por alguna razón, puede deshabilitarlo con este comando:
sudo ufw disable
Cualquier regla que hayas creado con UFW ya no estará activa. Siempre puede ejecutar sudo ufw enable
si necesita activarlo más tarde.
Restablecer Reglas UFW (opcional)
Si ya tiene las reglas de UFW configuradas pero decide que desea volver a comenzar, puede usar el comando de reinicio:
sudo ufw reset
Esto deshabilitará UFW y eliminará cualquier regla que haya sido definida previamente. Tenga en cuenta que las políticas predeterminadas no cambiarán a su configuración original, si las modificó en algún momento. Esto debería darle un nuevo comienzo con UFW.
Conclusión
Su firewall ahora debería estar configurado para permitir (al menos) conexiones SSH. Asegúrese de permitir cualquier otra conexión entrante que su servidor, mientras limita las conexiones innecesarias, para que su servidor sea funcional y seguro.
Para obtener más información sobre las configuraciones de UFW más comunes, consulte este tutorial: Fundamentos de UFW: Reglas y Comandos de Firewall más Comunes.
Fuente. Artículo traducido y con muy ligeras modificaciones de: https://www.digitalocean.com/community/tutorials/how-to-install-linux-apache-mysql-php-lamp-stack-on-debian