LinuxParty

Inicio desactivadoInicio desactivadoInicio desactivadoInicio desactivadoInicio desactivado
 

Resumen: Iptables es la aplicación estándar de Linux® para crear un firewall. Es fácil de configurar y mantener al mismo tiempo que es lo suficientemente potente como para proporcionar el control de un aparato de gama alta. Aprenda cómo empezar con iptables, recuperarse de los problemas comunes, y simular un escenario de uso de pequeña oficina.

Introducción

Iptables es una aplicación que permite la administración de las tablas en el servidor de seguridad del kernel de Linux. No es necesario conocimientos previos sobre el núcleo, o sobre las tablas del mismo, ni tampoco sobre las modificaciones del cortafuegos y tareas comunes de administración del sistema.

En algunas distribuciones de Linux, iptables viene activado por defecto. Es común que los usuarios sin experiencia utilicen aplicaciones que definen las reglas para evitar problemas de red. Este artículo le ayudará a empezar rápidamente y manipular iptables según sus necesidades.

A veces, iptables se utiliza para referirse a la del kernel de Linux a nivel de componente. En este artículo, todo lo relacionado con iptables se referirá específicamente a la aplicación que controla los protocolos en una distribución de Linux, como IPv4, IPv6, y las tablas ARP.

Al igual que otras aplicaciones de Linux, se puede configurar iptables en la interfaz de línea de comandos o en un archivo de texto plano, lo que permite la edición con cualquier editor de texto. Aunque es fácil de modificar, podría sentirse incómodo desde el dispositivo de cortafuegos, donde la mayor parte de la interacción con los ajustes y configuraciones que se hace en una interfaz gráfica. Hay aplicaciones que utilizan iptables para gestionar un servidor de seguridad a través de interfaces gráficas, pero este artículo cubrirá la interacción con iptables en su ambiente natural: la terminal de Linux.

El tener un buen nivel usando un terminal de Linux (también referido como un emulador de la consola o terminal) ayudará a los desarrolladores tomar ventaja de los ejemplos y configuraciones que siguen. La interfaz desde la línea de comandos es la principal forma de interactuar con iptables, y una terminal de Linux es la aplicación que permite el acceso a esta interfaz.

Las reglas que se aplican son en su mayoría muy legibles y fácilmente portables a otros servidores. Esta función ahorra mucho tiempo cuando se trata de hardware.

Requisitos de las solicitudes

A pesar de que iptables es el tema principal de este artículo, es probablemente que ya tengo instalado y que también vamos a utilizar nmap, que es otra aplicación de gran alcance.

Compruebe que está instalado nmap antes de continuar. Puede instalar este escáner de red efectiva en una distribución Debian / Ubuntu Linux.


Listado 1A. Instalación de nmap en Debian / Ubuntu

        
 sudo apt-get install nmap 

 
Listado 1B. Instalación de nmap en Fedra/RedHat/CentOS

        
 sudo yum -y install nmap 

 

Primeros pasos

Casi todas las distribuciones de Linux vienen con iptables instalado y listo para usar. Asegúrese de que tiene el iptables disponible en su shell preferida. Este artículo utiliza las convenciones de Debian / Ubuntu para configurar iptables.

Debido a que vamos a hacer modificaciones en el nivel del núcleo, asegúrese de que tiene privilegios de root.

Listado 2 muestra las reglas que actualmente se aplican en el servidor. Listado 2 se repetirá durante el artículo para comprobar cuáles son las normas que están actualmente en uso y verificar los cambios con éxito.


Listado 2. Normas que se aplican actualmente

        
root@desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination 
      

 

En el Listado 2 , instruimos a iptables para una lista de todas las reglas que se aplican actualmente en el firewall. Esto se logra mediante el flag -L

La salida también menciona Chain . Piense en las cadenas de IPTables como secciones en el servidor de seguridad que permite un cierto tipo de tráfico. Por ejemplo, para bloquear todo el tráfico de la red privada a Internet, esta norma se establece en la sección de salida. Del mismo modo, cualquier norma que afecta el tráfico entrante se enumeran en la cadena INPUT.

