Instalar firewall en Ubuntu 15.10

Introducción

Firewall (cortafuego) en Ubuntu 15.10

Instrucciones para instalar un firewall (cortafuego) gestionado con las herramientas UFW y iptables usando el instalador de Debian / Ubuntu. Los metas específicos a lograr con este articulo son los siguientes:

  • Instalar y configurar un cortafuegos en su servidor.
  • Definir políticas de acceso al servidor usando la herramienta UFW.
  • Definir políticas de acceso al servidor usando la herramienta iptables.

¿Qué es un Firewall (cortafuego)?

Un firewall (cortafuegos) es una parte de un sistema o una red que está diseñada para bloquear el acceso no autorizado, permitiendo al mismo tiempo comunicaciones autorizadas. Se trata de un dispositivo o conjunto de dispositivos configurados para permitir, limitar, cifrar, descifrar, el tráfico entre los diferentes ámbitos sobre la base de un conjunto de normas y otros criterios.

Diagrama de red implementando con firewall

Diagrama de red con cortafuego. Cortesía: www.noticias3d.com

También es frecuente conectar el cortafuegos a una tercera red, llamada zona desmilitarizada o DMZ, en la que se ubican los servidores de la organización que deben permanecer accesibles desde la red exterior.

¿Qué es Netfilter/iptables?

Netfilter es un framework disponible en el núcleo Linux que permite interceptar y manipular paquetes de red. Dicho framework permite realizar el manejo de paquetes en diferentes estados del procesamiento. Netfilter es también el nombre que recibe el proyecto que se encarga de ofrecer herramientas libres para cortafuegos basados en Linux.

El componente más popular construido sobre Netfilter es iptables, una herramienta de cortafuegos que permite no solamente filtrar paquetes, sino también realizar traducción de direcciones de red (NAT) para IPv4 o mantener registros de log. El proyecto Netfilter no sólo ofrece componentes disponibles como módulos del núcleo sino que también ofrece herramientas de espacio de usuario y librerías.

Iptables es el nombre de la herramienta de espacio de usuario mediante la cual el administrador puede definir políticas de filtrado del tráfico que circula por la red. El nombre iptables se utiliza frecuentemente de forma errónea para referirse a toda la infraestructura ofrecida por el proyecto Netfilter. Sin embargo, el proyecto ofrece otros subsistemas independientes de iptables tales como el connection tracking system o sistema de seguimiento de conexiones, que permite encolar paquetes para que sean tratados desde espacio de usuario. iptables es un software disponible en prácticamente todas las distribuciones de Linux actuales.

¿Qué es UFW?

Uncomplicated Firewall (ufw) es un cortafuegos diseñado para ser de fácil uso desarrollado por Ubuntu. Utiliza la línea de comando para configurar las iptables usando un pequeño número de comando simples.

Instalación

Debe actualizar el sistema, con el siguiente comando:

$ sudo apt-get update && sudo apt-get upgrade

Para instalar el cortafuegos UFW, ejecute el siguiente comando:

$ sudo apt-get install ufw

La herramienta iptables es instalada como una dependencia por el paquete ufw.

Usted puede ver si iptables está corriendo, puede comprobar que los módulos del cortafuegos en kernell están cargados correctamente, para esto ejecute el siguiente comando:

$ sudo lsmod | grep ip_tables

Ademas puede inspeccionar cuales en reglas por defecto están cargadas actualmente, para esto ejecute el siguiente comando:

$ sudo iptables -L

Configuración de UFW

Es recomendando activar el registro de eventos, de esta forma podrá auditar cualquier evento o sucesos en el cortafuegos, para esto ejecute el siguiente comando:

$ sudo ufw logging full

Si usted requiere desactivar el registro de eventos, ejecute el siguiente comando:

$ sudo ufw logging off

Gestión del cortafuegos con UFW

Al instalarse la herramienta UFW se gestiona vía linea de comando, a continuación se mostraran algunos usos comunes:

Estatus del cortafuegos con UFW

Para conocer el estatus detallado del cortafuegos usando UFW, ejecute el siguiente comando:

$ sudo ufw status verbose
Status: active
Logging: on (full)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

Habilitar cortafuegos con UFW

Por defecto, el cortafuegos con UFW esta deshabilitado, para habilitarlo ejecute el siguiente comando:

$ sudo ufw enable

Deshabilitar cortafuegos con UFW

Si mas adelante requiere deshabilitar el cortafuegos usando la herramienta UFW, ejecute el siguiente comando:

$ sudo ufw disable
Firewall stopped and disabled on system startup

Registro de eventos (Archivo log)

