IPTABLES, una herramienta de cortafuegos que permite no solamente filtrar paquetes, sino también realizar traducción de direcciones de red (NAT) para IPv4 o mantener registros de log. El proyecto Netfilter no sólo ofrece componentes disponibles como módulos del núcleo sino que también ofrece herramientas de espacio de usuario y librerías.
iptables es el nombre de la herramienta de espacio de usuario mediante la cual el administrador puede definir políticas de filtrado del tráfico que circula por la red. El nombre iptables se utiliza frecuentemente de forma errónea para referirse a toda la infraestructura ofrecida por el proyecto Netfilter. Sin embargo, el proyecto ofrece otros subsistemas independientes de iptables tales como el connection tracking system o sistema de seguimiento de conexiones, o que, que permite encolar paquetes para que sean tratados desde espacio de usuario. iptables es un software disponible en prácticamente todas las distribuciones de Linux actuales.
Puede ser local o perimetral.
[code]
# iptables -L
[/code]
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
[code]
#iptables -A añade una nueva regla
#iptables -D borra una regla
[/code]
Cualquier accion minima lleva el comando con una opcion
[code]
iptables -N chain (cadena) ———–> crea nueva cadena
[/code]
Los tipos de cadena son :input, output o forward. Pero se pueden crear nuevas.
rulenum indica que las reglas se van numerando, y podemos usarlo posteriormente en las reglas
name es el nombre de la interfaz
Opciones:
* la opcion -p indica protocolos: TCP, UDP, etc…
una ! (exclamacion) en un comando es para negar
* -s source. mask va de 0-32
* -d destino se especifica igual con una direccion/mascara
Ejercicio:
Bloquear la ip de un ordenador para que no pueda acceder al puerto 80
[code]
# iptables -A INPUT -s 192.168.2.23 -p tcp –dport 80 -j DROP
[/code]
modificador: -A INPUT, Añado regla a la cadena entrante
Especifcacion de la cadena: -s 192.168.2.23 -p tcp –dport 80
Accion: -j DROP
Listamos lo que hay ahora:
[code]
# iptables -nL
[/code]
(-n es para que no muestra los nombres de domino, es decir resolucion de dominos)
[code]
[[email protected] ~]# iptables -L
[/code]
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp — 192.168.2.23 anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[[email protected] ~]#
Muestro las lineas de cada regla
[code]
# iptables -nL –line-numbers
[/code]
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 DROP tcp — 192.168.2.23 0.0.0.0/0 tcp dpt:80
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Ejercicio:
Activar el ftp modo activo, (puerto 20 y 21) para un usuario y denegarlo para el resto.
[code]
# iptables -A INPUT -s 192.168.1.144 -p tcp –dport 21 -j ACCEPT
# iptables -A INPUT -s 192.168.1.144 -p tcp –dport 20 -j ACCEPT
# iptables -A INPUT -s 0.0.0.0 -p tcp –dport 21 -j DROP
# iptables -A INPUT -s 0.0.0.0 -p tcp –dport 20 -j DROP
[/code]
El los firewall en produccion todo se bloquea como politica por defecto. Despues se va habilitando poco a poco reglas de excepcion.
[code]
# iptables -L
[/code]
Chain INPUT (policy ACCEPT) ———————->> Politica por defecto acepta
target prot opt source destination
DROP tcp — 192.168.2.23 anywhere tcp dpt:http
DROP tcp — 192.168.2.217 anywhere tcp dpt:http
DROP tcp — 192.168.2.215 anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Para cambiar las políticas por defecto y bloquearlo todo se ejecuta el siguiente comando:
[code]
# iptables -P INPUT DROP
[/code]
Importantes antes de aplicar una política restrictiva introducir antes la política para poder conectar por ssh con nuestra ip.Ahora ya se ha cambiado.
[code]
# iptables -nL
[/code]
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp — 192.168.1.217 0.0.0.0/0 tcp dpt:22
DROP tcp — 192.168.2.23 0.0.0.0/0 tcp dpt:80
DROP tcp — 192.168.2.217 0.0.0.0/0 tcp dpt:80
DROP tcp — 192.168.2.215 0.0.0.0/0 tcp dpt:80
ACCEPT tcp — 192.168.1.217 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Para cambiar el orden de una politica para subirla y o bajarla es con la opcion -I INPUT NUMERO_POSICION
[code]
# iptables -I INPUT 1 -s 192.168.1.217 -p tcp –dport 22 -j ACCEPT ————–>>> subimos el ssh a la linea 1 ya que el servicio ssh es de los mas importantes
[/code]
Ejerccio:
Bloquear todas las webs salvo una.
[code]
#iptables – A OUTPUT -d 192.168.1.231 -p tcp –dport 80 -j ACCEPT
bloquer todo
#iptables – A OUTPUT -p tcp –dport 80 -j DROP no hace falta poner ip porque directamente lo bloquea todo.
[/code]
Importante siempre que se hace una modificacion en el iptables despues hay que guardar una copia de seguridad de lo que hay, porque los registros del firewall en el iptables se guardan en memoria ram, de manera que sino hay copia de seguridad y se reinicia la maquina se pierde todas las reglas.
Para hacer una copia de seguridad se usa iptables-save
[code]
# iptables-save > /root/iptables-20110126.txt
[/code]
Para restaurar copias de segurridad se usa el comando iptables-restore, es capaz de recoger las reglas que hay en un fichero y restaurarlas.
[code]
# iptables-restore < /root/iptables-20110126.txt
[/code]
Otras Opciones para enrutado
TABLES
There are currently three independent tables (which tables are present at any time depends on the kernel configuration options and which modules are present).
-t, –table table
This option specifies the packet matching table which the command should operate on. If the kernel is configured with automatic module loading, an attempt will be made to load the appropriate module
for that table if it is not already there.
The tables are as follows:
filter:
This is the default table (if no -t option is passed). It contains the built-in chains INPUT (for packets destined to local sockets), FORWARD (for packets being routed through the box), and OUT-
PUT (for locally-generated packets).
nat:
This table is consulted when a packet that creates a new connection is encountered. It consists of three built-ins: PREROUTING (for altering packets as soon as they come in), OUTPUT (for alter-
ing locally-generated packets before routing), and POSTROUTING (for altering packets as they are about to go out).
mangle:
This table is used for specialized packet alteration. Until kernel 2.4.17 it had two built-in chains: PREROUTING (for altering incoming packets before routing) and OUTPUT (for altering locally-
generated packets before routing). Since kernel 2.4.18, three other built-in chains are also supported: INPUT (for packets coming into the box itself), FORWARD (for altering packets being routed
through the box), and POSTROUTING (for altering packets as they are about to go out).
raw:
This table is used mainly for configuring exemptions from connection tracking in combination with the NOTRACK target. It registers at the netfilter hooks with higher priority and is thus called
before ip_conntrack, or any other IP tables. It provides the following built-in chains: PREROUTING (for packets arriving via any network interface) OUTPUT (for packets generated by local pro-
cesses)
[code]
# iptables -t nat -nL
[/code]
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[code]
# iptables -t filter -nL
[/code]
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[code]
# iptables -t mangle -nL
[/code]
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Usando la tabla NAT
Ejercicio. enrutar el trafico desde wi-fi hasta el disco duro multimedia.
Esta directiva es para enrutar lo que viene del disco duro y se envia a la wlan0, ya que ésta tiene otra red
[code]
iptables -t nat -A POSTROUTING -s 192.168.2.10/24 -o 192.168.3.2 -j MASQUERADE ——–> con ips
iptables -t nat -A POSTROUTING -i eth0 -o wlan0 -j MASQUERADE ———>> con interfaces
[/code]
Las dos directivas anteriores son iguales
[code]
# iptables -t nat -A POSTROUTING -s 192.168.2.10/24 -o 192.168.3.2 -j MASQUERADE
# iptables <strong>-t nat</strong> -nL ——->>>> para mostrar reglas nuevas introducidas desde nat
[/code]
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all — 192.168.2.0/24 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Los paquetes tcp tienen flasgs en el en cabezado, iptables es capaz de filtrar los flags activos.
Firewall perimetral
Se suelen crear firewall para proteger redes, se debe crear bridge;br0
Se crea una estructura de árbol para crear reglas con el nombre del servicio o de la maquina.
Para crear nuevas cadenas es con el comando iptables -N rama1
Otras fuentes de ayuda.
http://linux.die.net/man/8/iptables
http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-sg-es-4/ch-fw.html
http://web.mit.edu/rhel-doc/5/RHEL-5-manual/Deployment_Guide-en-US/ch-iptables.html