Taller en español de cómo crear un primer firewall.
Se ve de forma muy básica TCP/IP
Usa prácticas para cada concepto
Termina con un firewall sencillo.
PRIMARIA 1. RESUELVE PROBLEMAS DE FORMA MOVIMIENTO Y LOCALIZACIÓN 2 (2).pptx
Taller: Mi primer Firewall
1. Mi PrimerMi Primer FirewallFirewall
Creando unCreando un FirewallFirewall en Linuxen Linux
Conceptos y prácticas para crear nuestro primerConceptos y prácticas para crear nuestro primer FirewallFirewall
Gabriel Orozco Ruiz VelazcoGabriel Orozco Ruiz Velazco
Grupo Linux de OccidenteGrupo Linux de Occidente
Grupo Linux de ColimaGrupo Linux de Colima
Abril 2014Abril 2014
2. Temario
Temario
Teoría 1 Qué son los Firewalls. Tipos. Usos.
Práctica 1 Generando el ambiente del curso.
Receso
Teoría 2 TCP/IP Mínimo. Protocolos. Herramientas.
Práctica 2 Accediendo a los equipos
Teoría 3 Netfilter: El firewall de Linux
Práctica 3 Primer Firewall
Teoría 4 Reglas para diferentes requerimientos
Práctica 4 Mi Primer Firewall en Linux
3. 04/01/14 3
Qué son los Firewalls
Es un filtro y manipulador de las conexiones que
llegan a la computadora o pasan a través de ella.
Nacen de la necesidad de proteger el equipo de
atacantes externos, al permitir conexiones
solamente desde las direcciones que permitamos,
hacia los puertos y protocolos que permitamos.
Tipos: de proxy y de paquetes.
4. 04/01/14 4
Tipos de Firewall: por función
Perimetral
Conecta una red
interna a una red
externa, que no es
confiable
Frontera
Bloquea conexiones no
deseadas hacia el
servidor.
5. 04/01/14 5
Tipos de Firewall: por tecnología
De Red o packet filters
Filtra y manipula
conexiones a nivel IP
Puerto, dirección ip,
protocolo.
De Aplicación o proxies
Aceptan los paquetes que
van a la aplicación y
bloquean el resto.
Entienden los protocolos
6. 04/01/14 6
Importancia
Si tengo un conjunto de aplicaciones que pueden ser
vulnerables, corriendo en un servidor, y no quiero tener
que hacer configuración detallada de cada una, puedo
poner un Firewall
El Firewall intercepta las conexiones antes de que le
lleguen a cualquier aplicación. (Va primero)
Así cualquier aplicación insegura que tenga, puedo
bloquear el acceso desde fuera, manteniendo la
seguridad.
Sin embargo, si permito el acceso, debo asegurar que la
aplicación que exponga, esté bien configurada y
actualizada.
7. 04/01/14 7
Usos
Limita los puertos expuestos de mi equipo
Reescribe direcciones IP y puertos de forma que una sola
máquina conectada a internet, con una sola dirección IP,
pueda compartir esa conexión al resto de equipos en una
red local.
También reescribe los datos de conexiones entrantes y
los puede reenviar a un equipo interno. Esto es, podemos
compartir servidores internos, hacia internet o la red
externa que necesitemos.
Puede hacer un registro de conexiones y de ancho de
banda por IP
9. 04/01/14 9
Configuraciones
Para nuestras pruebas, necesitamos al menos dos tarjetas de red.
Tomen un número secuencial cada uno de los participantes con equipo.
Ese será “XX”
Asegurense de tener acceso como administrador
Instalen el paquete vlan
sudo apt-get install vlan
Instalar el paquete vlan y crear la subred:
sudo modprobe 8021q
sudo vconfig add eth0 10
sudo vconfig add eth0 20
sudo ip addr add 10.0.0.XX/24 dev eth0.10
Dé ping a la ip de algún compañero para asegurarse que funciona.
ping 10.0.0.1
10. 04/01/14 10
Configuraciones
Deben tener al menos:
Una interfaz (Device) conectada a la red local (la VLAN
10)
Una interfaz (Device) conectada a Internet (la que ya
tenían, sea eth0 o wlan)
Acceso como root (El Firewall es una aplicación
privilegiada, y solo root la puede manipular)
Tener comunicación entre los equipos.
11. 04/01/14 11
TCP/IP Direcciones
IPv4 son 4 números de 8 bits, que van desde la ip 0.0.0.0
hasta la 255.255.255.255
No todas las direcciones se usan. Por ejemplo las que
terminan en cero se usan para definir una red (como en
192.168.1.0/24) y las que terminan en 255 se usan para
broadcast o anuncios generales (como en 192.168.1.255)
Hay direcciones apartadas para usos especiales. Por
ejemplo:
127.0.0.1 (se refiere siempre al equipo local)
Red 10.0.0.0/8 para organizaciones grandes
Red 172.16-32.0.0/16 para organizaciones medianas
Red 192.168.0.0/16 para organizaciones pequeñas
12. 04/01/14 12
TCP/IP Protocolos
TCP: se usa para conexiones confiables entre dos
equipos. Los mensajes se envían en paquetes con
número de secuencia. El emisor pide confirmación de
cada paquete, y si falta uno, reenvía el paquete en
cuestión. Es el más usado en internet.
UDP: se usa para conexiones donde la aplicación tiene el
control. Si se pierde un paquete y la aplicación no lo
necesita, éste nunca es reenviado. Ejemplo: voz, video..
no queremos que de pronto llegue una parte de una
palabra que se perdió.. se haría algo imposible de
entender.
ICMP: ping... y otros usos más avanzados.
13. 04/01/14 13
TCP/IP Puertos y Servicios
En Linux, hay puertos desde el 1 hasta el 65,535,
ya sea en TCP o UDP
Puertos abajo del 1025, solo se pueden conectar
aplicaciones que arranquen como root. Son donde
escuchan las aplicaciones estándar.
El servicio HTTP (WEB) por ejemplo, usa TCP/80
El servicio SMTP (CORREO) usa el TCP/25
Los servicios están descritos en el archivo
/etc/services
14. 04/01/14 14
TCP/IP Servicios
Correo se compone de
smtp (TCP/25)
pop3 (TCP/110)
imap (TCP/143)
smtp-auth (TCP/587)
pop3s (TCP/995)
imaps (TCP/993)
WEB se compone de
http (TCP/80)
https (TCP/443)
MySQL
mysql (TCP/3306)
Terminal Services
RDP (TCP/3389)
15. 04/01/14 15
Herramientas
Para saber si un equipo está conectado y
accesible, usamos:
ping <dirección.del.equipo>
Para saber si hay un programa escuchando en un
puerto determinado, usamos (entre otros) para tcp:
telnet <dirección.del.equipo> <puerto>
Para saber si hay un equipo en una dirección pero
está oculto, usamos:
nmap -A -P0 <dirección.del.equipo>
Recomiendo aprender a usar “netcat”
16. 04/01/14 16
Respuestas esperadas en TCP/IP
Si hay un programa escuchando en un puerto,
cuando nos conectamos a el, debe establecerse la
conexión.
Si no hay ningún programa escuchando, debemos
obtener un mensaje de “Connection refused”
Si hay un firewall que tira los paquetes,
deberíamos obtener un mensaje de “Timeout”.
Esto también es cierto si el equipo no está
conectado o presente, así que hay que aplicar
criterio: si responde a ping u otro puerto, entonces
obtener un timeout es que el puerto está filtrado.
18. 04/01/14 18
Accediendo a los equipos
Haga ping a los equipos de sus compañeros en su
dirección de red “interna”.
Escanee la red para ver cuantos equipos están accesibles
con
nmap -sP 10.0.0.0/24
debería poder ver a todos los demás equipos.
Escanee una maquina para ver qué puertos tiene
prendidos con
nmap -A -P0 <direccion.de.la.maquina>
Intente conectarse al puerto usando telnet.
(para salir de telnet use Control-5, y luego escriba quit)
20. 04/01/14 20
Linux es un ruteador
Linux tiene la capacidad de reenviar paquetes entre redes.
Esto es muy útil ya que puede cumplir todas las funciones
de un ruteador, y compartir el internet por ejemplo.
Solo basta con poner un “1” en el siguiente archivo para
habilitar los servicios de ruteo:
/proc/sys/net/ipv4/ip_forward
Para probar que funciona, el Linux debe ser el gateway de
dos redes diferentes. Se puede hacer un ping a un equipo
de la otra red, y el Linux reenviará el paquete de ping, y
también la respuesta del equipo “pingueado” de regreso al
equipo que preguntó.
23. 04/01/14 23
Organizando la red
Formen equipos de tres máquinas
Equipo 11, use la red 10.11.1.0/24 entre la
maquina 1 y 2, y use la red 10.11.2.0/24
entre la maquina 2 y la 3. la máquina 3 se
supone conectada a internet.
Asegúrense de hacer esto como root
Recuerden que todos tienen la vlans 10 y
20.
usen esa como local
PC 1
ifconfig eth0.10 10.11.1.1 1
netmask 255.255.255.0netmask 255.255.255.0
route add -net default gw route add -net default gw
10.10.11.1.2.1.2
PC 2
ifconfig eth0.10 10.11.1.2
netmask 255.255.255.0netmask 255.255.255.0
ifconfig eth0.20 10.ifconfig eth0.20 10.11.2.1 .2.1
netmask 255.255.255.0netmask 255.255.255.0
route add -net default gw route add -net default gw
10.10.11.2.2.2.2
PC 3PC 3
ifconfig eth0.20 10.11.2.2
netmask 255.255.255.0netmask 255.255.255.0
route add -net 10.1.1.0/24 gw route add -net 10.1.1.0/24 gw
10.10.11.2.1.2.1
Den ping a las diferentes direcciones. QuéDen ping a las diferentes direcciones. Qué
pasa?pasa?
Ahora activen el forward y den ping:Ahora activen el forward y den ping:
echo 1 > echo 1 >
/proc/sys/net/ipv4/ip_forward/proc/sys/net/ipv4/ip_forward
25. 04/01/14 25
Netfilter
Netfilter es el Firewall de Linux. Está integrado en el
kernel, lo que lo hace extremadamente rápido y eficiente.
La herramienta que lo controla, se llama iptables
Se diseñó como un conjunto de reglas que se aplican a
cada paquete de datos tcp/ip conforme llega al equipo o
es reenviado a otro equipo.
Conforme añado reglas a netfilter, estas siempre se
evalúan de primera a última añadida, y si no hay una regla
para el paquete de datos, se aplica la decisión “Default”.
El paquete va pasando por varias “tablas” donde lo puedo
manipular si quiero.
28. 04/01/14 28
Tabla FILTER
Todos los paquetes pasan por esta tabla.
Es la tabla “default” o sea que si no nombramos cual tabla
queremos usar, por defecto es “filter”
Solamente sirve para filtrar las ip o puertos que no
queremos que se accedan.
Tiene las cadenas INPUT, FORWARD, OUTPUT
INPUT Cuando el paquete va dirigido a una de las direcciones IP
del equipo actual, el paquete llega a esta cadena antes de
ser entregado a la aplicación que esté escuchando en el
puerto.
FORWARD Cuando el paquete no va dirigido a este equipo, llega a esta
cadena
OUTPUT Siempre que el paquete se origina en este equipo, pasa por
esta cadena antes de irse.
29. 04/01/14 29
Políticas por default
Todas las tablas tienen cadenas. En la tabla filter
las cadenas son “INPUT”, “FORWARD”,”OUTPUT”
Para escribir menos, es válido poner una política
por default. Esa puede ser “ACCEPT” o “DROP” o
“DENY”
Cuando no he manipulado nada, todo está por
defecto en el default “ACCEPT” (no hay Firewall)
30. 04/01/14 30
Sintaxis básica
Iptables
[ -t tabla ]
< -{A | D | I } CADENA > (Add, Delete, Insert)
[ -p PROTOCOLO {tcp | udp | otro } { --sport | --dport } puerto ]
[ -i TARJETA DE ENTRADA ]
[ -o TARJETA DE SALIDA ]
[ -s DIRECCION o RED IP de ENTRADA ]
[ -d DIRECCION o RED IP de SALIDA ]
< -j <ACCEPT | DROP } >
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0.10 -p tcp --dport 80 -j
ACCEPT
31. 04/01/14 31
Aplicando políticas por defecto
La forma de prender el primer Firewall de un equipo se
demasiado sencilla.
Solamente ponemos la política de INPUT en DROP
iptables -P INPUT DROP
Para que no reenvíe nada? FORWARD:
iptables -P FORWARD DROP
Para que no salga nada? OUTPUT.
iptables -P OUTPUT ACCEPT
33. 04/01/14 33
Cree un Firewall para su PC
Tomando en cuenta el ejemplo de la diapositiva
anterior, cree un Firewall para su equipo.
Debe bloquear todo intento de acceder a su
equipo.
Cual regla (una sola línea) necesita poner?
34. 04/01/14 34
Abra agujeros en su Firewall
Respecto del Firewall que acaba de crear, ahora
necesitamos que permita acceso a SSH (TCP/22)
Cual regla es la que debe añadir (una sola línea)
para permitir SSH desde cualquier ip hacia su
propio equipo, en el protocolo tcp, puerto destino
22?
35. 04/01/14 35
Reenvío de paquetes
Permita el reenvío de paquetes que vayan al
puerto destino TCP/80 y al puerto destino TCP/22
Ahora, permita el reenvío de todos los paquetes
que entren por la interfaz (device) eth0.10
Puede listar las reglas con el comando
iptables -L -vn
37. 04/01/14 37
Las demás Tablas
TABLA CADENAS PROPOSITO
CONNTRACK INPUT
FORWARD
Al activarse, comienza a llevar un registro de
todas las conexiones iniciadas, y sus respuestas.
Cacha cuando una respuesta nunca fue solicitada,
y deniega esa respuesta automáticamente.
MANGLE PREROUTING
FORWARD
POSTROUTING
Usada cuando se quiere aplicar calidad de
servicio. Requiere experiencia y no la veremos
aquí.
NAT PREROUTING
FORWARD
POSTROUTING
La más usada. Permite reescribir puertos y
direcciones tanto en la entrada (PREROUTING)
como a la salida (POSTROUTING). Se usa para
compartir una sola dirección IP (INTERNET!!!)
38. 04/01/14 38
Tabla Conntrack
Para llevar registro de paquetes hacia nuestro
equipo:
iptables -A INPUT -m state --state
ESTABLISHED,RELATED -j ACCEPT
Para llevar registro de paquetes reenviados a otros
equipos:
iptables -A FORWARD -m state --state
ESTABLISHED,RELATED -j ACCEPT
39. 04/01/14 39
Tabla NAT
Para compartir una ip:
iptables -t nat -A POSTROUTING -o <INET> -j
MASQUERADE
INET puede ser eth0 o eth0.20, etc. Es la interfaz por
donde saldrán los paquetes a internet.
Básicamente lo que dice es “enmascara los paquetes
diciendo que es MI IP la que está pidiendo todo”
Al llegar la respuesta, reescribe la dirección destino y
reenvía el paquete a la máquina que realmente lo pidió.
Ni la maquina que pide ni la que responde se enteran.
40. 04/01/14 40
Limpiar las reglas del Firewall
Para limpiar las reglas que hayamos puesto, solo
basta con hacerles “flush”:
iptables -F
iptables -F -t nat
No olvide poner las políticas en ACCEPT o ya no
podrá acceder a su equipo desde fuera.
iptables -P INPUT ACCEPT
42. 04/01/14 42
Firewall
# politicas por default
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Permito acceso a mi puerto de SSH:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Enmascaro la red interna
iptables -t nat -A POSTROUTING -o eth0 -j
MASQUERADE
# Listar las reglas activas:
iptables -L -vn -t nat
iptables -L -vn
43. 04/01/14 43
ConclusionesConclusiones
●
Este es el primer FirewallEste es el primer Firewall
●
Es sencillo, y funciona.Es sencillo, y funciona.
●
Lo importante es entender las reglasLo importante es entender las reglas
●
HayHay scriptsscripts que hacen todo fácil, pero si noque hacen todo fácil, pero si no
entiendes lo que hacen, no podrás hacerentiendes lo que hacen, no podrás hacer
realmente nada.realmente nada.