Introducción.
Acerca de Iptables y Netfilter.
Netfilter es un conjunto de
ganchos (
Hooks, es
decir,
técnicas de programación que se emplean para crear cadenas de
procedimientos como manejador) dentro del núcleo de GNU/Linux y que son
utilizados para interceptar y manipular paquetes de red. El componente
mejor conocido es el cortafuegos, el cual realiza procesos de
filtración de paquetes. Los
ganchos son también utilizados por un
componente que se encarga del
NAT (acrónimo de
Network
Address
Translation o Traducción de dirección de
red). Estos componentes son cargados como módulos del núcleo.
Iptables es el nombre de la herramienta de
espacio de usuario (
User Space,
es decir, área de memoria donde todas las aplicaciones, en modo de
usuario, pueden ser intercambiadas hacia memoria virtual cuando sea
necesario) a través de la cual los administradores crean reglas para
cada filtrado de paquetes y módulos de
NAT.
Iptables es la herramienta estándar de todas las distribuciones modernas de GNU/Linux.
URL:
http://www.netfilter.org/
Equipamiento lógico necesario.
Instalación a través de yum.
Si utiliza
CentOS 5 y
6,
Red Hat Enterprise Linux 5 o
6, solo se necesita realizar lo siguiente para instalar o actualizar el equipamiento lógico necesario:
Procedimientos.
Cadenas.
Las cadenas pueden ser para tráfico entrante (INPUT), tráfico saliente
(OUTPUT) o tráfico reenviado (
FORWARD).
Reglas de destino.
Las reglas de destino pueden ser aceptar conexiones (
ACCEPT), descartar conexiones (
DROP), rechazar conexiones (
REJECT), encaminamiento posterior (
POSTROUTING), encaminamiento previo (
PREROUTING),
SNAT,
NAT, entre otras.
Políticas por defecto.
Establecen cual es la acción a tomar por defecto ante cualquier tipo de
conexión. La opción -P cambia una política para una cadena. En el
siguiente ejemplo se descartan (
DROP) todas las conexiones que ingresen
(INPUT), todas las conexiones que se reenvíen (
FORWARD) y todas las
conexiones que salgan (OUTPUT), es decir, se descarta todo el tráfico
que entre desde una red pública y el que trate de salir desde la red
local.
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
|
Limpieza de reglas específicas.
A fin de poder crear nuevas reglas, se deben borrar las existentes,
para el tráfico entrante, tráfico reenviado y tráfico saliente así como
el NAT.
iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -F -t nat
|
Reglas específicas.
Las opciones más comunes son:
- -A añade una cadena, la opción -i define una interfaz de
tráfico
entrante
- -o define una interfaz para trafico saliente
- -j establece una regla de destino del tráfico,
que puede ser
ACCEPT, DROP o REJECT. La
- -m define que se aplica la regla si hay una coincidencia
específica
- --state define una lista separada por comas de distinto
tipos de
estados de las conexiones (INVALID, ESTABLISHED, NEW, RELATED).
- --to-source define que IP reportar al tráfico externo
- -s define trafico de origen
- -d define tráfico de destino
- --source-port define el puerto desde el que se origina la
conexión
- --destination-port define el puerto hacia el que
se dirige la conexión
- -t tabla a utilizar, pueden ser nat, filter, mangle o raw.
Ejemplos de reglas.
Reenvío de paquetes desde una interfaz de red local (eth1)
hacia una interfaz de red pública (eth0):
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
|
Aceptar reenviar los paquetes que son parte de conexiones
existentes (ESTABLISHED) o relacionadas de tráfico entrante desde la
interfaz eth1 para tráfico saliente por la interfaz eth0:
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
|
Permitir paquetes en el propio muro cortafuegos para
tráfico saliente a través de la interfaz eth0 que son parte de
conexiones existentes o relacionadas:
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
|
Permitir (
ACCEPT) todo el tráfico entrante (INPUT) desde
(
-s) cualquier dirección (0/0) la red local (eth1) y desde el
retorno del sistema (lo) hacia (
-d) cualquier destino (0/0):
iptables -A INPUT -i eth1 -s 0/0 -d 0/0 -j ACCEPT
iptables -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT
|
Hacer (-j) SNAT para el tráfico saliente (
-o) a tráves de
la interfaz eth0 proveniente desde (
-s) la red local (
192.168.0.0/24)
utilizando (--to-source) la dirección IP
w.x.y.z.
iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -o eth0 -j SNAT --to-source x.y.z.c
|
Descartar (
DROP) todo el tráfico entrante (
-i) desde la
interfaz eth0 que trate de utilizar la dirección IP pública del
servidor (
w.x.y.z), alguna dirección IP de la red local
(
192.168.0.0/24) o la dirección IP del retorno del sistema (127.0.01)
iptables -A INPUT -i eth0 -s w.x.y.x/32 -j DROP
iptables -A INPUT -i eth0 -s 192.168.0.0/24 -j DROP
iptables -A INPUT -i eth0 -s 127.0.0.0/8 -j DROP
|
Aceptar (
ACCEPT) todos los paquetes SYN (--syn) del
protocolo TCP (-p tcp) para los puertos (
--destination-port) de los
protocolos SMTP (25), HTTP(80), HTTPS (443) y SSH (22):
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 25 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 80 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 443 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 22 --syn -j ACCEPT
|
Aceptar (
ACCEPT) todos los paquetes SYN (--syn) del
protocolo TCP (-tcp) para los puertos (
--destination-port) del
protocolos SMTP (25) en el servidor (
w.x.y.z/32), desde (
-s) cualquier
lugar (0/0) hacia (
-d) cualquier lugar (0/0).
iptables -A INPUT -p tcp -s 0/0 -d w.x.y.z/32 --destination-port 25 --syn -j ACCEPT
|
Aceptar (
ACCEPT) todos los paquetes SYN (--syn) del protocolo TCP (-p tcp) para los puertos (
--destination-port) de los protocolos POP3 (110), POP3S (995), IMAP (143) y IMAPS (993):
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 110 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 995 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 143 --syn -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 993 --syn -j ACCEPT
|
Aceptar (
ACCEPT) el tráfico entrante (
-i) proveniente desde la
interfaz eth1 cuando las conexiones se establezcan desde el
puerto (--sport) 67 por protocolos (
-p) TCP y UDP.
iptables -A INPUT -i eth1 -p tcp --sport 68 --dport 67 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --sport 68 --dport 67 -j ACCEPT
|
Aceptar (
ACCEPT) conexiones de tráfico entrante (INPUT) por
protocolo (
-p) UDP cuando se establezcan desde (
-s) el servidor DNS 200.33.145.217 desde el puerto (
--source-port) 53 hacia (
-d) cualquier destino (0/0):
iptables -A INPUT -p udp -s 200.33.146.217/32 --source-port 53 -d 0/0 -j ACCEPT
|
Cerrar accesos.
Descartar (
DROP) el tráfico entrante (INPUT) para el protocolo (
-p) TCP hacia los puerto (
--destination-port) de SSH (22) y Telnet (23):
iptables -A INPUT -p tcp --destination-port 22 -j DROP
iptables -A INPUT -p tcp --destination-port 23 -j DROP
|
Descartar (
DROP) todo tipo de conexiones de tráfico entrante (INPUT) desde (
-s) la dirección IP a.b.c.d:
iptables -A INPUT -s a.b.c.d -j DROP
|
Rechazar (
REJECT) conexiones hacia (OUTPUT) la dirección IP a.b.c.d desde la red local:
iptables -A OUTPUT -d a.b.c.d -s 192.168.0.0/24 -j REJECT
|
Eliminar reglas.
En general se utiliza la misma regla, pero en lugar de utilizar -A (append), se utiliza -D (delete).
Eliminar la regla que descarta (
DROP) todo tipo de conexiones de tráfico entrante (INPUT) desde (
-s) la dirección IP a.b.c.d:
iptables -D INPUT -s a.b.c.d -j DROP
|
Mostrar la lista de cadenas y reglas.
Una vez cargadas todas las cadenas y reglas de
iptables es posible visualizar éstas utilizando el mandato
iptables con las opciones
-n, para ver las listas en formato numérico y -
L, para solicitar la lista de éstas cadenas.
Cuando no hay reglas ni cadenas cargadas, la salida
debe devolver lo siguiente:
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
|
Cuando hay cadenas presentes, la salida, suponiendo que se utilizarón
los ejemplos de este documento, debe devolver algo similar a lo
siguiente:
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 192.168.1.64 0.0.0.0/0
DROP all -- 172.16.0.0/24 0.0.0.0/0
DROP all -- 127.0.0.0/8 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 192.168.1.64 tcp dpt:25 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:995 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:143 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:993 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:68 dpt:67
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:68 dpt:67
ACCEPT udp -- 200.33.146.217 0.0.0.0/0 udp spt:53
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
[root@m064 ~]# iptables -nL
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
DROP all -- 192.168.1.64 0.0.0.0/0
DROP all -- 172.16.0.0/24 0.0.0.0/0
DROP all -- 127.0.0.0/8 0.0.0.0/0
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 192.168.1.64 tcp dpt:25 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:110 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:995 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:143 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:993 flags:0x17/0x02
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:68 dpt:67
ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:68 dpt:67
ACCEPT udp -- 200.33.146.217 0.0.0.0/0 udp spt:53
Chain FORWARD (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
|
Iniciar, detener y reiniciar el servicio iptables.
Si está de acuerdo con las reglas generadas de
iptables, utilice el siguiente mandato para guardar éstas:
Las reglas quedarán almacenadas en el archivo
/etc/sysconfig/iptables.
Para ejecutar por primera vez el servicio
iptables, utilice:
Para hacer que los cambios hechos tras modificar la configuración surtan efecto, utilice:
Para detener el servicio
iptables y borrar todas las reglas utilice:
Agregar el servicio iptables al arranque del sistema.
Para hacer que el servicio de
iptables esté activo con el siguiente inicio del sistema, en todos los niveles de ejecución (2, 3, 4 y 5), se utiliza lo siguiente:
chkconfig iptables on
FUente: http://www.alcancelibre.org/staticpages/index.php/introduccion-iptables
No hay comentarios:
Publicar un comentario