iptables

IPTables es un Firewall configurable por consola, el cual nos permite crear cientos de reglas para hacer nuestros servidores, e incluso nuestra pc, un lugar seguro para almacenar información y aun así tener un acceso directo o relativo hacia internet.

En este post Explicaré basado en un ejemplo como configurar algunas reglas básicas de este excelente y util firewall. y como probar que todo haya quedado funcionando bien.

en este caso Implementaremos un Firewall, que sólo permita acceso a Apache y SSH desde una(s) IP(s) determinadas descartando (DROP) todos los restantes paquetes.

bien.

El firewall se montará en la pc 192.168.1.3  , y solo dará permisos para que las pcs 192.168.1.2 y 192.168.1.1 se conecten a un servidor web, y a SSH.

 

primero les mostraré todo el procedimiento que se hace en la consola, y posteriormente explicaré que fue lo que se hizo.

 

alejo@PC-Alejo-Unix:~$ sudo iptables -v -P INPUT DROP   alejo@PC-Alejo-Unix:~$ sudo iptables -v -A INPUT -s 192.168.1.2 -p tcp –dport 80 -j ACCEPT   

ACCEPT  tcp opt — in * out *  192.168.1.2  -> 0.0.0.0/0  tcp dpt:80

alejo@PC-Alejo-Unix:~$ sudo iptables -v -A INPUT -s 192.168.1.1 -p tcp –dport 80 -j ACCEPT

ACCEPT  tcp opt — in * out *  192.168.1.1  -> 0.0.0.0/0  tcp dpt:80

alejo@PC-Alejo-Unix:~$ sudo iptables -v -A INPUT -s 192.168.1.1 -p tcp –dport 22 -j ACCEPT

ACCEPT  tcp opt — in * out *  192.168.1.1  -> 0.0.0.0/0  tcp dpt:22

alejo@PC-Alejo-Unix:~$ sudo iptables -v -A INPUT -s 192.168.1.2 -p tcp –dport 22 -j ACCEPT

ACCEPT  tcp opt — in * out *  192.168.1.2  -> 0.0.0.0/0  tcp dpt:22

alejo@PC-Alejo-Unix:~$

alejo@PC-Alejo-Unix:~$ sudo iptables -L

Chain INPUT (policy DROP)

target     prot opt source               destination        

ACCEPT     tcp  —  192.168.1.2          anywhere            tcp dpt:www

ACCEPT     tcp  —  192.168.1.1          anywhere            tcp dpt:www

ACCEPT     tcp  —  192.168.1.1          anywhere            tcp dpt:ssh

ACCEPT     tcp  —  192.168.1.2          anywhere            tcp dpt:ssh

 

Chain FORWARD (policy ACCEPT)

target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination        

 

Lo que se hizo comando a comando Fue:

Primer Comando Bloquear Todas las conexiones Entrantes

Segundo Comando Permitir conexiones por parte de 192.168.1.2 hacia apache. los flags de este comando son:

-A: Añadir una Regla, enseguida se pone INPUT para especificar que es una regla de entrada. 

-s: Origen del paquete, puede ser una dirección ip, un hostname o una dirección de red.

-p: especificamos el protocolo capa 3 que se usa el paquete, en este caso el TCP. pero se puede usar también UDP, ICMP o all.

–dport: el puerto donde se recibirá el paquete

-j: que hacer con el paquete. en este caso Aceptarlo(ACCEPT)

Tercer Comando Permitir Conexiones por parte de 192.168.1.1 hacia Apache

Cuarto Comando Permitir conexiones por parte de 192.168.1.1 hacia SSH

Quinto Comando Permitir conexiones por parte de 192.168.1.2hacia SSH

Sexto comando, listar las reglas que se le han dado al firewall.(-L)

 

Hasta acá no hay ningún Problema, ahora vamos a probar que todo funcione como debería,

El pc con la dirección 192.168.1.2 es un pc con Windows XP SP2 Instalado. vamos a intentar las conexiones hacia apache(con Internet Explorer) y hacia ssh (con putty), según los parámetros que acabamos de dar nos debería dejar conectar. de la misma forma estaremos corriendo en la pc con el firewall el iptraf para verificar que no hay más conexiones.

 

 

1 prueba conexión a apache

La conexión es Exitosa.

 

Esta fue la salida del iptraf

┌ TCP Connections (Source Host:Port) ────────── Packets ─── Bytes Flags  Iface ┐   

 

││┌192.168.1.2:1094                            =       8       970 RESET  eth0  │

 

│└192.168.1.3:80                              =       8      1617 CLOSED eth0  │

 

│┌192.168.1.2:1095                            =       6       602 RESET  eth0  │

 

│└192.168.1.3:80                              =       4       349 CLOSED eth0  │

 