Las tres cadenas que se aplican a cada uno un tipo de actividad en el firewall. En este punto, no hay nada establecido todavía. Esto significa que no hay restricciones y todo el tráfico de red se le permite entrar y salir.

  • Chain INPUT
  • Chain FORWARD , y
  • Chain OUTPUT

Antes de continuar, es necesario verificar qué puertos están abiertos en el servidor para la comparación después de que se bloquee. Como se mencionó antes, Nmap es una herramienta de línea de comandos que proporciona información de seguridad de red. Listado 3 muestra la salida de nmap en un servidor remoto en la red.


Listado 3. El escaneo en red con nmap

        
~ $ nmap 10.0.0.120

Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-21 20:44 EST
Nmap scan report for 10.0.0.120
Host is up (0.012s latency).
Not shown: 991 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
25/tcp   open  smtp
53/tcp   open  domain
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql
4001/tcp open  unknown
5900/tcp open  vnc
8080/tcp open  http-proxy

Nmap done: 1 IP address (1 host up) scanned in 6.57 seconds
      

 

Esos son un montón de puertos abiertos! En tan sólo unos pocos pasos, usted aprenderá cómo hacer los cambios mencionados, a partir de iptables.


Virtual no siempre es mejor

A medida que aprendes iptables puede ser mejor que siga los ejemplos de este artículo en un ordenador con Linux instalado y no en una máquina virtual (VM). Las políticas de la red entre un anfitrión y un invitado podrían hacer que la depuración fuera más difícil, y algunos ejemplos, no funcionarán. Comience con un entorno físico


Las reglas de firewall pueden ser aplicadas y añadidas o editadas de forma manual en un archivo de texto plano original. Yo prefiero usar un archivo de texto para aplicar los cambios. La mayoría de los errores de tiempo de la sintaxis son más fáciles de alcanzar cuando se escriben en un archivo de texto. Otro problema surge con la edición de las reglas por las reglas adjuntas directamente, es decir, estas normas no se guardarán cuando un servidor se reinicia. Antes de editar el archivo, vamos a indicarle a iptables como exportar las reglas actuales para que el archivo se convierte en nuestra plantilla inicial. Ver el listado 4 .


istado 4. Reglas de guardar en un archivo

        
root@desktop:~# iptables-save > /etc/iptables.rules
root@desktop:~# cat /etc/iptables.rules 
# Generated by iptables-save v1.4.4 on Sun Nov 21 14:48:48 2010
*filter
:INPUT ACCEPT [732:83443]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [656:51642]
COMMIT
# Completed on Sun Nov 21 14:48:48 2010

 

He utilizado el comando iptables-save y he redirigido la salida a un archivo de texto en el directorio "/etc".  el archivo para que puedas ver lo que el archivo se ve en mi máquina.

Uno de los primeros requisitos es para permitir las conexiones establecidas para recibir el tráfico. Usted necesita cuando quiere nada detrás del firewall (en una red privada) para poder enviar y recibir datos de la red sin restricciones. En el listado 5 se emitirá un gobierno directo de iptables y verificar el estado del firewall después.


Listado 5. Establecido sesiones de la regla

        
root@desktop:~# iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
root@desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination     
      

 

Para tener una mejor idea de lo que salió, vamos a separar el comando y explicar cada uno de ellos:

-A INPUT : Añadir esta regla a la INPUT de la cadena.

-m conntrack : Comprueba las conexiones para el siguiente curso de paquetes / conexión.

-ctstate ESTABLISHED, RELATED : Establece la conexión que se va a aplicar a la regla de. 

En este caso, una conexión ESTABLISHED (establecida) significa una conexión que ha visto paquetes en ambas direcciones y un tipo RELATED (relacionado) significa que el paquete está comenzando una nueva conexión, pero está asociada con una conexión existente.

 

-j ACCEPT : le dice al firewall para que acepte las conexiones descritas antes. Otra opción válida para el flag -j sería DROP

