Publicado el 24 de Mayo del 2018
523 visualizaciones desde el 24 de Mayo del 2018
909,4 KB
38 paginas
Creado hace 15a (31/08/2008)
- 1 -
Iptables por SoulLost
¿Qué es Iptables?
Sirve para filtrar paquetes tcp/ip mediante reglas estrictamente establecidas (es pocas palabras es un
cortafuegos o firewall).
¿Para qué me demonios me sirve un firewall? Para controlar el tráfico de información o paquetes que
pasan por nuestro ordenador e Internet (incluyendo redes locales).
Bien, ¿cómo obtengo un firewall en Linux? Fácil, solo debes cargar los "módulos" necesarios que te
permitirán realizar cierta actividad con los paquetes que especifiques (Para información sobre los
módulos consultar google.com o la ayuda del kernel), en conjunto con el kernel y el programa "Iptables"
( http://www.iptables.org/ http://www.linuximq.net/ http://l7-filter.sf.net/ ).
Para descargar iptables se puede usar nuestro gestor de paquetes, algunos de los que conozco:
Debian: apt-get install iptables
Gentoo: emerge iptables
Claro también puede optar por compilar el programa a mano o usar paquetes precompilados de ciertas
distros.
¡Demonios!, pero ¿cómo levanto esos mentados módulos? Básicamente estos módulos están ya
disponibles en la mayoría de las distribuciones GNU/Linux que existen en la actualidad..
Para darlos de alta utilizamos la herramienta modprobe, primero antes que nada hay que mirar que
módulos tenemos disponibles con modprobe -l | grep netfilter :
UnderHouse linux # modprobe -l | grep netfilter
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/ip_conntrack.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/iptable_nat.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/iptable_mangle.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/iptable_filter.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/ipt_state.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/ipt_limit.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/ipt_REDIRECT.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/ipt_MASQUERADE.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/ipt_LOG.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/ip_tables.ko
/lib/modules/2.6.14-gentoo-r5/kernel/net/ipv4/netfilter/ip_nat.ko
Se preguntaran qué módulos necesito. Para esto les recomiendo levantar los módulos principales para
el funcionamiento:
modprobe ip_tables iptable_filter iptable_nat
Conforme estemos asignando nuestras reglas de iptables puede que pida algún modulo y mande algún
error, solo quedaría montar dicho módulo que nos pida.
¿Y si no tengo los módulos? Buena pregunta, pues habrá que modificar el kernel (tema que no nos
corresponde en este momento). Solo como nota hay que entrar a la carpeta del kernel, modificar el
kernel y hacer los cambios correspondientes en nuestro gestor de arranque si es necesario, sería algo
como esto:
cd /usr/src/linux
make menuconfig
##Dejar la siguiente configuración (es la que recomiendo):
- 2 -
2
Networking --->
Networking options --->
[*] TCP/IP networking
[*] IP: multicasting
[*] IP: advanced router
[*] Network packet filtering (replaces ipchains) --->
IP: Netfilter Configuration --->
<M> Connection tracking (required for masq/NAT)
<M> IP tables support (required for filtering/masq/NAT)
<M> limit match support
<M> Connection state match support
<M> Packet filtering
<M> LOG target support
<M> Full NAT
<M> MASQUERADE target support
<M> REDIRECT target support
<M> Packet mangling
-------------------------------------------------------------------------------
############################################
make && make modules_install && make install
Conceptos básicos
En primera necesitamos saber las políticas que iptables usa por defecto:
UnderHouse soullost # 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
Por así definirlas, tenemos tres secciones: INPUT (entrada), OUTPUT (salida) y FORWARD
(Redireccionamiento). Estas por defecto están puestas para aceptar todo el trafico (ACCEPT), ¡bien!,
pues aquí necesitamos saber bien que es lo que queremos:
- Denegar todo y aceptar solo lo que necesitamos
- Aceptar todo y denegar solo lo que se necesita
En este punto ustedes tendrán que idear una estrategia de filtrado, en mi caso les recomiendo denegar
la entrada y el redireccionamiento (INPUT Y FORWARD) y aceptar todo lo que yo mande al exterior
(OUTPUT). Para esto, hacemos lo siguiente:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
Quedando:
- 3 -
3
Nomenclatura de Iptables
UnderHouse soullost # iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
iptables -A Agrega una regla
iptables -D Elimina una regla
iptables -P Politica por defecto
iptables -R Reemplazar una ragla
iptables -L Lista las reglas actuales
iptables -F Elimina todas las reglas
En las reglas podemos hacer uso de ciertos parámetros que son los siguientes:
•
•
•
•
•
•
•
•
-p Potocolo (tcp,icmp,udp,etc)
-s Ip fuente
-d Ip destino
-o Interfaz de salida (ethx, lo, etc)
-i Interfaz de entrada (ethx, lo, etc)
--sport Puerto o rango de puertos fuente
--dport Puerto o rango de puertos destino
-j Acción a tomar ( ACCEPT o DROP, Aceptar o Denegar)
Denegar todo y aceptar solo lo que necesitamos
Quiero creer que esta es la mejor manera de entender las reglas de iptables y por obvió la opción mas
segura para nuestro equipo de computo.
Les muestro mi ip de la tarjeta Ethernet:
soullost@UnderHouse ~ $ su -c "ifconfig eth0"
Password:
eth0 Link encap:Ethernet HWaddr 00:0B:6A:8E:94:D8
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:137 errors:0 dropped:0 overruns:0 frame:0
TX packets:137 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:92963 (90.7 Kb) TX bytes:15155 (14.7 Kb)
Interrupt:11 Base address:0x6f00
Asignamos políticas por defecto
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
¿Haciendo ping?
(vale, es como si la tarjeta de red estuviera desconectada).
- 4 -
4
UnderHouse soullost # ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
ping: sendmsg: Operation not permitted
--- 192.168.1.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2012ms
Aceptando ping al exterior
UnderHouse soullost # iptables -A OUTPUT -s 192.168.1.2 -d 192.168.1.1 -p icmp -j ACCEPT
¿Qué demonios dice lo de arriba? Aceptamos paquetes de salida de la ip 192.168.1.2 (nuestra ip) hacia
la ip 192.168.1.1 del protocolo icmp..
¡¡Excelente!! ¿Hacemos el ping?
UnderHouse soullost # ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1000ms
¿Pero qué sucede? Nada, el problema esta en que aceptamos paquetes para enviar pero recuerden
que tenemos cualquier paquete de entrada denegado. En este caso el ping usa el protocolo icmp el cual
envía un paquete para saber si el host esta conectado a la red (echo-request), el host destino una ves
recibido el paquete de pregunta, reenvía otro paquete con el cual contestara a nuestra solicitud
(conocido como echo-reply)…
Agregamos la regla faltante
UnderHouse soullost # iptables -A INPUT -s 192.168.1.1 -d 192.168.1.2 -p icmp -j ACCEPT
Hacemos ping
UnderHouse soullost # ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
64 bytes from 192.168.1.1: icmp_seq=1 ttl=30 time=0.286 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=30 time=0.328 ms
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1006ms
rtt min/avg/max/mdev = 0.286/0.307/0.328/0.021 ms
Miramos nuestras primeras dos reglas para que se familiaricen con estos reportes
- 5 -
5
UnderHouse soullost # iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- 192.168.1.1 192.168.1.2
Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT icmp -- 192.168.1.2 192.168.1.1
Permitir ping desde el exterior
¿Haciendo telnet?
UnderHouse soullost # telnet 192.168.1.1
Trying 192.168.1.1...
Malo malo, manos a la obra:
UnderHouse soullost # iptables -A OUTPUT -s 192.168.1.2 -d 192.168.1.1 -p tcp --sport 1024:65535 --
dport 23 -j ACCEPT
Aceptamos paquetes de salida de cualquier puerto privilegiado (1024:65535 son puertos que por default
están asignados a ciertos programas o servicios, paquetes enviados fuera de este rango puede ser
inseguros) de mi ip hacia el puerto telnet (23) de la ip 192.168.1.1.
UnderHouse soullost # iptables -A INPUT -s 192.168.1.1 -d 192.168.1.2 -p tcp --sport 23 --dport
1024:65535 -j ACCEPT
Aceptamos paquetes de entrada del puerto 23 de la ip 192.168.1.1 hacia nuestra ip en cualquiera de los
puertos privilegiados.
UnderHouse soullost # telnet 192.168.1.1 Trying 192.168.1.1...
Connected to 192.168.1.1.
Escape character is '^]'.
SpeedStream Telnet Server
login: as
password:
password: Connection closed by foreign host.
Ejercicio: Permitir que entre desde telnet del exterior
¿Obteniendo Internet?
Vamos estoy atrás de un router el cual me comparte Internet a la red local, por ende necesito tener
comunicación con él...
Comentarios de: H-Zine #1 (0)
No hay comentarios