Advertisement
  1. Code
  2. Web Development

El cortafuegos de Linux

by
Read Time:17 minsLanguages:

Spanish (Español) translation by Steven (you can also view the original English article)

Hay varias aplicaciones de cortafuegos para Linux, pero lo que quizás no te des cuenta es que, en el corazón de todos estos programas, hay una única aplicación poderosa que está integrada en el Kernel de Linux: iptables. Este es el firewall de Linux. No importa qué programa utilices para configurar tu firewall en Linux, en última instancia, todo se reduce a iptables. Todo lo que hacen estos otros programas es configurarlo.

Entonces, aquí viene la pregunta: si esos programas simplemente configuran iptables, ¿por qué no configurarlo directamente tú mismo? ¡Hacerlo es más fácil de lo que piensas!


Conocimientos de redes

Si estás familiarizado con términos de redes, como conexiones, IP, TCP y Puerto, no dudes en pasar al siguiente paso. De lo contrario, si eres nuevo en las redes, sigue leyendo para familiarizarte con los términos que deberás comprender para poder seguir este tutorial.

Ten en cuenta que los términos y definiciones a continuación se han simplificado demasiado de forma intencionada. Están destinados a usuarios cotidianos, no a administradores de sistemas. Así que, si eres un administrador de sistemas experimentado o tienes un CCNA en tu bolsillo, discúlpame por no ingresar en los detalles.

TCP/IP

TCP/IP es un protocolo que permite que las computadoras se comuniquen entre sí a través de Internet y redes Ethernet.

El fracaso es el último recurso.

Imagina una red Ethernet como una pequeña red local (LAN - red de área local), como tu PC, computadora portátil y teléfono inteligente en casa. Es una pequeña red heterogénea que está aislada del resto del mundo. Una red de tales redes es lo que todos conocemos como Internet: un conjunto de redes interconectadas.

TCP/IP es una combinación de dos protocolos que trabajan en diferentes niveles en la jerarquía de la cadena de comunicación de la red. No profundizaremos en detalles sobre esa jerarquía. TCP son las siglas de Transfer Control Protocol, y su principal responsabilidad es asegurar que la comunicación sea exitosa. Controla la exactitud de los datos enviados y asegura su éxito. Tiene diferentes algoritmos para realizar sumas de comprobación sofisticadas, autocorregir y reintentar. El fracaso es el último recurso. El nombre, IP proviene de Internet Protocol. Lo mejor es asociarlo con el "número de teléfono" de tu PC. Cada máquina capaz de comunicarse a través de Internet debe tener una dirección IP, un número de teléfono único, para que los paquetes de comunicación puedan encontrar su destino. Un paquete es un pequeño fragmento de datos dentro de un flujo de comunicación, que es autónomo y se puede verificar que sea correcto. Básicamente, podemos decir que nuestras computadoras envían paquetes TCP a través de Internet utilizando el protocolo IP.

Cada comunicación de red está vinculada a un puerto específico. Los puertos de red van de 0 a 2^16 (65536). Cada conexión de red tiene un puerto de salida para quien la inicia y un puerto de entrada para quien está escuchando los mensajes de otras computadoras. Puede haber varias conexiones entre varias computadoras a través de puertos idénticos. Sin embargo, una computadora puede hablar sobre varios puertos a la vez. Entonces, básicamente, los puertos son buenos para identificar servicios y definir canales de comunicación, pero no limitan la cantidad de datos o conexiones.

Algunas computadoras pueden tener direcciones IP similares. Es posible que hayas observado que tanto tu computadora en casa como en el trabajo tienen direcciones IP que toman la forma de algo como 192.168.algo.algo, o 10.0.algo.algo, o 172.16.algo.algo. Estas son las llamadas direcciones IP privadas que solo pueden usarse dentro de tu LAN. No puedes acceder a Internet con direcciones IP como estas. Son similares a los números interiores de la red telefónica de tu empresa.

Puerta de enlace y puente

Un puente es lo que las computadoras con direcciones IP reales (públicas) pasan a Internet.