│                                                                              │

 

└TCP: 2 entries ──────────────────────────────────────────────── Active ─┘

 

 

como podemos ver la conexión fue exitosa, y en la pc 192.168.1.3 no hay más conexiones además de la que llego hacia apache.

Segunda Prueba Conexión hacia SSH utilizando putty.

la salida del iptraf

 

 IPTraf   

 

┌ TCP Connections (Source Host:Port) ────────── Packets ─── Bytes Flags  Iface ┐

 

│┌192.168.1.2:1093                            =       6       288 S—   eth0  │

 

│└65.54.195.188:80                            =       0         0 —-   eth0  │

 

│┌192.168.1.2:1096                            =      29      2986 –A-   eth0  │

 

│└192.168.1.3:22                              =      41      6654 -PA-   eth0  │

 

│┌192.168.1.2:1095                            =       6       602 RESET  eth0  │

 

│└192.168.1.3:80                              =       4       349 CLOSED eth0  │

 

│                                                                              │

 

└ TCP:      3 entries ──────────────────────────────────────────────── Active ─┘

 

 

como vemos la conexión a ssh también ha sido exitosa. el iptraf también muestra las conexiones bloqueadas, como vemos acá

 

│ UDP (80 bytes) from 192.168.1.1:53 to 192.168.1.3:33303 on eth0              │   

 

│ UDP (67 bytes) from 192.168.1.3:33302 to 192.168.1.1:53 on eth0              │

 

│ UDP (83 bytes) from 192.168.1.1:53 to 192.168.1.3:33302 on eth0              │

 

│ UDP (61 bytes) from 192.168.1.3:33304 to 192.168.1.1:53 on eth0              │

 

│ UDP (77 bytes) from 192.168.1.1:53 to 192.168.1.3:33304 on eth0  

 

Todos estos son paquetes que han sido ignorados por que no están en las reglas. Así vemos que solo se aceptan conexiones a los puertos 80 y 22.

 

La tercera prueba es verificar si un pc con una dirección ip diferente de 192.168.1.1 y 192.168.1.2 es bloqueado. Para ello usaremos una pc que está corriendo backtrack 2 y haremos un mapeo con nmap. esta pc tiene la dirección IP 192.168.1.8

Antes de hacer el escaneo en nmap hacemos ping y pruebas de conexión a los protocolos de apache y ssh.

el resultado del ping fue el siguiente

ping 192.168.1.3   

PING 192.168.1.3 (192.168.1.3) 56(84) bytes of data.

 

— 192.168.1.3 ping statistics —

37 packets transmitted, 0 received, 100% packet loss, time 36166ms

 

también se intentó conectar al apache por medio del navegador web, y el resultado es un error de timeout. es decir, nunca recibió respuesta.

el ssh también se queda esperando una respuesta de conexión. no hay salida alguna.

después de las pruebas de conexión se hace un mapeo con nmap intentando una detección de OS.

 

    

bt ~ # nmap -T Aggressive -sV -O -v 192.168.1.3

starting Nmap 4.20 ( http://insecure.org ) at 2007-12-13 22:55 GMT

Initiating ARP Ping Scan at 22:55

Scanning 192.168.1.3 [1 port]

Completed ARP Ping Scan at 22:55, 0.01s elapsed (1 total hosts)

Initiating Parallel DNS resolution of 1 host. at 22:55

Completed Parallel DNS resolution of 1 host. at 22:55, 4.01s elapsed

Initiating SYN Stealth Scan at 22:55

Scanning mail.google.com (192.168.1.3) [1697 ports]

Completed SYN Stealth Scan at 22:56, 37.42s elapsed (1697 total ports)

Initiating Service scan at 22:56

Warning:  OS detection for 192.168.1.3 will be MUCH less reliable because we did not find at least 1 open and 1 closed TCP port

Initiating OS detection (try #1) against mail.google.com (192.168.1.3)

Host mail.google.com (192.168.1.3) appears to be up … good.

All 1697 scanned ports on mail.google.com (192.168.1.3) are filtered

MAC Address: 00:19:21:44:80:81 (Elitegroup Computer System Co.)

Too many fingerprints match this host to give specific OS details

Network Distance: 1 hop

 

se puede ver que la operación se hace imposible por que todas las conexiones son rechazadas

 

Bueno esto es todo.

es solo un pequeño manual para darse una idea de las posibilidades que nos da este firewall y de lo útil que puede ser en un entorno comercial. en el que la seguridad y protección de los datos sea indispensable. IPTables permite configuraciones tan sencillas como estas y otras mas complejas como DMZ postrouting redirección etc.

si quieren profundizar un poco más. acá les dejo un pdf, donde se explica muy bien que es y los flags básicos. aclaro que este pdf no es de mi autoría.

Manual Básico de IPTables