También estoy conectando a través del protocolo SSH a ese servidor, así que antes de bloquear el servidor de seguridad, una regla en el Listado 6 va a permitir que todas las llamadas entrantes de tráfico SSH. Que especificará el tipo de protocolo de red (TCP) y el puerto que está relacionado con el servicio SSH. Se puede especificar el número de puerto directamente si es necesario.


Listado 6. Aceptar las conexiones entrantes SSH

        
root@desktop:~# iptables -A INPUT -p tcp --dport ssh -j ACCEPT
root@desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination   
      

 

Por último, vamos a configurar el firewall para bloquear todo lo demás. Tenga especial cuidado al emitir el comando siguiente. Si se coloca delante de todas las otras reglas, se bloqueará el tráfico de todas y cada una con el servidor. Iptables lee las reglas en forma de procedimiento (de arriba a abajo) y después de una regla es igual, nada se evaluará.


Listado 7. El bloqueo de todo el tráfico entrante

        
root@desktop:~#  iptables -A INPUT -j DROP
root@desktop:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            ctstate RELATED,ESTABLISHED 
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh 
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination  
      

 

Listado 7 muestra que las reglas están en el orden correcto, pero para poder hacer cambios específicos, vamos a guardar las reglas en un archivo y se concatenan para comprobar el contenido como en el Listado 8 .


Listado 8. Verificación de la configuración del firewall

        
root@desktop:~# iptables-save > /etc/iptables.rules 
root@desktop:~# cat /etc/iptables.rules 
# Generated by iptables-save v1.4.4 on Sun Nov 21 15:10:42 2010
*filter
:INPUT ACCEPT [1234:120406]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1522:124750]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
-A INPUT -j DROP 
COMMIT
# Completed on Sun Nov 21 15:10:42 2010

 

El comando iptables-save guarda nuestros cambios en un archivo de texto plano. Se tiene un aspecto un poco diferente simplemente hacer una lista de las normas en la línea de comandos, pero es exactamente lo mismo. Al igual que antes, tenemos tres secciones: INPUT, FORWARD y OUTPUT. Las normas que se refieren a las conexiones previstas inicialmente OUTPUT, por lo que esta es la sección donde las reglas que hemos añadido se colocan.

En este punto, el servidor se bloquea y la configuración se ha guardado en un archivo. Pero, ¿qué va a pasar cuando se realiza un análisis de la red? Vamos a ejecutar nmap otra vez contra ese servidor y comprobar los resultados como se muestran en el Listado 9 .


Listado 9. Escaneo en red con el servidor bloqueado

        
~ $ nmap 10.0.0.120    

Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-21 20:56 EST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.04 seconds

~ $ nmap -Pn 10.0.0.120