The bridgeThe bridgeThe bridge

Básicamente, estas computadoras tienen los derechos y la capacidad de comunicarse entre sí directamente en Internet. Pero, dado que no hay conexiones directas entre todas las computadoras del mundo (eso sería bastante difícil de lograr), los puentes son responsables de conectar segmentos de Internet.

Manteniendo viva nuestra analogía de telefonía, puedes imaginar que estos puentes son similares a los centros telefónicos de tu ciudad o vecindario. Si realizas una llamada a otro número local (las computadoras de la izquierda en nuestro esquema), la comunicación podría haber sido realizada directamente por tu central telefónica conectando físicamente tu línea con la de tu vecino. Sin embargo, si en cambio deseas llamar a tu tío lejano Bob, tu llamada tendrá que ser redirigida a varios centros telefónicos hasta que se pueda conectar el teléfono de tu tío. Estos forman un puente entre tu ciudad y su ciudad.

Una puerta de enlace es una forma de que las computadoras de una red privada (LAN con direcciones IP privadas) se comuniquen con otras computadoras en Internet.

GatewayGatewayGateway

Una red privada es como la red telefónica privada de tu empresa. Puedes llamar a números interiores, pero para llamar a alguien que está fuera de la red de tu empresa, como tu esposa en casa, primero debes marcar un número o prefijo especial.

En realidad, las computadoras funcionan de manera similar. Cuando estás en una red privada, tienes una computadora llamada puerta de enlace. Cuando tu computadora intente hablar con otra computadora en Internet, primero se comunicará automáticamente con la puerta de enlace y solicitará "una línea" al mundo exterior. La puerta de enlace hablará con la computadora que se encuentra en Internet y reenviará el mensaje a tu computadora. Tú, como usuario normal, no ves ninguna diferencia entre un puente y una puerta de enlace. Tu computadora sabrá cómo lidiar con ellos.


Definición de un cortafuegos

Un firewall o cortafuegos es un programa que se ejecuta en una puerta de enlace, puente o PC/Laptop/Smartphone que sea capaz de filtrar paquetes de red entrantes, salientes y reenviados. Un firewall es esencialmente una herramienta que te permite restringir tu acceso a Internet o el de tu red, y el acceso de otra persona desde Internet a tu red.

Y sí, tu enrutador de cable o Wi-Fi doméstico es, de hecho, un firewall para todas tus computadoras y dispositivos que se conectan a Internet a través de él.


El problema que resolveremos

Para establecer el contexto, imaginemos una arquitectura de red muy posible. He visto muchas empresas pequeñas que ejecutan algo similar a esto.

NetworkNetworkNetwork

Lo que tenemos aquí es en realidad algo bastante simple:

  • Algunas computadoras y otros dispositivos conectados a la red: los cuadros verdes.
  • Un servidor de correo electrónico: el cuadro rojo.
  • Un servidor de Microsoft Active Directory: el cuadro azul.
  • Una puerta de enlace, que también es un firewall, para nuestra red con Linux: la caja negra.
  • Entre todos estos hay un simple switch o conmutador de red.

En la siguiente sección, configuraremos iptables en esa puerta de enlace, para que permita que todos los dispositivos de la red se conecten a Internet. Nos permitirá conectarnos a él, a través de SSH, y permitirá que los servidores externos de correo lleguen al servidor de correo dentro de nuestra red, una computadora que ni siquiera tiene una dirección IP pública; solo una privada.


Componentes de iptables

El nombre de Iptables en realidad tiene un significado en su funcionalidad. Es un conjunto de tablas de direcciones IP y puertos con algunas acciones adjuntas. En términos de iptable, estas tablas se denominan cadenas. Un iptables vacío, sin configurar, podría verse así:

Puedes observar que hay tres cadenas principales:

  • INPUT - todas las conexiones entrantes.
  • FORWARD - las conexiones que pasan a través de.
  • SALIDA - las conexiones que salen de este servidor.