Al ejecutar el comando sudo ufw logging full, usted puede consultar el archivo log de eventos para supervisar posibles errores del cortafuegos usando la herramienta UFW, para hacer esto ejecute el siguiente comando:

$ sudo tail -f /var/log/ufw.log

Otro comando alternativo útil para consultar el archivo de eventos puede ser consultar el archivo syslog con el siguiente comando:

$ sudo tail -f /var/log/syslog | grep UFW

Definiendo reglas

Un cortafuegos generalmente restringe todo y de forma granular usted va definiendo reglas de acceso o restringir a servicios específicos, al cual otorgaran privilegios sobre recursos del sistema.

Reglas iptables

Antes de que podamos enfrentarnos a iptables necesitamos tener al menos una comprensión básica de su forma de trabajo. Esta herramienta usa el concepto de direcciones ip, protocolos (tcp, udp, icmp) y puertos. No necesitamos ser expertos en estos temas para comenzar (ya que podemos buscar cualquier información que necesitemos), pero ayuda tener una comprensión general.

Iptables ubica las reglas dentro de cadenas predefinidas (INPUT, OUTPUT y FORWARD) que son comprobadas contra cualquier tráfico de red (paquetes IP) relevantes para esas cadenas y una decisión es tomada sobre que hacer con cada paquete basado en el significado de esas reglas, por ejemplo aceptar o rechazar el paquete. Estas acciones son referidas como objetivos (targets), de las cuales las dos más usadas son DROP para rechazar un paquete o ACCEPT para permitir el paquete.

Cadenas

Existen tres cadenas predefinidas en la tabla de filtrado para las cuales podemos adicionar reglas para procesar los paquetes IP que pasan a través de las cadenas. Estas cadenas son:

  • INPUT – Todos los paquetes dirigidos a la computadora anfitrión.
  • OUTPUT – Todos los paquetes originados en la computadora anfitrión.
  • FORWARD – Todos los paquetes que no son originados o dirigidos a la computadora anfitrión, pero pasan a través (enrutados) de la computadora anfitrión. Esta cadena es usada si usted está usando su computadora como un enrutador.

La mayor parte del tiempo, estaremos tratando con la cadena INPUT para filtrar los paquetes que entran a nuestra computadora – y así mantener fuera a los muchachos malos.

Las reglas son adicionadas a la lista de cada cadena. Un paquete es comprobado contra cada regla en turno, comenzando por arriba. Si el paquete coincide con esa regla, entonces una acción es realizada, ej. aceptar (ACCEPT), o rechazar (DROP) el paquete. Una vez que la regla ha coincidido y una acción realizada, entonces el paquete es procesado de acuerdo al resultado de la regla y no es procesada por reglas posteriores en la cadena. Si un paquete pasa todas las reglas en la cadena hasta abajo y llega al final sin haber coincidido con regla alguna, entonces es utilizada la acción por defecto para esa cadena. Esto se refiere a la política por defecto y puede estar fijada en aceptar o en rechazar el paquete.

El concepto de la política predeterminada dentro de las cadenas permite dos posibilidades fundamentales que debemos considerar primero, antes de decidir cómo vamos a organizar el cortafuegos.

1. Podemos fijar una política predeterminada para rechazar todos los paquetes y entonces adicionar reglas para permitir (ACCEPT) paquetes específicos que pueden venir de direcciones IP confiables o para algunos puertos en los cuales tenemos servicios corriendo, tales como bittorrent, servidor FTP, servidor Web, servidor de ficheros Samba, etc.

O alternativamente,

2. Podemos fijar una política para permitir todos los paquetes y entonces adicionar reglas que rechacen paquetes específicos que pueden venir de direcciones o rangos IP engorrosas o para algunos puertos en los cuales tenemos servicios privados o ningún servicio corriendo.

Generalmente, la opción 1 de arriba es usada para la cadena INPUT donde controlamos a que queremos permitir acceso en nuestra computadora y la opción 2 sería usada en la cadena OUTPUT donde generalmente confiamos en el tráfico que está saliendo de (originado en) nuestra computadora.

A continuación unos ejemplos típicos de permisos comunes:

Habilitar conexiones SSH/TCP

Usted puede garantizar el acceso remoto por ssh al servidor, ejecutando el siguiente comando:

$ sudo ufw allow ssh/tcp

Si en algún momento requiere remover esta regla, ejecute el siguiente comando:

$ sudo ufw delete allow ssh/tcp

Habilitar conexiones TCP al puerto 80

Si usted tiene instalado un servidor Web como Apache 2, debe garantizar el acceso al mismo por puerto 80:

$ sudo ufw allow in 80