Starting Nmap 5.35DC1 ( http://nmap.org ) at 2010-11-21 20:56 EST
Nmap scan report for 10.0.0.120
Host is up (0.017s latency).
Not shown: 999 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 12.19 seconds
      

 

Tenga en cuenta que el análisis se intentó contra la IP donde se encuentra el servidor, Y esta vez nmap no incluyó otros puertos abiertos. Esto sucede debido a que el firewall está configurado de tal manera que está bloqueando todo, excepto para el puerto SSH que tenemos abierta. Dado que Nmap utiliza un protocolo de red específico para verificar si el sistema está vivo, volvió con las manos vacías. El segundo intento fue un éxito y nos está diciendo que sólo SSH está abierto y nada más. Con sólo tres reglas, nos las arreglamos para conseguir un bloqueo eficaz de nuestro servidor.

Guardado y restablecimiento de las normas

En la sección anterior, guardamos las reglas en un archivo de texto. Sin embargo, eso no es efectivo para decirle al servidor que necesita para cargar las reglas. Además, cuando se reinicia el servidor, se pierde toda la configuración del hecho.

Si va a agregar las normas sobre la línea de comandos, usted debe estar familiarizado con el esos cambios en un archivo de texto. Ver Listado 10 para guardar las reglas del firewall.


Listado 10. Guardar las reglas de firewall

        iptables-save > /etc/iptables.rules

 

Dependiendo del sistema operativo en uso, hay varias maneras de conseguir esas reglas para cargar en el arranque. Un método fácil es ir a la interfaz y decirle que debe cargar las reglas antes de poner la interfaz en línea. Vea el Listado 11 .


Listado 11. De redes públicas las reglas de la interfaz de carga

        
<![CDATA[
auto eth0
iface eth0 inet static
  address 99.99.99.0
  netmask 255.255.255.0
  pre-up iptables-restore < /etc/iptables.rules
]]>

 

Aquí tenemos la interfaz eth0 y se declara una regla para cargar las reglas para el dispositivo de red. Como habrás adivinado, puede usar estos comandos para actualizar manualmente las reglas del firewall desde y hacia el archivo.


Recuperación de desastres

No hace mucho, estuve en una situación donde he sido responsable de un dispositivo de firewall. Aunque estaba haciendo copias de seguridad periódicas que las reglas y configuraciones se hicieron, no me di cuenta de que esas copias estaban en un formato propietario y sólo puede ser leído por el modelo de aparato que tenía. No es un problema, por supuesto, cuando tiene dos dispositivos de la misma marca, modelo y versión de firmware, pero, como es común en pequeñas empresas, el presupuesto no permitió nada de eso.

Un día, ese aparato no decidió correr más y tuve que implementar algo rápido que podría ser tan fiable (o mejor). Aprendí que la manera más difícil que tener configuraciones legibles y la capacidad de volver a ponerlos rápidamente activos son muy importantes.

Con algo de suerte, he encontrado un servidor antiguo en buen estado con un par de interfaces de red y fui capaz de reemplazar el aparato muerto.

Hasta ahora, hemos pasado por los escenarios de la obtención de una copia de las normas que podrían aplicarse fácilmente a cualquier servidor en caso de fallo. Ahora vamos a activar el firewall de ser el principal punto de entrada para una red doméstica o empresarial.


Iptables como principal puerta de entrada

Hasta el momento todo lo que hemos cubierto es grande si usted está ejecutando iptables en un ordenador personal, pero no tiene mucho sentido si una oficina entera tiene que compartir una conexión a Internet. Con unos pocos ajustes de configuración, podemos poner esto en marcha correctamente.

Un servidor de puerta de enlace necesita al menos dos interfaces de red para poder servir como una puerta de entrada adecuada. Una interfaz "hablaría" con la conexión del público frente y la otra a la interna, protegida.

Vamos a suponer que el servidor tiene dos interfaces de red físicas: eth0 (público) y eth1 (privada). Necesito un NAT juntos para que el tráfico fluya sin interrupciones de la red de una interfaz a otra. La subred de la red privada es 192.168.0.0/255.255.0.0, así que vamos a ver cómo una regla NAT con la expedición se podría ver en el Listado 12 .


Listado 12. NAT y las reglas de reenvío

      
iptables -A FORWARD -s 192.168.0.0/255.255.0.0 -i eth0 -o eth1 -m\
conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
      

 

Listado 13 muestra cómo modificar algunos parámetros de proc para permitir el reenvío en el servidor.


Listado 13. Activando el reenvío en el servidor

        
sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
      

 

Tenga en cuenta que los cambios en el proc son volátiles, por lo que los cambios realizados no se han perdido después de un reinicio. Hay varias maneras para asegurarse de que las modificaciones se adhieren después de un reinicio. En Debian / Ubuntu agregue las líneas que se quieran realizar en /etc/rc.d/rc.local.

Por último, como se muestra en el Listado 14 , hay un cambio que modifica los parámetros del kernel en tiempo de ejecución (sysctl). Estas configuraciones son por lo general ya en el sysctl.conf, pero están comentados. Elimine el comentario de ellos (o añadalos si no están incluidas en la distribución).


Listado 14. Sysctl / kernel reenvío

        
net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.forwarding=1
      

 

ARP umbral de caché

Ejecutando un servidor Linux como una pasarela hará que tenga ciertos problemas con el DNS. El núcleo está diseñado para mantener una asignación de direcciones IP, pero viene con un nivel máximo de entradas que no son adecuados para tráfico pesado. Cuando se alcanza este nivel, las consultas DNS no son atendidas. Si bien dicho umbral raramente se alcanza con unos pocos clientes, más de treinta clientes pasando por este firewall causará un problema.

El entorno puede necesitar algún ajuste, pero los valores mostrados en la lista 15 debe proporcionar el sitio antes de ver a estas cuestiones.


Listado 15. El aumento del tamaño de la caché ARP

        
echo 1024 > /proc/sys/net/ipv4/neigh/default/gc_thresh1
echo 2048 > /proc/sys/net/ipv4/neigh/default/gc_thresh2
echo 4096 > /proc/sys/net/ipv4/neigh/default/gc_thresh3
      

 

Esté atento a los mensajes similares a los de venta 16 , que proporcionará un aviso si es necesario aumentar el número acaba de proporcionar.


Listado 16. Sistema de registro de las advertencias del desbordamiento de la caché ARP

        
Nov  22 11:36:16 firewall kernel: [92374.325689] Neighbour table overflow.
Nov  22 11:36:20 firewall kernel: [92379.089870] printk: 37 messages suppressed.
Nov  22 11:36:20 firewall kernel: [92379.089876] Neighbour table overflow.
Nov  22 11:36:26 firewall kernel: [92384.333161] printk: 51 messages suppressed.
Nov  22 11:36:26 firewall kernel: [92384.333166] Neighbour table overflow.
Nov  22 11:36:30 firewall kernel: [92389.084373] printk: 200 messages suppressed.s.
      

 

Conclusión

Hemos pasado a través de algunos pasos sencillos para conseguir iptables para funcionar correctamente y para bloquear de forma segura por un servidor Linux. Las reglas aplicadas deberían proporcionar una buena idea de lo que está sucediendo en un servidor usando iptables como cortafuegos. Os animo a darle una oportunidad a iptables, especialmente si dependen de un aparato y desea tener más control y fácilmente replicar configuraciones legibles.

Mientras que las reglas utilizadas que hemos utilizado aquí son simples, la flexibilidad y complejidad de iptables está fuera del alcance de este artículo. Hay muchas reglas complejas que se pueden combinar para crear un ambiente de firewall seguro y controlable.

Un ejemplo de una característica interesante avanzada en iptables es el equilibrio de carga. La mayor parte del tiempo, la hora de explorar los servicios web de alta disponibilidad, que están buscando soluciones de balanceo de carga. Con iptables, este puede ser definido y configurado con las banderas al azar o enésimo.

También puede hacer a tiempo las reglas de base. En un entorno de oficina pequeña, podría ser útil para restringir ciertos servicios de lunes a viernes, pero dejar que el servidor de seguridad se comportan de manera diferente los sábados y domingos. Las banderas que podrían funcionar en este caso son los siguientes: - timestart, - TimeStop y los días.

Un problema que experimenté fue no tener dos servidores de seguridad, al mismo tiempo con algún tipo de conmutación por error. Creación de una cosa no es tarea fácil, y puede ser abordado de varias maneras. La solución más fácil sería que el router hacer el trabajo y el equilibrio de carga de dos servidores idénticos Firewall. Yo recomiendo buscar en esta opción si el entorno de red es un activo esencial como una oficina o pequeño negocio.

Iptables me salvó una vez, y espero que haga lo mismo para ti!

 

Recursos

Pin It

Escribir un comentario


Código de seguridad
Refescar



Redes:



 

Suscribete / Newsletter

Suscribete a nuestras Newsletter y periódicamente recibirás un resumen de las noticias publicadas.

Donar a LinuxParty

Probablemente te niegues, pero.. ¿Podrías ayudarnos con una donación?


Tutorial de Linux

Filtro por Categorías

Nos obligan a moslestarte con la obviedad de que este sitio utiliza Cookies. Ver política