El término "política ACEPTAR" entre paréntesis significa que ACEPTAR se establece como política predeterminada para esa cadena en particular. Entonces, cuando no haya coincidencia para una conexión, se aplicará esa regla. Hay tres conceptos principales que puedes utilizar al configurar tu firewall:

  • política predeterminada ACEPTAR y que se rechace de forma selectiva todo lo que necesites; puedes resultar difícil especificar todo lo que se niega. No recomiendo este enfoque.
  • política predeterminada SOLTAR o RECHAZAR y permitir selectivamente todo lo que necesitas; esto es mejor, pero tiene un problema. Si cometes un error en la configuración de iptables, puedes permanecer fácilmente con cadenas vacías que niegan el acceso a todo y a todos, incluido a ti. Por lo tanto, a menos que siempre tengas acceso físico a tu servidor firewall/computadora, te recomiendo que uses el siguiente enfoque.
  • política predeterminada ACEPTAR y una política explícita para SOLTAR todo y luego permitir selectivamente todo lo que necesitas - esta es una solución combinada entre las dos primeras posibilidades. Utilizará una política predeterminada ACEPTAR, por lo que si algo sale mal, puedes volver a iniciar sesión a través de SSH o cualquier conexión remota que uses para tu firewall. Al mismo tiempo, una regla explícita de SOLTAR para cualquier conexión no coincidente garantiza que estés seguro. Permitir solo lo que sabes y realmente necesitas usar ofrece la mejor protección posible.

Agregar reglas a Iptables

Hay dos formas de agregar una nueva regla a iptables. Uno es insertarla al principio de una cadena. La otra opción es agregarla al final de una cadena. ¿Por qué importa en qué orden ocurren las reglas?

Importante: iptables verifica las reglas en una cadena de arriba a abajo. Detendrá su búsqueda en la primera coincidencia.

Debes diseñar tus reglas de tal manera que consideres el comportamiento mencionado anteriormente de iptables. Después de la primera coincidencia de una regla, iptables tomará las acciones especificadas por la regla y luego cesará la búsqueda. Si ninguna regla coincide con la conexión marcada, se aplica la política predeterminada.

Insertar una nueva regla

Digamos que queremos agregar una regla a nuestras iptables que permitirá que cualquiera se conecte al puerto 22 de nuestro firewall. El puerto 22 es el puerto para el protocolo SSH. Por supuesto, un buen administrador de servidor cambiará este puerto a algo inesperado por razones obvias de seguridad/oscuridad, pero esa es otra historia para otro tutorial. Nos quedaremos con 22.

Supuse que la dirección IP frente a Internet con la IP pública está en la interfaz de red, llamada eth0. Analicemos este comando:

  • -I - significa insertar la regla.
  • INPUT - especifica la cadena deseada.
  • -i - significa interfaz de red - en nuestro caso, eth0.
  • -p - es para protocolo (tcp o udp).
  • --dport 22 - es para el puerto de destino 22 - tiene una versión correspondiente --sport para la verificación del puerto de origen.
  • -j - en realidad proviene de "jump (saltar)" y es seguido por una acción. En nuestro caso, la acción para aceptar la conexión.

Sin embargo, es posible que ya hayas adivinado que esta regla tiene poco efecto en este momento. Nuestra política predeterminada es ACEPTAR, por lo que aceptar algo explícitamente no nos ofrece ninguna funcionalidad adicional. Ahora, recuerda la tercera forma recomendada de configurar nuestro firewall: la regla explícita para negar todo lo que no coincida. Agreguemos esa regla.

Agregar reglas

Queremos agregar una regla que bloquee el tráfico entrante. Pero ojo: solo queremos bloquear lo que pueda ser perjudicial. Si bloqueamos todo, no podremos hacer nada, porque las respuestas a nuestras solicitudes serán rechazadas. Por ejemplo, cuando navegas por una página web, realizas una solicitud y luego recibes una respuesta. Esta respuesta llega a tu computadora, entonces, en la cadena INPUT, debemos tener una regla para permitirlo.

