Manual Básico de IPTABLES basado en Ejemplos
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.
Deja una respuesta