El Firewall de Linux

Existen varias aplicaciones de firewall para Linux, pero no se dará cuenta de que, en el corazón de todos estos programas, se encuentra una aplicación única y poderosa que está incorporada directamente en el Kernel de Linux: iptables. Este es el firewall de Linux. No importa qué programa utilice para configurar su 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 simplemente configurarlo directamente usted mismo? Hacerlo es más fácil de lo que piensas!


Fondo de redes

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

Tenga en cuenta que los términos y definiciones a continuación se han simplificado en exceso intencionalmente. Están destinados a los usuarios de todos los días, no a los administradores de sistemas. Entonces, si usted es un administrador de sistemas experimentado o tiene un CCNA en su bolsillo, discúlpeme por no haber ingresado los detalles..

TCP / IP

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

El fracaso es el último recurso.

Imagina un Red ethernet como una pequeña red local (LAN - red de área local), como la PC de su hogar, la computadora portátil y el teléfono inteligente. 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 el 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 representa Protocolo de control de transferencia, y su principal responsabilidad es garantizar que la comunicación sea exitosa. Controla la exactitud de los datos enviados y garantiza su éxito. Tiene diferentes algoritmos para realizar sumas de comprobación sofisticadas, autocorrección y reintento. El fracaso es el último recurso. El nombre, IP proviene del protocolo de internet. Puede asociarlo mejor con el "número de teléfono" de su 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 sus destinos. UNA paquete es una pequeña parte de datos dentro de un flujo de comunicación, que es independiente y se puede verificar que sea correcta. Esencialmente, podemos decir que nuestras computadoras envían paquetes TCP a través de Internet usando el protocolo IP.

Cada comunicación de red está vinculada a un determinado Puerto. Los puertos de red van de 0 a 2 ^ 16 (65536). Cada conexión de red tiene un puerto saliente para quien lo inicia y un puerto entrante para quien escucha los mensajes de otras computadoras. Puede haber varias conexiones entre varias computadoras sobre puertos idénticos. Sin embargo, una computadora puede hablar sobre varios puertos a la vez. Básicamente, los puertos son buenos para identificar servicios y definir canales de comunicaciones, pero no limitan la cantidad de datos o conexiones..

Algunas computadoras pueden tener direcciones IP similares. Es posible que haya observado que tanto su computadora en el hogar como en el trabajo tienen direcciones IP que toman la forma de algo como las líneas de 192.168. Algo. Algo, o 10.0. Algo. Algo., o 172.16.algo. Algo. Estas son las llamadas direcciones IP privadas que se pueden usar solo dentro de su LAN. No puedes salir a internet con direcciones IP como esta. Son similares a los números interiores de la red telefónica de su empresa..

Puerta de enlace y puente

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

Esencialmente, estas computadoras tienen los derechos y capacidades para comunicarse directamente en Internet. Pero, dado que no hay conexiones directas entre todas las computadoras en el 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, puede imaginar que estos puentes son similares a los centros telefónicos de su ciudad o vecindario. Si realiza una llamada a otro número local (las computadoras a la izquierda en nuestro esquema), la comunicación podría haber sido realizada directamente por su centro telefónico al conectar físicamente su línea con la de su vecino. Sin embargo, si en cambio desea llamar a su tío distante Bob, su llamada tendrá que ser redirigida a través de varios centros telefónicos hasta que se pueda conectar el teléfono de su tío. Estos forman un puente entre tu pueblo y su pueblo.

UNA Puerta es una forma para que las computadoras de una red privada (LAN con direcciones IP privadas) se comuniquen con otras computadoras en Internet.

Una red privada es como la red telefónica privada de su empresa. Puede llamar a los números interiores, pero para llamar a alguien que está fuera de la red de su compañía, como su esposa en casa, primero debe marcar un número especial o prefijo.

Las computadoras realmente funcionan de una manera similar. Cuando está en una red privada, tiene una computadora llamada gateway. Cuando su computadora intente hablar con otra computadora en Internet, automágicamente Póngase en contacto con la puerta de enlace primero y solicite "una línea" al mundo exterior. La puerta de enlace hablará con la computadora que se encuentra en Internet y reenviará el mensaje a su computadora. Usted, como usuario ordinario, no ve ninguna diferencia entre un puente y una puerta de enlace. Tu computadora sabrá como tratar con ellos..


Definición de un Firewall

Un firewall es un programa que se ejecuta en un Gateway, Bridge o PC / Laptop / Smartphone que es capaz de filtrar paquetes de red entrantes, salientes y reenviados. Un firewall es esencialmente una herramienta que le permite restringirle a usted o al acceso de su red a Internet, y al acceso de otra persona desde Internet a su red..

Y sí, su enrutador de cable o Wi-Fi doméstico es, de hecho, un firewall para todas sus 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 pequeñas empresas que manejan algo similar a esto..

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

  • Algunas computadoras y otros dispositivos conectados a la red - las cajas 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 cortafuegos, para nuestra red que ejecuta Linux: la caja negra
  • Entre todos estos hay un simple conmutador de red.

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