Primero, agregaremos una regla para aceptar el tráfico entrante para conexiones ya establecidas, como respuestas a solicitudes.

Ahora que hemos resguardado nuestras conexiones existentes y las respuestas a las conexiones que iniciamos, podemos negar todo lo demás que no coincidió.

Hemos agregado otra línea, con una regla para SOLTAR todas las conexiones que coincidan. Recuerda: esta regla solo se aplicará si ninguna de las anteriores coincide.

Hay dos formas de rechazar una conexión.

  1. Puedes usar SOLTAR, que equivale a marcar un número de teléfono inexistente con la diferencia de que, después de un tiempo, la conexión a la red se agota. Con un número de teléfono, un robot te informa que el número no existe. Pero el resultado final desde el punto de vista de quien llama es el mismo: piensa que el destino no existe.
  2. La segunda forma de rechazar la conexión es con la regla RECHAZAR y un mensaje opcional. Esto es análogo al número al que estás intentando llamar cuando está ocupado. Puedes saber que hay un número, sabes que se puede llamar, pero simplemente se niega a atender tus llamadas. Opcionalmente, puedes proporcionar un mensaje con una regla RECHAZAR; el valor predeterminado es "Puerto ICMP inalcanzable" o algo similar.

Permitir que las computadoras accedan a Internet

En este punto, tenemos algunas reglas básicas para la cadena INPUT. Pero tenemos una red de computadoras con direcciones IP privadas. Necesitamos proporcionar una puerta de entrada a Internet. Esto también lo hace iptables: el firewall.

Traducción de direcciones de red (NAT)

Es probable que ya hayas escuchado este término: NAT. Esto se refiere al procedimiento de traducir una dirección de red a otra y reenviar la información entre las dos. Se utiliza con mayor frecuencia en arquitecturas como la nuestra. La puerta de enlace tiene que hacer NAT para traducir la IP de cualquier computadora desde la LAN a su propia IP pública y luego volver.

El enrutamiento es el procedimiento mediante el cual un sistema puede determinar en qué interfaces de red y hacia qué puerta de enlace puede comunicarse para llegar a su destino. Cada computadora tiene una tabla de enrutamiento propia para determinar esto. Iptables puede conectarse a este procedimiento de enrutamiento en dos puntos diferentes: antes y después de que se haya producido el procedimiento.

Natear con Iptables

Este comando agrega una regla como POSTROUTING a la tabla NATing (-t nat). POSTROUTING significa esencialmente que los paquetes pasan primero por el mecanismo de enrutamiento en la puerta de enlace y, solo después de eso, se modifican. La regla -j SNAT significa NAT de origen; la dirección de origen de los paquetes se cambiará a la dirección en la interfaz especificada por -o eth0. En nuestro caso, a la dirección IP especificada por la opción, --to-source. Por lo tanto, cualquier persona contactada por una computadora en tu red asumirá que estás hablando directamente con tu puerta de enlace. No tendrá absolutamente ninguna pista sobre el hecho de que los paquetes están destinados a una computadora diferente. La puerta de enlace, usando iptables, mantendrá una lista interna de todas las direcciones IP traducidas y, cuando llegue una respuesta, revertirá el cambio y pasará la respuesta a la computadora dentro de la red.


Permitir al cliente de Internet al servidor de correo electrónico

Otro problema al que nos enfrentamos es qué hacer cuando tenemos un servidor que está detrás de un firewall. Necesitamos permitir que los clientes, provenientes de Internet, se comuniquen con nuestro servidor de alguna manera. Este es el caso de nuestro servidor de correo. Cuando llega un correo electrónico que tiene que ser entregado a una cuenta de correo en nuestro servidor, el servidor de correo electrónico remitente deberá conectarse a nuestro servidor receptor.