Si en algún momento requiere remover esta regla, ejecute el siguiente comando:

$ sudo ufw delete allow in 80

Bloqueo de servicios

Usted puede bloquear servicios de su sistema, un caso común, es el bloqueo del tráfico SMTP saliente, solo si su servidor será empleado para enviar correo interno (dentro del mismo servidor), para realizar esto es posible bloquear el correo saliente, el cual emplea el puerto 25, ejecutando el siguiente comando:

$ sudo ufw deny out 25

Si en algún momento requiere remover esta regla, ejecute el siguiente comando:

$ sudo ufw delete deny out 25

Bloque de URL

Para bloquear una URL usando reglas iptables, usted debe denegar todas las conexiones entrantes desde la dirección vtv.gob.ve, ejecute el siguiente comando:

$ sudo iptables -A INPUT -p tcp -s vtv.gob.ve -d 127.0.0.1 \
                --dport 80 -j DROP

Denegar todas las conexiones de salida hacia la dirección vtv.gob.ve, ejecute el siguiente comando:

$ sudo iptables -A OUTPUT -p tcp -d www.vtv.gob.ve \
                --dport 80 -j DROP

Si en algún momento requiere remover esta regla, ejecute el siguiente comando:

$ sudo iptables -D INPUT -p tcp -s vtv.gob.ve -d 127.0.0.1 \
                --dport 80 -j DROP
$ sudo iptables -D OUTPUT -p tcp -d www.vtv.gob.ve \
                --dport 80 -j DROP

Redireccionamiento de puertos

Lo primero será que debemos tener habilitado el forwarding en el servidor, para ello pondrá lo siguiente:

$ echo "1" > sudo /proc/sys/net/ipv4/ip_forward

También pueden usar este otro comando, en caso de que el anterior no les funcione, ejecutando lo siguiente:

$ sudo sysctl net.ipv4.ip_forward=1
$ sudo sysctl -a | grep net.ipv4.ip_forward

Próximo, es habilitar las nuevas configuraciones al archivo de configuración, con el siguiente comando:

$ sudo sysctl -p

Luego reinicie el servicio de red:

$ sudo service networking restart

Supongamos que se requiere redireccionar el tráfico del puerto 8080 al 443 en el mismo servidor con una IP en específica, sería agregando el parámetro -s … ej. redireccionaré solo el tráfico que venga desde 192.168.0.101, para ello, ejecute el siguiente comando:

$ sudo iptables -t nat -A PREROUTING -p tcp -s 192.168.0.101 \
                --sport 8080 -j DNAT --to-destination 192.168.0.101:443
$ sudo iptables -t nat -A PREROUTING -p tcp -s 192.168.0.101 \ 
                --dport 8080 -j DNAT --to-destination 192.168.0.101:443

Y finalmente necesita enmascarar la dirección IP, para que el destino reciba el tráfico con la IP del servidor fuente:

$ sudo iptables -t nat -A POSTROUTING -j MASQUERADE

Usted comprobar las reglas iptables puede ver las reglas crudas del cortafuegos, ejecutando el siguiente comando:

$ sudo ufw show raw | grep 192.168.0.101
Chain PREROUTING (policy ACCEPT 13 packets, 4364 bytes)
pkts     bytes target  prot opt in  out  source         destination         
   0      0 DNAT       tcp  --  *   *    192.168.0.101  0.0.0.0/0   tcp dpt:8080 to:192.168.0.101:443

Si después requiere deshabilitar el cortafuegos, ejecute el siguiente comando:

$ sudo iptables -t nat -D PREROUTING -p tcp -s 192.168.0.101 \
                --sport 8080 -j DNAT --to-destination 192.168.0.101:443
$ sudo iptables -t nat -D PREROUTING -p tcp -s 192.168.0.101 \
                --dport 8080 -j DNAT --to-destination 192.168.0.101:443
$ sudo iptables -t nat -D POSTROUTING -j MASQUERADE

Conclusiones

De esta forma usted ha aprendido a:

  • Instalar un cortafuego usando UFW.
  • Configurar básicamente el funcionamiento UFW.
  • Crear políticas de permisos en su cortafuego para su servidor.
  • Gestionar el cortafuegos con los comando más comunes.
  • Auditar el registro de eventos del cortafuegos con UFW y iptables.
  • Probar el funcionamiento de las políticas del cortafuegos usando utilidades más comunes.

Referencias

¡Haz tu donativo!

Si te gusto este articulo, por favor, ayúdame a seguir escribiendo este tipo de articulo, haciendo donativos en Dolares vía el servicio Paypal haciendo clic aquí o en la siguiente imagen.


PayPal - The safer, easier way to pay online!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s