Componentes 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 conocen como cadenas. Una iptables vacía y sin configurar puede tener este aspecto:

csaba ~ # iptables -L. ENTRADA de la cadena (política ACEPTAR) protección de destino de origen destino de la cadena ADELANTE (política ACEPTAR) protección de destino de la fuente destino de destino SALIDA de SALIDA (política ACEPTAR) protección de destino de la fuente destino de destino

Se puede observar que hay tres cadenas principales:

  • ENTRADA - todas las conexiones entrantes
  • ADELANTE - conexiones pasando por
  • SALIDA - conexiones que salen de este servidor

El termino, "política de aceptar"entre paréntesis significa que ACCEPT se establece como la política predeterminada para esa cadena en particular. Por lo tanto, cuando no hay una coincidencia para una conexión, se aplicará esa regla. Hay tres conceptos principales que puede usar al configurar su firewall:

  • política predeterminada ACEPTA y deniega selectivamente todo lo que necesitas - Puede ser difícil especificar todo lo que se niega. No recomiendo este enfoque..
  • la política predeterminada DROP o RECHAZAR y permitir selectivamente todo lo que necesita para - Esto es mejor, pero tiene un problema. Si comete un error en la configuración de su iptables, puede quedarse fácilmente con las cadenas vacías que le niegan el acceso a todo ya todos, incluido usted. Por lo tanto, a menos que siempre tenga acceso físico a su servidor de firewall / computadora, le recomiendo que use el siguiente enfoque.
  • política predeterminada ACEPTAR y una política explícita para SALTAR todo y luego permitir selectivamente todo lo que necesita - Esta es una solución combinada entre las dos primeras posibilidades. Usará una política predeterminada ACEPTAR, por lo que si algo sale mal, puede volver a iniciar sesión en SSH o en cualquier conexión remota que use para su firewall. Al mismo tiempo, una regla DROP explícita para las conexiones no coincidentes garantiza la seguridad. Permitir solo lo que sabe y realmente necesita usar ofrece la mejor protección posible.

Agregando Reglas a Iptables

Hay dos formas de agregar una nueva regla a iptables. Una es insertarlo al principio de una cadena. La otra opción es añadirlo 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. Parará su búsqueda en el primer partido..

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

Insertando una Nueva Regla

Digamos que queremos agregar una regla a nuestras iptables que permita a cualquier persona conectarse al puerto 22 en 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.

csaba ~ # iptables -I INPUT -i eth0 -p tcp --dport 22 -j ACEPTAR csaba ~ # iptables -L ENTRADA de cadena (política ACEPTAR) protección de destino origen de origen ACEPTAR tcp - en cualquier lugar tcp dpt: ssh

Supuse que la dirección IP que enfrenta Internet con la IP pública está en la interfaz de red, llamada et0. Vamos a analizar este comando:

  • -yo - significa insertar la regla
  • ENTRADA - especifica la cadena deseada
  • -yo - significa interfaz de red - en nuestro caso, et0
  • -pag - es para protocolo (tcp o udp)
  • --dport 22 - es para el puerto de destino 22 - tiene un correspondiente --deporte versión para la verificación del puerto de origen
  • -j - en realidad proviene de "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, recuerde la tercera forma recomendada de configurar nuestro firewall: la regla explícita para negar todo lo que no coincide. Vamos a añadir esa regla.

Reglas anexas

Queremos añadir una regla que bloquee el tráfico entrante. Pero ten cuidado: solo queremos bloquear lo que podría ser perjudicial. Si bloqueamos todo, no podremos hacer nada, porque las respuestas a nuestras solicitudes serán rechazadas. Por ejemplo, cuando navega por una página web, realiza una solicitud y recibe una respuesta. Esta respuesta llega a su computadora, por lo tanto, en la cadena de ENTRADA, debemos tener una regla para permitirlo.

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

csaba ~ # iptables -A ENTRADA -i eth0 -m conntrack --ctstate ESTABLECIDO, RELACIONADO -j ACEPTAR csaba ~ # iptables -L ENTRADA de cadena (política ACEPTAR) protección de destino optar por destino ACEPTAR tcp - en cualquier lugar tcp dpt: ssh ACEPTAR todo - en cualquier lugar donde sea ctstate RELACIONADO, ESTABLECIDO

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

csaba ~ # iptables -A INPUT -i eth0 -p tcp -j DROP csaba ~ # iptables -L ENTRADA EN LÍNEA (política ACEPTAR) protección de destino destino origen ACEPTAR tcp - en cualquier lugar tcp dpt: ssh ACEPTAR todo - en cualquier lugar ctstate GOTA ESTABLECIDA, RELACIONADA, tcp - en cualquier lugar y en cualquier lugar

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

