Santiago Hernรกndez@santiagohramos
ยฟ๐๐ฎ๐ฬ ๐๐ฌ ๐๐๐๐๐๐๐๐? ๐๐ฎ๐ขฬ๐ ๐๐ ๐ฎ๐ฌ๐จ ๐ฒ ๐๐จ๐ฆ๐๐ง๐๐จ๐ฌ ๐๐ฌ๐๐ง๐๐ข๐๐ฅ๐๐ฌ
IPTABLES es una herramienta esencial para tener el control total del trรกfico de red en un sistema Linux.
Esta poderosa herramienta permite configurar polรญticas de filtrado de trรกfico de red en el kernel, estableciendo reglas para aceptar, rechazar o redirigir paquetes en la red.
Usualmente se utiliza para la configuraciรณn de reglas de firewall, gestiรณn de trรกfico de red, y la aplicaciรณn de polรญticas de seguridad en servidores.
A continuaciรณn, se presentan los conceptos clave y los comandos esenciales de IPTABLES.
ยฟ๐๐จฬ๐ฆ๐จ ๐๐ฎ๐ง๐๐ข๐จ๐ง๐ ๐๐๐๐๐๐๐๐?
IPTABLES funciona basรกndose en un conjunto de reglas que se aplican a los paquetes de red que entran y salen del sistema.
Cada regla define condiciones especรญficas, como la direcciรณn IP de origen, el puerto de destino o el protocolo, y luego establece una acciรณn a tomar cuando un paquete cumple con esas condiciones.
Estas reglas se organizan dentro de ๐๐๐๐๐๐, cada una con un propรณsito particular. Las tablas mรกs comunes incluyen
- ๐๐๐๐๐๐: es la tabla predeterminada para el filtrado de paquetes
- ๐๐๐: para la traducciรณn de direcciones de red y redirecciรณn de puertos
- ๐๐๐๐๐๐: para la modificaciรณn de encabezados de los paquetes
- ๐๐๐: usada principalmente para excepciones en el seguimiento de conexiones.
Dentro de cada tabla, las reglas se agrupan en ๐๐๐
๐๐๐๐, que especifican cuรกndo deben evaluarse las reglas segรบn el trayecto del paquete (entrada, salida o reenvรญo).
Las reglas se evalรบan en el orden en que fueron aรฑadidas, y una vez que un paquete coincide con una regla, se toma la acciรณn definida, por lo que el orden de las reglas y la elecciรณn de la tabla correcta son cruciales para el comportamiento adecuado de la red.
๐. ๐๐จ๐ฆ๐ฉ๐ซ๐จ๐๐๐๐ข๐จฬ๐ง ๐๐ ๐๐๐ ๐ฅ๐๐ฌ ๐๐๐ญ๐ฎ๐๐ฅ๐๐ฌ
Para visualizar las reglas actualmente configuradas en iptables, podemos usar los siguientes comandos:
๐๐๐๐๐๐๐๐ -๐ณ: Lista todas las reglas en las cadenas de la tabla filter por defecto.
Esta opciรณn proporciona una visiรณn general bรกsica de las reglas aplicadas. Puedes listar todas las reglas de otra tabla con ๐๐๐๐๐๐๐๐ -๐ณ <๐๐๐๐๐>.
๐๐๐๐๐๐๐๐ -๐ณ -๐ -๐: Lista las reglas con mรกs detalle (-v para mostrar mรกs informaciรณn) y con direcciones IP en formato numรฉrico (-n), lo cual es รบtil para evitar la resoluciรณn DNS, agilizando la consulta.
๐๐๐๐๐๐๐๐ -๐บ: Muestra las reglas de manera que puedan ser reutilizadas en scripts, รบtil si necesitas exportar o replicar la configuraciรณn.
๐. ๐๐ฅ๐ข๐ฆ๐ข๐ง๐๐ซ ๐๐๐ ๐ฅ๐๐ฌ
Para limpiar o eliminar reglas en iptables, podemos usar los comandos siguientes:
๐๐๐๐๐๐๐๐ -๐ญ: Limpia todas las reglas en las cadenas de la tabla filter.
๐๐๐๐๐๐๐๐ -๐ญ <๐๐๐
๐๐๐>: Limpia solo las reglas de una cadena especรญfica, como INPUT o FORWARD.
๐. ๐๐๐๐ข๐ง๐ข๐ซ ๐๐จ๐ฅ๐ขฬ๐ญ๐ข๐๐๐ฌ ๐ฉ๐จ๐ซ ๐๐๐๐๐๐ญ๐จ
Establecer las polรญticas por defecto en iptables define cรณmo se comportarรก el sistema si no hay reglas especรญficas que coincidan con el trรกfico entrante o saliente:
๐๐๐๐๐๐๐๐ -๐ท ๐ฐ๐ต๐ท๐ผ๐ป ๐จ๐ช๐ช๐ฌ๐ท๐ป: Define la polรญtica predeterminada para la cadena INPUT como aceptar todo el trรกfico entrante.
๐๐๐๐๐๐๐๐ -๐ท ๐ญ๐ถ๐น๐พ๐จ๐น๐ซ ๐จ๐ช๐ช๐ฌ๐ท๐ป: Define la polรญtica por defecto para la cadena FORWARD, que controla el trรกfico que pasa por el sistema (utilizado en el enrutamiento).
๐๐๐๐๐๐๐๐ -๐ท ๐ถ๐ผ๐ป๐ท๐ผ๐ป ๐จ๐ช๐ช๐ฌ๐ท๐ป: Establece que todo el trรกfico saliente serรก permitido.
Las opciones -P establecen la polรญtica predeterminada (policies) para cada cadena.
๐. ๐๐ซ๐๐๐๐ข๐จฬ๐ง ๐ฒ ๐๐ซ๐๐๐๐ฃ๐จ ๐๐จ๐ง ๐๐๐๐๐ง๐๐ฌ
Podemos crear cadenas personalizadas en iptables para agrupar reglas segรบn nuestras necesidades:
๐๐๐๐๐๐๐๐ -๐ต <๐๐๐๐๐๐_๐๐๐
๐๐๐>: Crea una nueva cadena de reglas personalizada.
๐๐๐๐๐๐๐๐ -๐ฟ <๐๐๐๐๐๐_๐๐๐
๐๐๐>: Elimina una cadena personalizada previamente creada (siempre y cuando no estรฉ en uso por ninguna regla).
๐๐๐๐๐๐๐๐ -๐จ ๐ฐ๐ต๐ท๐ผ๐ป -๐ <๐๐๐๐๐๐_๐๐๐
๐๐๐>: Reenvรญa el trรกfico de red a una cadena definida por el usuario desde la cadena INPUT.
๐. ๐๐๐ซ๐ฆ๐ข๐ญ๐ข๐ซ ๐จ ๐๐๐ง๐๐ ๐๐ซ ๐๐ซ๐ฬ๐๐ข๐๐จ ๐๐จ๐ง ๐๐จ๐ง๐๐ข๐๐ข๐จ๐ง๐๐ฌ
Podemos usar iptables para permitir o denegar trรกfico basado en varias condiciones:
- Permitir trรกfico de una IP especรญfica a un puerto especรญfico:
๐๐๐๐๐๐๐๐ -๐จ ๐ฐ๐ต๐ท๐ผ๐ป -๐ ๐๐๐ -๐ <๐ฐ๐ท> --๐
๐๐๐๐ <๐๐๐๐๐๐> -๐ ๐จ๐ช๐ช๐ฌ๐ท๐ป
Este comando permite el trรกfico TCP entrante (-p tcp) desde una IP especรญfica (-s ) a un puerto determinado (--dport ), y la acciรณn -j ACCEPT especifica que el trรกfico debe ser aceptado.
- Denegar trรกfico de una IP especรญfica a un puerto especรญfico:
๐๐๐๐๐๐๐๐ -๐จ ๐ฐ๐ต๐ท๐ผ๐ป -๐ ๐๐๐ -๐ <๐ฐ๐ท> --๐
๐๐๐๐ <๐๐๐๐๐๐> -๐ ๐ซ๐น๐ถ๐ท
Similar al comando anterior, pero la acciรณn -j DROP indica que el trรกfico debe ser descartado.
๐. ๐๐ฅ๐ข๐ฆ๐ข๐ง๐๐ซ ๐๐๐ ๐ฅ๐๐ฌ ๐๐ฌ๐ฉ๐๐๐ขฬ๐๐ข๐๐๐ฌ
Si necesitamos eliminar reglas especรญficas, podemos hacerlo de la siguiente manera:
Eliminar una regla usando su nรบmero:
๐๐๐๐๐๐๐๐ -๐ซ ๐ฐ๐ต๐ท๐ผ๐ป <๐๐ฬ๐๐๐๐_๐
๐_๐๐๐๐๐>
Aquรญ, indica la posiciรณn de la regla en la cadena. Se puede ver el nรบmero de regla utilizando el comando iptables -L --line-numbers.
๐. ๐๐ฎ๐๐ซ๐๐๐๐จ, ๐๐๐ฌ๐ญ๐๐ฎ๐ซ๐๐๐ข๐จฬ๐ง ๐ฒ ๐๐จ๐ ๐๐ ๐๐๐ ๐ฅ๐๐ฌ
Es esencial poder guardar y restaurar las reglas de iptables para evitar que se pierdan tras un reinicio del sistema:
- Guardar reglas:
๐๐๐๐๐๐๐๐-๐๐๐๐ > /๐๐๐๐/๐๐๐๐๐๐๐
Guarda todas las reglas actuales en un archivo que puede restaurarse posteriormente.
- Restaurar reglas:
๐๐๐๐๐๐๐๐-๐๐๐๐๐๐๐ < /๐๐๐๐/๐๐๐๐๐๐๐
Restaura las reglas desde el archivo guardado.
- Registrar paquetes descartados:
๐๐๐๐๐๐๐๐ -๐จ ๐ฐ๐ต๐ท๐ผ๐ป -๐ ๐๐๐ --๐
๐๐๐๐ <๐๐๐๐๐๐> -๐ ๐ณ๐ถ๐ฎ --๐๐๐-๐๐๐๐๐๐ "๐ฐ๐ท๐ป๐๐๐๐๐-๐ซ๐๐๐๐๐๐
: " --๐๐๐-๐๐๐๐๐ 4
Este comando registra los paquetes descartados para poder analizarlos mรกs tarde en los archivos de log del sistema.
๐. ๐๐๐๐ข๐ซ๐๐๐๐ข๐จ๐ง๐๐ฆ๐ข๐๐ง๐ญ๐จ ๐๐ ๐๐๐ ๐ฒ ๐๐๐๐ง๐ฏ๐ขฬ๐จ ๐๐ ๐๐ฎ๐๐ซ๐ญ๐จ๐ฌ
- Habilitar NAT en una interfaz:
๐๐๐๐๐๐๐๐ -๐ ๐๐๐ -๐จ ๐ท๐ถ๐บ๐ป๐น๐ถ๐ผ๐ป๐ฐ๐ต๐ฎ -๐ <๐๐๐๐๐๐๐๐> -๐ ๐ด๐จ๐บ๐ธ๐ผ๐ฌ๐น๐จ๐ซ๐ฌ
Este comando habilita la traducciรณn de direcciones en una interfaz de red especรญfica.
- Reenviar trรกfico de un puerto a otro:
๐๐๐๐๐๐๐๐ -๐ ๐๐๐ -๐จ ๐ท๐น๐ฌ๐น๐ถ๐ผ๐ป๐ฐ๐ต๐ฎ -๐ ๐๐๐ --๐
๐๐๐๐ <๐๐๐๐๐๐_๐๐๐๐๐๐> -๐ ๐ซ๐ต๐จ๐ป --๐๐-๐
๐๐๐๐๐๐๐๐๐๐ <๐ฐ๐ท_๐
๐๐๐๐๐๐>:<๐๐๐๐๐๐_๐
๐๐๐๐๐๐>
Aquรญ, redirigimos el trรกfico entrante desde el puerto_fuente hacia otro puerto y direcciรณn IP, lo que es รบtil en configuraciones de servidores con mรบltiples servicios.
๐๐ฃ๐๐ฆ๐ฉ๐ฅ๐จ ๐๐ซ๐ฬ๐๐ญ๐ข๐๐จ ๐๐จ๐ฆ๐ฉ๐ฅ๐๐ญ๐จ
Supongamos que queremos permitir el acceso SSH (puerto 22) solo desde una IP especรญfica (por ejemplo, 192.168.1.100), denegar todo el acceso a dicho puerto para otras IPs, y registrar cualquier intento de acceso fallido.
1. Permitir acceso SSH desde la IP 192.168.1.100:
๐๐๐๐๐๐๐๐ -๐จ ๐ฐ๐ต๐ท๐ผ๐ป -๐ ๐๐๐ -๐ 192.168.1.100 --๐
๐๐๐๐ 22 -๐ ๐จ๐ช๐ช๐ฌ๐ท๐ป
2. Denegar el acceso SSH desde otras IPs:
๐๐๐๐๐๐๐๐ -๐จ ๐ฐ๐ต๐ท๐ผ๐ป -๐ ๐๐๐ --๐
๐๐๐๐ 22 -๐ ๐ซ๐น๐ถ๐ท
3. Registrar los intentos de acceso fallidos:
๐๐๐๐๐๐๐๐ -๐จ ๐ฐ๐ต๐ท๐ผ๐ป -๐ ๐๐๐ --๐
๐๐๐๐ 22 -๐ ๐ณ๐ถ๐ฎ --๐๐๐-๐๐๐๐๐๐ "๐บ๐บ๐ฏ-๐ซ๐๐๐๐๐
: " --๐๐๐-๐๐๐๐๐ 4
Con esta configuraciรณn, estamos protegiendo el servidor SSH permitiendo solo el acceso desde una IP de confianza, bloqueando otras conexiones y registrando cualquier intento no autorizado.
En resumen, iptables es una herramienta robusta para gestionar la seguridad de la red en sistemas Linux.
Su flexibilidad y capacidad para crear reglas personalizadas nos permiten adaptarnos a las necesidades de cada escenario en una red.