LinuxParty
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
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.
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.
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.
|
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!
- Netfilter Project: All the resources for iptables can be found in the project page.
- iptables in Ubuntu: A great introduction to iptables in Ubuntu including some advanced configurations.
- iptables in CentOS
- Introduction to iptables: developerWorks article that describes the inner workings of iptables.
- Dynamic iptables Firewalls
- Nmap: a great network scanning tool.
- developerWorks Open source zone: Find extensive how-to information, tools, and project updates to help you develop with open source technologies and use them with IBM products.
- Events of interest: Check out upcoming conferences, trade shows, and webcasts that are of interest to IBM open source developers.
- developerWorks podcasts: Tune into interesting interviews and discussions for software developers
- developerWorks demos: Watch our no-cost demos and learn about IBM and open source technologies and product functions.
- developerWorks on Twitter: Follow us for the latest news.
-
Seguridad
- Snort para Windows, detección de Intrusos y seguridad.
- Detección de Intrusiones con las herramientas: BASE y Snort.
- El Sistema de Detección de Intrusos: Snort. ( Windows y Linux )
- Configuración con Ejemplos de Snort para Windows, detección de intrusiones
- ¿El gobierno de EE. UU. ignoró la oportunidad de hacer que TikTok fuera más seguro?
- ¿Qué es SSH y cómo se utiliza? Los conceptos básicos de Secure Shell que necesitas saber
- Asegurar memcached del servidor, para evitar amplificar ataques DDoS
- Consejos de Seguridad para Pagos Móviles en España: Protege tus Transacciones con Estos Consejos Prácticos
- 22 herramientas de seguridad de servidores Linux de código abierto en 2023
- 8 hábitos que deben tomar los teletrabajadores altamente seguros
- 7 cosas que incluso los nuevos usuarios de Linux pueden hacer para proteger mejor el sistema operativo
- Recuperar contraseñas de archivos comprimidos en 3 pasos
- Administración: Glances - herramienta de monitoreo y supervisión para Linux
- Cómo monitorear sistemas Linux remotos con Glances
- Los 5 mejores VPN del momento