Hay dos formas de rechazar una conexión..

  1. Puede usar DROP, que es equivalente a marcar un número de teléfono inexistente con la diferencia de que, después de un tiempo, la conexión de la red se agota. Con un número de teléfono, un robot le informa que el número no existe. Pero el resultado final desde el punto de vista de la persona que 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 intenta llamar estar ocupado. Puede que sepa que hay un número, que puede llamarlo, pero simplemente se niega a atender sus llamadas. Opcionalmente, puede proporcionar un mensaje con una regla de RECHAZO; 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 que tienen direcciones IP privadas. Tenemos que proporcionar una puerta de entrada a Internet. Esto también lo hace iptables: el firewall..

Traducción de direcciones de red (NAT)

Probablemente, ya has escuchado este término: NAT. Esto se refiere al procedimiento de traducir una dirección de red a otra y enviar 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 de la LAN a su propia IP pública y luego regresar.

El enrutamiento es el procedimiento mediante el cual un sistema puede averiguar qué interfaces de red y hacia qué pasarela 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 haya ocurrido el procedimiento.

Nating con iptables

csaba ~ # iptables -t nat -A POSTROUTING -o eth0 -j SNAT - en la fuente 89.72.31.243

Este comando agrega una regla como POSTROUTING a la tabla de NATing (-t nat). POSTROUTING esencialmente significa que los paquetes pasan primero el mecanismo de enrutamiento en la puerta de enlace y, solo después de eso, se modifican. La regla -j SNAT significa Fuente NAT; 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., --a la fuente. Por lo tanto, cualquier persona contactada por una computadora en su red asumirá que está hablando directamente a su puerta de enlace. No tendrá absolutamente ninguna pista sobre el hecho de que los paquetes están destinados a otra computadora diferente. La puerta de enlace, que utiliza 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 desde Internet al servidor de correo electrónico

Otro problema que 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 debe enviarse a una cuenta de correo en nuestro servidor, el servidor de correo electrónico de envío tendrá que conectarse a nuestra cuenta de recepción..

Pero nuestro servidor de correo solo tiene una dirección IP privada. No hay forma de que una computadora externa pueda conectarse directamente a ella. Por otro lado, nuestra puerta de enlace tiene una IP externa a la que cualquiera podría conectarse. ¿La solución? Abra 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 es 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. Piense en DNAT como el reverso de SNAT.

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

csaba ~ # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j DNAT - to-destination 192.168.1.2:25

¿Entonces, Que 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 usa todo Internet). La regla anterior atrapa este paquete debido a la --dport 25 opción, que básicamente dice, "Haga coincidir todo lo que vaya a este puerto en la interfaz especificada por -i eth0. Ahora que el paquete coincide, cambie su destino de la máquina actual (la puerta de enlace) al especificado por --a destino."Tenga en cuenta que puede especificar el puerto explícitamente después de la dirección IP separándolo con dos puntos.

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


Configuración de iptables persistente

Las reglas que usted inserta o agrega a iptables están en la memoria. Después de un reinicio, parodia: ¡todo se ha ido! Para guardar su configuración, debe volcarla en un archivo, así:

csaba ~ # iptables-save> /some/directory/my_rules.fw

El nombre del archivo no importa, ni su extensión. Para restaurar las reglas, ejecute este comando cuando se inicie su computadora.

iptables-restor < /some/directory/my_rules.fw

Si observa el contenido guardado, verá que son los mismos parámetros que usamos con los comandos de iptables. Hay algunas diferencias menores, pero puede entender fácilmente el archivo guardado e incluso puede escribir sus propios archivos a mano y cargarlos..


Pensamientos finales

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

Usar un firewall en Linux cuando configura un servidor (como una puerta de enlace en nuestro ejemplo), o cuando tiene una computadora con información importante que está directamente expuesta a Internet. Antes de saltar para configurar sus iptables, considere el peligro potencial. Pregúntese: ¿es mi computadora conocida en Internet? Hay unos pocos miles de millones de computadoras por ahí. Si el tuyo es solo uno, la posibilidad de ser objetivo es increíblemente bajo. ¿Hay personas directamente interesadas en su información? Los piratas informáticos no pierden tiempo robando datos aleatorios con la esperanza de que puedan encontrar algo. Por lo general, saben lo que están buscando y luego se dirigen a las computadoras que contienen la información deseada. Por supuesto, hay innumerables ataques contra computadoras aleatorias que intentan instalar algún tipo de gusano o virus, pero en Linux, eres inmune por diseño..

No pierdas tu tiempo con la configuración de un servidor de seguridad en Linux cuando se trata de una computadora que siempre está detrás de un servidor de seguridad, como la computadora de su casa detrás del enrutador de su casa, o cuando no tiene información particularmente importante en su computadora portátil. Si mantiene al mínimo los servicios que escuchan en la red y tiene una contraseña decentemente segura, puede olvidar su firewall. Personalmente no tengo computadora personal, computadora portátil o teléfono inteligente con un firewall en funcionamiento. Sin embargo, tengo un enrutador doméstico con un firewall bien configurado..

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

Gracias por leer. Preguntas?