Pero nuestro servidor de correo solo tiene una dirección IP privada. No hay forma de que una computadora externa pueda conectarse directamente. Por otro lado, nuestra puerta de enlace tiene una IP externa a la que cualquiera puede conectarse. ¿La solución? Abre un puerto en nuestra puerta de enlace para que una solicitud de Internet a ese puerto vaya a nuestro servidor de correo electrónico. La respuesta, por supuesto, viajará a través de la puerta de enlace de regreso al cliente. El truco consiste en usar un tipo diferente de NAT aquí, llamado NAT de destino. Esto cambia el destino de los paquetes y luego los revierte cuando ocurre la respuesta. Piensa en DNAT como lo contrario de SNAT.

Sugerencia: Es posible que conozcas esta función como "Servidor virtual", si alguna vez has jugado con pequeños enrutadores domésticos.

¿Entonces, qué esta pasando aquí? Un paquete llega a nuestra puerta de enlace en el puerto 25 (el puerto utilizado para SMTP, el protocolo de correo electrónico que utiliza todo Internet). La regla anterior captura este paquete debido a la opción --dport 25, que básicamente dice: "Haz coincidir cualquier cosa que vaya a este puerto en la interfaz especificada por -i eth0. Ahora que el paquete coincide, cambia su destino desde la máquina actual (la puerta de entrada) a la especificada por --to-destination". Ten en cuenta que puedes especificar el puerto explícitamente después de la dirección IP separándolo con dos puntos.

Finalmente, ten en cuenta que esto está en el gancho PREROUTING. El destino debe cambiarse antes de que tenga lugar realmente el enrutamiento. De lo contrario, los paquetes terminarían en la puerta de enlace y no encontrarían forma de llegar al servidor de correo.


Configuración persistente de iptables

Las reglas que insertas o agregas a iptables están en la memoria. Después de un reinicio, (es broma): ¡todo se ha ido! Para guardar tu configuración, debes volcarla en un archivo, así:

No importa el nombre del archivo, ni su extensión. Para restaurar las reglas, ejecuta este comando cuando inicies tu computadora.

Si echas un vistazo al contenido guardado, verás que son los mismos parámetros que usamos con los comandos de iptables. Hay algunas diferencias menores, pero puedes comprender fácilmente el archivo guardado e incluso puedes escribir tus propios archivos a mano y cargarlos.


Notas finales

Para terminar, aquí hay algunas ideas sobre cuándo y cuándo no usar un firewall con una computadora Linux.

Utiliza un firewall en Linux cuando configures un servidor (como una puerta de enlace en nuestro ejemplo) o cuando tengas una computadora con información importante que esté directamente expuesta a Internet. Antes de comenzar a configurar tus iptables, considera el peligro potencial. Pregúntate: ¿se conoce mi computadora en Internet? Hay unos pocos miles de millones de computadoras por ahí. Si el tuyo es solo uno, la posibilidad de ser un objetivo es increíblemente baja. ¿Hay personas directamente interesadas en tu información? Los piratas informáticos no pierden el tiempo robando datos aleatorios con la esperanza de encontrar algo. Por lo general, saben lo que buscan y luego se dirigen a las computadoras que contienen la información deseada. Por supuesto, existen innumerables ataques contra computadoras aleatorias que intentan instalar algún tipo de gusano o virus, pero en Linux, por diseño, eres inmune.

No pierdas el tiempo configurando un firewall en Linux cuando se trata de una computadora que siempre está detrás de un firewall, como la PC de tu hogar detrás del enrutador de tu hogar, o cuando no tienes información particularmente importante en tu computadora portátil. Si mantienes los servicios que escuchan en la red al mínimo y tienes una contraseña decentemente segura, puedes olvidar tu firewall. Personalmente, no tengo una computadora personal, computadora portátil o teléfono inteligente con un firewall en ejecución. Sin embargo, tengo un enrutador doméstico con un firewall bien configurado.

Creo que también puedes aplicar estas ideas de manera segura en Mac OSX. Si eres un usuario de Windows, lo siento: un firewall es tu primera línea de defensa. Para Linux o MacOS, un firewall es tu última línea de defensa. Una contraseña cuidadosamente seleccionada y que no ejecute servicios inútiles debería manejar la mayor parte de la protección de tu computadora.

Gracias por leer. ¿Tienes preguntas?

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.