Tutoriales y Manuales
Entradas Mensuales
-
►
2024
(Total:
1024
)
- ► septiembre (Total: 50 )
-
►
2023
(Total:
710
)
- ► septiembre (Total: 65 )
-
▼
2022
(Total:
967
)
- ► septiembre (Total: 72 )
-
▼
julio
(Total:
115
)
- IPtables: el firewall de Linux, funcionamiento y e...
- El estado del ransomware en el sector educativo
- Extensión de Google Chrome capaz de robar y espiar...
- Detectadas nuevas apps maliciosas en Google Play d...
- Elon Musk irá a juicio el próximo 17 de octubre tr...
- Falso sitio de "Have I Been Pwned" para robar cred...
- Proteger correctamente la seguridad de una Red WiFi
- Hackean la calefacción de los asientos de los BMW
- Estados Unidos ofrece 10 millones dólares por info...
- Pasos a seguir si un PC se ha infectado por un ran...
- Funciones avanzadas y trucos VLC Media Player
- Rusia compite con China para endurecer la censura ...
- Filtrado código fuente del malware roba billeteras...
- El proyecto No More Ransom cumple 6 años
- Grupo de ransomware LockBit hackea la Agencia Trib...
- Una mujer se entera que tiene un tumor mortal grac...
- Encuentran un Rootkit chino llamado CosmicStrand e...
- Hackear ordenadores mediante cable SATA
- Vulnerabilidad crítica en tiendas PrestaShop explo...
- Autoservicio de McDonald's en Australia todavía us...
- Vulnerabilidad crítica en el gestor de contenidos ...
- A la venta en foro de internet los datos privados ...
- FBI determinó que Huawei podría interrumpir las co...
- Google despide al ingeniero que dijo que la IA ten...
- Un robot rompe, sin querer, el dedo a un niño de s...
- Mejores gestores de descargas para Windows
- Apple llega a un acuerdo pagando 50 millones dólar...
- Elon Musk vendió en secreto los Bitcoin de Tesla e...
- T-Mobile acuerda pagar 350 millones $ a sus client...
- De Mandrake a Mandriva: un paseo por la historia
- El FBI recupera 500 mil dólares de pagos en cripto...
- Expuestos los datos (e-mail y teléfono) de 5,4 mil...
- Windows 11 bloquea por defecto los ataques de fuer...
- Software espionaje de Candiru utilizó un reciente ...
- Encuentran usuario y contraseña incrustado por def...
- En Estados Unidos hackean surtidores para robar ga...
- Google presenta el Pixel 6a por 459 €
- Nintendo advierte de jugar a la Switch con mucho c...
- Minecraft prohíbe los NFT y la tecnología blockchain
- Amazon demanda a 10.000 administradores de grupos ...
- Calavera de Terminator T-800 con IA gracias a una ...
- Detenidas 25 personas por estafar medio millón de ...
- Supuesta app de Android ‘pro-Ucrania’ para realiza...
- Anatomía del ataque de ransomware Conti al gobiern...
- La ola de calor en Reino Unido es tan fuerte que p...
- Modus operandi del ransomware BlackCat
- La red de mensajería Matrix ya cuenta con más de 6...
- Sistema de verificación de SMS de Google
- Vulnerabilidad en plugin WPBakery para WordPress e...
- Albania sufre un ciberataque que bloquea sus servi...
- Rusia multa a Google con 358 millones dólares por ...
- Elon Musk asegura que sus coches eléctricos Tesla ...
- Kalina: el láser ruso que deja ciegos a los satéli...
- Estafados 8 millones de euros a Ayuntamientos , Ho...
- Diferencia entre discos y unidades: NVMe, SATA, M....
- Navegador Tor 11.5 ahora evita la censura en Inter...
- ¿Qué es el UASP o USB attached SCSI?
- Pasos a seguir para recuperar una cuenta de Netfli...
- Ex ingeniero de la CIA condenado por filtrar secre...
- Nuevo malware de Android en la Google Play instala...
- Tras 7 años, resucita el mayor tracker de Torrents...
- El estado de Teams, una herramienta de espionaje a...
- Microsoft advierte de una campaña masiva de Phishi...
- La presidenta del Banco Central Europeo fue el obj...
- Robo millonario a Axie Infinity comenzó con una fa...
- La cadena de hoteles Marriott es hackeada por sext...
- Arrestado por estafar mil millones dólares en hard...
- China está censurando las noticias del robo de la ...
- Bandai Namco confirma ser víctima de un ataque del...
- Facebook bombardea a los enfermos de cáncer con pu...
- Un juez de menores prohíbe hacer un cursillo de in...
- Detenido en Barcelona un falso representante de Ga...
- BMW y el uso abusivo del software como servicio
- Guardia Civil España detiene la red que vació las ...
- Presentan el teléfono Nothing Phone 1
- Vídeos falsos de tenistas para descargar malware y...
- Windows Autopatch ya está disponible
- Calibre 6.0: la navaja suiza de libros electrónico...
- Hackean coches Honda: pueden abrirlos y arrancarlo...
- App's para Android de la Google Play Store con mal...
- Cables SATA: tipos, diferencias y velocidades
- El ISP francés La Poste Mobile víctima del ransomw...
- Snapchat contrata al jefe de la inteligencia de EEUU
- Italia multa a Xiaomi con 3,2 millones por violar ...
- PyPI comienza a exigir 2FA en sus proyectos críticos
- Microsoft revierte bloqueo por defecto de macros e...
- Sigue estancada la compra de Twitter por parte de ...
- Microsoft Pluton limita por hardware el software q...
- Hackean las cuentas de Twitter y YouTube del Ejérc...
- Nuevo grupo de ransomware: RedAlert ataca servidor...
- IA en China permite leer la mente de miembros del ...
- Penas de hasta 1 año de prisión en Japón para quié...
- Cisco Packet Tracer 8
- Black Basta es un nuevo y peligroso grupo de ranso...
- ¿Una ganga en internet? Cae una red que ha estafad...
- Demandan a TikTok después de que dos niñas más mue...
- Meta demanda a una empresa por robar 350.000 perfi...
- Modo Aislamiento, la respuesta de Apple al espiona...
- El tribunal británico demanda a Apple por 1.800 mi...
- Drones submarinos para llevar 200kg de droga de Ma...
-
►
2021
(Total:
730
)
- ► septiembre (Total: 56 )
-
►
2020
(Total:
212
)
- ► septiembre (Total: 21 )
-
►
2019
(Total:
102
)
- ► septiembre (Total: 14 )
-
►
2017
(Total:
231
)
- ► septiembre (Total: 16 )
-
►
2016
(Total:
266
)
- ► septiembre (Total: 38 )
-
►
2015
(Total:
445
)
- ► septiembre (Total: 47 )
-
►
2014
(Total:
185
)
- ► septiembre (Total: 18 )
-
►
2013
(Total:
100
)
- ► septiembre (Total: 3 )
-
►
2011
(Total:
7
)
- ► septiembre (Total: 1 )
Blogroll
Etiquetas
Entradas populares
-
Después de ver qué es una vCPU y la diferencia entre núcleos (cores) e hilos en los procesadores, pasamos a explicar toda la nomenclatura d...
-
La seguridad en dispositivos móviles es cada vez más crucial, especialmente ante el crecimiento de aplicaciones maliciosas diseñadas para v...
-
Pese a que Gemini ofrece multitudes de opciones, recientemente, se ha dado a conocer una situación fuera de lo común. Hace unos días, un es...
IPtables: el firewall de Linux, funcionamiento y ejemplos reglas
iptables es el firewall que se utiliza en sistemas operativos basados en Linux. Aunque en los últimos años tenemos instalado de forma predeterminada nftables, aún se puede utilizar la sintaxis de iptables para configurar el cortafuegos en nuestro sistema operativo, como Debian, Ubuntu e incluso el firewall del router si está basado en Linux.
Este cortafuegos dispone de varias tablas creadas de forma predeterminada, con el objetivo de facilitar enormemente la posibilidad de añadir diferentes cadenas y reglas. Un detalle muy importante, es que de forma predeterminada tenemos todo en «aceptar», es decir, todo el tráfico se permite, no hay ninguna regla para denegar el tráfico, por lo tanto, en un primer momento este firewall es permisivo, pero podemos cambiar la política predeterminada de forma muy fácil y rápida.
De forma predeterminada tenemos un total de cuatro tablas:
- Tabla filter: es la tabla por defecto, si no definimos una tabla para añadir una regla, siempre se irá a la tabla filter. En esta tabla tenemos un total de tres cadenas por defecto, dependiendo de lo que nos interese, tendremos que usar una cadena u otra: INPUT (son los paquetes en sentido entrante, al propio firewall), OUTPUT (son los paquetes en sentido saliente, desde el servidor hacia fuera), y FORWARD (sirve para filtrar los paquetes que van de una interfaz de red a otra).
- Tabla nat: esta tabla se encarga de hacer el NAT, transformar la IP privada en pública y al revés. Dentro de NAT tenemos tres cadenas: PREROUTING (altera los paquetes antes de enrutarlos, aquí se hace el DNAT o reenvío de puertos), POSTROUTING (altera los paquetes después de enrutarlos, aquí se hace el SNAT o MASQUERADE) y OUTPUT (paquetes generados por el firewall que atravesará el NAT configurado).
- Tabla mangle: esta tabla se encarga de hacer la alteración de los paquetes, es donde se configura el QoS para la calidad del servicio, alterar cabeceras TCP etc. En esta tabla tenemos las cinco cadenas: PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING.
- Tabla raw: esta tabla no se suele usar porque los paquetes viajan sin estado de conexión. Tenemos la cadena PREROUTING y OUTPUT.
Para hacer todo esto, utiliza algunas reglas de filtrado que nos indicarán que paquetes serán aceptados y cuales rechazados o directamente, omitidos. Estas cadenas de datos la forman:
- INPUT: Se refiere a los paquetes que llegan al sistema.
- OUTPUT: Filtra los paquetes que salen de nuestra red.
- FORWARD: No indica el tráfico del router que es enviado a otros equipos.
En la siguiente imagen podéis ver un pequeño resumen de las cadenas que tenemos en las diferentes tablas:
El funcionamiento a la hora de añadir una regla es el siguiente:
- Las reglas que incorporamos a las cadenas siempre tienen un objetivo (-j en la regla).
- Cuando el firewall recibe un paquete, comprueba si el paquete concuerda con una regla que hayamos dado de alta. Si concuerda, se ejecuta la orden objetivo, sino, pasa a la siguiente regla hasta el final de la cadena.
- Las reglas se verifican en un orden secuencial, desde la primera regla hasta la última. Es muy importante el orden, si bloqueamos todo primero y luego permitimos algo más específico, bloquearemos todo el tráfico y la regla más específica no se comprobará.
- En el caso de que ninguna regla satisfaga el paquete, entonces se utilizará la política de la cadena que tengamos (regla global).
Los objetivos que tienen las diferentes reglas son las siguientes:
- ACCEPT: acepta el paquete y lo pasa al siguiente nivel, un servidor web, SSH, FTP etc.
- DROP: bloquea el paquete y no lo pasa al siguiente nivel.
- QUEUE: es un objetivo especial, que pasa al paquete en una cola destinada al procesamiento en espacio de usuario. Esto se puede usar para utilizar otros programas externos.
- RETURN: tiene el mismo efecto que si hubiésemos llegado al final de la cadena. Si la regla estaba en una cadena de las que hay por defecto, entonces se ejecuta la política de la cadena. Para una regla que esté en una cadena definida por el usuario, se sale de ella, y se continúa atravesando la cadena anterior al salto, justo después de la regla con la que se saltó.
Como hemos mencionado y con respecto a las tablas mangle, iptables puede dar uso de la NAT, que contará con sus propia tablas, mediante la que se indica las reglas para realizar el enmascaramiento del paquete, redirigir puertos o cambiar alguna dirección de origen y destino. Nos podemos encontrar:
- PREROUTING: Mediante esta, indicaremos a la máquina que realice determinadas acciones sobre los paquetes antes de que sean enrutados.
- POSTROUTING: Nos permite realizar determinadas acciones antes de que el paquete salga del cortafuegos.
- OUTPUT: Nos da la opción de modificar los paquetes generados en el cortafuegos antes de ser enrutados.
para poder permitir todo el tráfico de red y dejar el firewall con los parámetros por defecto, tenemos que ejecutar las siguientes órdenes:
- sudo iptables -F
- sudo iptables -X
- sudo iptables -t nat -F
- sudo iptables -t nat -X
- sudo iptables -t mangle -F
- sudo iptables -t mangle -X
- sudo iptables -P INPUT ACCEPT
- sudo iptables -P FORWARD ACCEPT
- sudo iptables -P OUTPUT ACCEPT
Visualizar las tablas actuales
Si quieres ver el contenido de las diferentes cadenas y reglas que tenemos en una determinada tabla, a continuación, puedes ver cómo se verían:
- iptables -t filter –list
- iptables -t mangle –list
- iptables -t nat –list
- iptables -t raw –list
Argumentos principales y para qué sirven
- -t, –table table Selecciona la tabla que queramos
- -A, –append chain rule-specification Añadimos una nueva regla en una determinada cadena
- -C, –check chain rule-specification Comprobamos que existe una determinada regla en una determinada cadena
- -D, –delete chain rule-specification Borramos la regla que pongamos en una determinada cadena
- -D, –delete chain rulenum Borramos la regla número X en una determinada cadena
- -I, –insert chain [rulenum] rule-specification Insertamos una nueva cadena con un número en una determinada tabla
- -R, –replace chain rulenum rule-specification Reemplaza una determinada cadena en una tabla, sirve para moverla de número.
- -L, –list [chain] Muestra el listado de reglas de una cadena
- -F, –flush [chain] Elimina todas las reglas de una determinada cadena.
- -Z, –zero [chain [rulenum]] Pone los contadores de una determinada regla a 0.
- -N, –new-chain chain Creamos una nueva cadena en una determinada tabla
- -X, –delete-chain [chain] Borramos una determinada cadena (vacía) en una determinada tabla
- -P, –policy chain target Aplicamos la política por defecto, se cumple cuando ninguna regla de las cadenas se cumplen.
- -E, –rename-chain old-chain new-chain Renombra una cadena añadida anteriormente
- -h, muestra la ayuda
- -v, –verbose Salida que se usa en conjunto con –L, sirve para mostrar más información que lo que proporciona el comando –L.
- -n, –numeric Las direcciones IP y los números de puertos aparecerán con números. Por ejemplo si filtramos el puerto 80, con el –L típico aparecerá www, y no 80.
- -x, –exact Muestra el valor exacto del contador de paquetes y bytes, en lugar de usar K, M o G para los valores.
- –line-numbers Al mostrar el listado de reglas, mostrará el número exacto de la regla. Ideal para usar –D y el número (eliminar) o –I para introducir delante o detrás de dicha regla.
Condiciones principales
- -p, –protocol protocol. Filtra el paquete por protocolo, el protocolo especificado puede ser: tcp, udp, Idplite, icmp, esp, ah, sctp.
- -s, –source address[/mask][,…] Dirección IP de origen del paquete. Podemos tener una IP o una subred (indicando la máscara en formato CIDR). También podemos poner nombres de host (dominios, webs etc), pero es una mala idea porque no es eficiente. Se pueden especificar varias direcciones de origen, (192.168.1.1,192.168.1.2) pero creará diferentes reglas para satisfacerlas.
- -d, –destination address[/mask][,…] Dirección IP de destino del paquete. Se comporta exactamente igual que -s.
- -m, –match match. Especifica si queremos llamar a los módulos extendidos de iptables, para realizar determinadas acciones como:
- Poner múltiples puertos de origen y destino (módulo multiport).
- Controlar conexiones (módulo conntrack).
- Evitar fuerza bruta (módulo recent, ideal para SSH).
- Limitar el número de conexiones (módulo limit y connlimit).
- Rango de direcciones IP (iprange).
- -j, –jump target. Especifica el objetivo de la regla, si queremos aceptar, denegar e incluso reenviar el paquete a otra cadena para su posterior tratamiento. Siempre en cualquier regla vamos a tener un –j para decirle qué queremos hacer. Si no incorporamos un –j se añadirá la regla y contará los paquetes, pero no hará nada. Si utilizamos –j para reenviar a otra cadena, una vez que en la otra cadena haya terminado, volverá a la original.
- -g, –goto chain. Sirve para reenviar el tráfico a otra cadena, pero a diferencia de jump, no volverá a la cadena original por donde entró.
- -i, –in-interface name. Nombre de la interfaz por donde un paquete se recibe. Solo vale para las cadenas de entrada como INPUT, FORWARD y PREROUTING. Si ponemos ! Significa todas menos esa interfaz. Si ponemos un + al final del nombre, cualquier interfaz con el inicio del nombre la cogerá para comprobarla. Imaginemos eth0, eth1 y eth2. Si queremos poner las tres simplemente con poner eth+ es suficiente.
- -o, –out-interface name. Nombre de la interfaz por donde un paquete sale. Solo vale para las cadenas de salida como OUTPUT, FORWARD y POSTROUTING.
Condiciones solamente si usas TCP o UDP
Si utilizas el protocolo TCP o UDP, es posible que quieras filtrar por número de puerto origen y/o destino, a continuación, tenéis los dos argumentos que puedes usar:
- –sport –source-port. Selecciona puertos de origen para permitir o denegar. Si usamos ! excluye.
- –dport –destination-port. Selecciona puertos de destino para permitir o denegar. Si usamos ! excluye.
Existen muchas mas condiciones para una configuración avanzada del firewall, pero las elementales ya las tenemos listadas.
Configurar la política por defecto
Las políticas sirven para que cuando no se encuentra una regla dentro de la cadena, se ejecute la política por defecto. La política por defecto de todas las cadenas es ACCEPT, pero hay dos opciones: ACCEPT o DROP
-P, –policy chain target
Ejemplos:
- iptables -P INPUT DROP
- iptables -P FORWARD DROP
- iptables -P OUTPUT DROP
Con esto nos quedaremos sin internet, por lo que a continuación debemos empezar a crear reglas permisivas.
A continuación, podéis ver todas las políticas que tenemos en las diferentes tablas:
- iptables -t filter -P (INPUT | OUTPUT | FORWARD) (ACCEPT | DROP)
- iptables -P (INPUT | OUTPUT | FORWARD) (ACCEPT | DROP)
- iptables -t mangle -P (INPUT | OUTPUT | FORWARD | PREROUTING | POSTROUTING) (ACCEPT | DROP)
Ver el estado del firewall
El parámetro -L muestra las reglas que tenemos configuradas. V permite recibir más información sobre las conexiones y N nos devuelve las direcciones IP y sus correspondientes puertos sin pasar por un servidor DNS.
iptables -L -n -v
Este es uno de los comandos más importantes para ver el estado del cortafuegos.
Módulos (-m match) de iptables
Multiport
Es una extensión de iptables que nos da la posibilidad de agrupar reglas similares con diferentes puertos TCP y UDP en una sola. Multiport permite poner varios puertos salteados, y también varios puertos seguidos, el máximo es de 15 argumentos de puertos. Ejemplo:
iptables –A INPUT –p tcp –m multiport –dports 80,81,1000:1200 –j ACCEPT
Gracias a este módulo, tenemos la posibilidad de usar varios puertos en la misma regla.
iprange
iprange nos permite poner varias direcciones IP de origen o destino de una vez, sin necesidad de poner decenas de reglas. También permite poner tanto IP de origen como de destino, la sintaxis es la siguiente:
- [!]–src-range ip-ip
- [!]–dst-range ip-ip
El funcionamiento de esta regla es bastante sencilla, simplemente ponemos IP inicio e IP final.
Connlimit
El módulo connlimit se encarga de restringir el número de conexiones simultáneas realizadas por una dirección IP, es ideal para limitar el número de conexiones para evitar DoS.
- –connlimit-upto n . Marcamos si el número de conexiones es igual o menor que N (luego podemos permitir o denegar).
- –connlimit-above n . Marcamos si el número de conexiones es mayor que N (luego podemos permitir o denegar).
- –connlimit-mask prefix_length . Marcamos por rango de subred (es igual que un host haga 2 conexiones, que dos host de la misma subred hagan 1 conexión cada uno).
- –connlimit-saddr . Aplicar la limitación al grupo de origen, es la de por defecto si no se especifica nada.
- –connlimit-daddr . Aplica la limitación al grupo de destino.
Por ejemplo, imaginemos que queremos permitir dos conexiones SSH por cliente únicamente:
iptables -A INPUT -p tcp –dport 22 -m connlimit –connlimit-above 2 -j DROP
No obstante, podemos hacer la regla complementaria, poniendo un accept hasta 2 conexiones.
Conntrack
Este módulo sirve para realizar un tracking de las conexiones, sirve para gestionar la entrada y salida de paquetes antes y después del establecimiento de la conexión. Dentro de este módulo hay varias opciones, pero la más importante es -ctstate que nos permite aceptar o denegar diferentes tipos de paquetes. Dentro de ctstate tenemos varios estados, destacan los siguientes:
- INVALID: El paquete recibido es inválido y no pertenece a ninguna conexión.
- NEW: Conexiones nuevas que se realizan, o que está asociado a una conexión que aún no es bidireccional.
- ESTABLISHED: Conexiones establecidas, pasan primero por NEW ya que han tenido respuesta
- RELATED: Paquete que está relacionado a una conexión existente, pero que no es parte de ella, como FTP pasivo.
Imaginemos que queremos acceder a cualquier sitio, sin embargo, no queremos que absolutamente nadie acceda a nosotros.
iptables –P INPUT DROP
iptables -A INPUT -m conntrack –ctstate ESTABLISHED,RELATED -j ACCEPT
Limit
El módulo limit nos permite limitar, tanto tráfico, como número de logs a escribir en el syslog como intentos de conexión. Tiene dos argumentos principalmente:
- –limit N . Este argumento especifica el número máximo de coincidencias de media por segundo (N/s), minuto (N/m), hora (N/h) o día (N/d) a permitir. N especifica el número
- –limit-burst N . Indica la ráfaga más larga que se puede producir antes de comprobar el límite –limit.
El valor por defecto si no se especifica nada es 3 coincidencias por hora, a ráfagas de 5. Imaginemos la siguiente regla: «iptables -A INPUT -m limit -j LOG», el funcionamiento es el siguiente:
- La primera vez que se alcanza esta regla, se registran los primeros cinco paquetes.
- Después, pasarán veinte minutos antes de que vuelva a registrarse un paquete con esta regla (3 coincidencias entre 60 minutos igual a 20 minutos, ya que es MEDIA).
- Además, cada veinte minutos que pasen sin que un paquete alcance la regla, la ráfaga recuperará un paquete.
- Si no sucede nada durante 100 minutos, la ráfaga quedará completamente recargada; de vuelta entonces a la situación inicial.
Recent
El módulo recent sirve para limitar el número de conexiones por segundo a nivel de IP, esto es ideal para protegernos de ataques al puerto SSH porque un atacante probará múltiples contraseñas. Por ejemplo, si queremos proteger nuestro SSH, podríamos ejecutar la siguiente regla:
- iptables -A INPUT -p tcp –dport 22 -m conntrack –ctstate NEW -m recent –set –name ssh –rsource
- iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –rcheck –seconds 60 –hitcount 4 –name ssh –rsource -j DROP
Esta regla permite solamente hacer cuatro intentos de conexión al cabo de 60 segundos, es una ventana «deslizante».
Cómo guardar reglas de IPTables
Las reglas creadas con el comando iptables se almacenan en la memoria. Si el sistema se inicia antes de guardar el conjunto de reglas iptables, todas las reglas se perderán. Para que las reglas de netfilter persistan a través del re-arranque del sistema, es necesario guardarlas. Para guardar las reglas de netfilter, escribe el siguiente comando como root:
/sbin/service iptables save
Este comando, ejecuta el script init de iptables, el cual ejecuta el programa /sbin/iptables-save y escribe la configuración actual de iptables a /etc/sysconfig/iptables. El archivo existente /etc/sysconfig/iptables se guarda como /etc/sysconfig/iptables.save.
La próxima vez que el sistema arranque , el script de init iptables reaplica las reglas guardas en /etc/sysconfig/iptables mediante el comando /sbin/iptables-restore.
NAT
Este firewall también se encarga de hacer NAT de nuestra conexión. Para hacer el NAT de nuestra IP pública (o interfaz que tenga esta IP pública), debemos poner:
- SNAT Estático: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 –o eth1 -j SNAT –to IP_eth1
- SNAT Dinámico: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
Lo normal es usar MASQUERADE para hacer NAT independientemente de la dirección IP que tenga la interfaz física o lógica.
Para abrir puertos tenemos que añadir una regla en la cadena PREROUTING de la tabla NAT.
- iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 22 -j DNAT –to-destination 192.168.1.1
La tabla PREROUTING también nos permite modificar los puertos al vuelo, de tal forma que si recibimos paquetes en el puerto 2121, lo podemos transformar al 21.
- iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 2121 -j DNAT –to-destination 192.168.1.1:21
Una vez que ya conocemos en detalle este cortafuegos, vamos a ver los ejemplos básicos de utilización y también los más avanzados.
Ejemplos básicos de utilización
Este firewall es muy completo y tenemos cientos de comandos que podemos ejecutar para realizar diferentes acciones. Vamos a poner unos ejemplos fáciles de entender para un primer acercamiento a este cortafuegos.
Bloquear la dirección IP 192.168.1.10 para que no realice ninguna comunicación a nuestro servidor:
iptables -A INPUT –s 192.168.1.10 –j DROP
Bloquear las direcciones IP 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 para que no realicen ninguna comunicación a nuestro servidor:
iptables -A INPUT –s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 –j DROP
Bloquear toda la subred 192.168.2.0/24 para que no realicen ninguna comunicación a nuestro servidor, excepto la dirección IP 192.168.2.20 que sí se permitiría:
iptables –A INPUT –s 192.168.2.20 –j ACCEPT
iptables –A INPUT –s 192.168.2.0/24 –j DROP
Bloquear la dirección IP de 192.168.4.50 para que nosotros no podamos hacer ninguna comunicación:
iptables –A OUTPUT –d 192.168.4.50 –j DROP
Bloquear las direcciones IP 192.168.4.51 y 192.168.4.52 para que nosotros no podamos hacer ninguna comunicación:
iptables –A OUTPUT –d 192.168.4.51,192.168.4.52 –j DROP
Bloquear el acceso a www.google.es desde iptables:
iptables –A OUTPUT –d www.google.es –j DROP
Queremos bloquear el acceso a nuestro servidor de la MAC 00:01:02:03:04:05, y el resto permitir todo:
iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j DROP
Queremos permitir el acceso a nuestro servidor a la dirección MAC MAC 00:01:02:03:04:06, y el resto denegar todo:
iptables -A INPUT -m mac –mac-source 00:01:02:03:04:05 -j ACCEPT
iptables -A INPUT -j DROP
Bloquear la dirección IP 192.168.1.10 para realizar ping desde nuestro nuestro servidor:
iptables -A INPUT -s 192.168.1.10 -p icmp -j DROP
Bloquear las direcciones IP 192.168.1.20, 192.168.1.30, 192.168.1.40, 192.168.1.50 para que no realicen PING a nuestro servidor (en una sola regla):
iptables -A INPUT -s 192.168.1.20,192.168.1.30,192.168.1.40,192.168.1.50 -p icmp -j DROP
Bloquear toda la subred 192.168.2.0/24 para que no realicen PING a nuestro servidor, excepto la dirección IP 192.168.2.20 que sí se permitiría:
iptables -A INPUT -s 192.168.2.20 -p icmp -j ACCEPT
iptables -A INPUT -s 192.168.2.0/24 -p icmp -j DROP
Bloquear la dirección IP de 192.168.4.50 para que nosotros no podamos hacer ping.
iptables -A OUTPUT -d 192.168.4.50 -p icmp -j DROP
Bloquear las direcciones IP 192.168.4.51 y 192.168.4.52 para que nosotros no podamos hacer ping.
iptables -A OUTPUT -d 192.168.4.51,192.168.4.52 -p icmp -j DROP
Bloquear el acceso a www.google.es desde iptables.
iptables -A OUTPUT -d www.google.es -p icmp -j DROP
Tal y como podéis ver, el funcionamiento es bastante sencillo con las reglas basadas en IP con origen y destino. También podríamos usar el módulo iprange para configurar un rango de IPs:
Bloquear un rango de direcciones IP que van desde 192.168.5.1 hasta la dirección 192.168.5.50 para que no puedan hacer ping desde nuestro servidor.
iptables -A OUTPUT -m iprange –dst-range 192.168.5.1-192.168.5.50 -p icmp -j DROP
También podemos filtrar de forma más avanzada el protocolo ICMP. Imaginemos que tenemos un usuario que quiere poder hacer ping a cualquier host, pero sin embargo, no quiere que NADIE le pueda hacer ping a él. ¿Cómo lo podemos hacer con iptables si el propio PING tiene comunicación bidireccional?
iptables -A INPUT -s IP -p icmp –icmp-type echo-request -j DROP
Bloquear cualquier acceso entrante por la interfaz eth0 (únicamente), por lo tanto permitir el acceso eth1.
iptables -A INPUT -i eth0 -j DROP
iptables -A INPUT -i eth1 -j ACCEPT
Bloquear el tráfico saliente por la interfaz eth0 (únicamente), por lo tanto permitir el acceso eth1.
iptables -A OUTPUT -o eth0 -j DROP
iptables -A OUTPUT -o eth1 -j ACCEPT
Permitir cualquier tipo de tráfico entrante y saliente por eth0, y denegar cualquier tráfico entrante o saliente por eth1.
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A OUTPUT -o eth0 -j ACCEPT
iptables -A INPUT -i eth1 -j DROP
iptables -A OUTPUT -o eth1 -j DROP
Si quieres empezar a ver cómo funciona el protocolo TCP y UDP, a continuación tenéis algunos ejemplos:
Bloquear el acceso web a www.google.es y permitir todo lo demás (ping) por ejemplo.
iptables -A OUTPUT -d www.google.es -p tcp –dport 80 -j DROP
Bloquear el acceso FTP a cualquier IP o dominio, y permitir todo lo demás.
iptables -A OUTPUT -p tcp –dport 21 -j DROP
Bloquear el acceso SSH a la IP 192.168.1.50, y permitir todo lo demás.
iptables -A OUTPUT -d 192.168.1.50 -p tcp –dport 22 -j DROP
Bloquear el acceso Telnet a la subred 192.168.2.0, y permitir todo lo demás.
iptables -A OUTPUT -d 192.168.2.0/24 -p tcp –dport 23 -j DROP
Bloquear el acceso de 192.168.1.50 a nuestro servidor web.
iptables -A INPUT -s 192.168.1.50 -p tcp –dport 80 -j DROP
Bloquear el acceso de 192.168.1.150 y 192.168.1.151 a nuestro servidor SSH.
iptables -A INPUT -s 192.168.1.150,192.168.1.151 -p tcp –dport 22 -j DROP
Bloquear el acceso de toda la subred 192.168.2.0/24 a nuestro servicio telnet
iptables -A INPUT -s 192.168.2.0/24 -p tcp –dport 23 -j DROP
Bloquear el acceso de todo el mundo al servidor OpenVPN, excepto la dirección IP 77.77.77.77 que sí se permite.
iptables -A INPUT -s 77.77.77.77 -p tcp –dport 1194 -j ACCEPT
iptables -A INPUT -p tcp –dport 1194 -j DROP
Bloquear el acceso DNS a 8.8.8.8 y permitir todo lo demás (ping) por ejemplo.
iptables -A OUTPUT -d 8.8.8.8 -p tcp –dport 53 -j DROP
iptables -A OUTPUT -d 8.8.8.8 -p udp –dport 53 -j DROP
Bloquear el acceso al puerto 1194 a cualquier IP o dominio, y permitir todo lo demás.
iptables -A INPUT -p udp –dport 1194 -j DROP
Tenemos un servidor DNS en nuestro servidor. Queremos que solo los equipos de la subred 192.168.1.0/24 se puedan comunicar con él, y bloquear todos los demás accesos.
iptables -A INPUT -s 192.168.1.0/24 -p tcp –dport 53 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp –dport 53 -j ACCEPT
iptables -A INPUT -p tcp –dport 53 -j DROP
iptables -A INPUT -p udp –dport 53 -j DROP
Bloquear el acceso a nuestro servidor web, del rango de IP 192.168.100.0/24, que proviene de la interfaz eth0.
iptables -A INPUT -s 192.168.100.0/24 -i eth0 -p tcp –dport 80 -j DROP
Bloquear el acceso a nuestro servidor ssh, del rango de IP 192.168.100.0/24, que proviene de la interfaz eth1.
iptables -A INPUT -s 192.168.100.0/24 -i eth1 -p tcp –dport 22 -j DROP
2 comentarios :
Que buen post Alguna forma de guardar las reglas tras reiniciar? Gracias
>Que buen post Alguna forma de guardar las reglas tras reiniciar? >Gracias
Guardar reglas
CentOS / RHEL / Fedora Linux
# service iptables save
Para el resto de distros utilizar:
# iptables-save > /root/my.active.firewall.rules
# cat /root/my.active.firewall.rules
Para restaurar las reglas
# iptables-restore < /root/my.active.firewall.rules
En CentOS / RHEL / Fedora Linux:
# service iptables restart
Publicar un comentario
Los comentarios pueden ser revisados en cualquier momento por los moderadores.
Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.
Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.