Temario Unidad 3
Temario Unidad 3
Temario Unidad 3
Enrique Brotons
8. Cortafuegos (Firewall).
8.1. Introducción
En la unidad anterior hemos visto como implementar un servidor proxy con el que
podamos controlar los accesos a Internet. Ahora veremos como con un firewall también
conocido como muro de fuego, o cortafuegos, controlaremos las redes conectadas
permitiendo o denegando las comunicaciones entre dichas redes. También un firewall es
considerado un filtro que controla el trafico de varios protocolos como TCP/UDP/ICMP que
pasan por él para permitir o denegar algún servicio, el firewall examina la petición y
dependiendo de este, la puede bloquear o permitirle el acceso. Un firewall puede ser un
dispositivo de tipo Hardware como por ejemplo un router, o software que se instala entre
la conexión a Internet y las redes conectadas en el lugar.
Firewall en Linux.
En Linux existe gran variedad de herramientas que nos permite controlar nuestro
firewall desde un servidor que este conectado a Internet y a la red local. La más potente y
difundida que suele venir por defecto en las distribuciones Linux es iptables (antes
llamada ipchains). Aunque también existen otras herramientas como Shorewall que es
una herramienta muy flexible, rápida y sencilla que permite crear reglas iptables usando
archivos, o ufw que es un herramienta que nos permite crear reglas iptables de una forma
muy simple dentro de distribuciones debian, ubuntu y derivados.
Más información de Shorewall y Ufw:
http://www.shorewall.net/
http://doc.ubuntu-es.org/UFW
1
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
Mas információn:
http://es.wikipedia.org/wiki/Zona_desmilitarizada_%28inform%C3%A1tica%29
8.2.1. Tablas.
Cuando nosotros enviamos un paquete o una solicitud de servicio este pasa por
tres tipos de tablas que debemos conocer.
Tabla NAT.
Esta tabla que debe ser usada cuando se desea hacer los paquetes sean
enrutados a una máquina cliente dentro de una red local o DMZ, pero también podremos
enmascarar un red local y tener salida hacia Internet. Dentro de esta tabla tenemos las
siguientes opciones:
2
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
Table MANGLE.
Esta tabla se usa principalmente para modificar paquetes. Dentro de esta tabla
tenemos las siguientes opciones:
•TOS: Es usado para definir o cambiar el tipo de servicio de un paquete que puede
ser usado para configurar políticas en la red considerando a ser enrutados los
paquetes, no debemos usarlo para paquetes que vayan hacia Internet.
•TTL: Es usado para cambiar el campo tiempo de vida de un paquete y con ello
conseguir un TTL especifico.
•MARK: Se usa para marca los paquetes con valores específicos, con estas
marcas podremos limitar el ancho de banda y generar colas.
Tabla FILTER.
Esta esta la tabla principal para el filtrado de paquetes donde vemos el tipo de
paquete que podemos comparar y filtrar dentro del firewall. Dentro de esta tabla tenemos
las siguientes tipos de paquetes:
•INPUT:
Paquetes de entrada hacia nuestro firewall.
•FORWARD: Paquetes enrutados por medio del firewall a otra máquina.
•OUTPUT: Paquetes de salida de nuestro firewall.
3
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
8.2.2. Estados.
Los estados en realidad son los seguimientos de conexiones dentro del firewall.
Para esto tenemos las siguiente opciones:
•ESTABLISHED: El paquete seleccionado se asocia con otros paquetes en una
conexión establecida.
•INVALID: El paquete seleccionado no puede ser asociado hacia ninguna conexión
conocida.
•NEW: El paquete seleccionado esta creando una nueva conexión o bien forma
parte de una conexión de dos caminos.
•RELATED: El paquete seleccionado esta iniciando una nueva conexión en algún
punto de la conexión existente.
Podemos tomar decisiones a partir del estado del paquete por medio del modulo state
con el parametro “-m state”, se refiere a la posibilidad de mantener información sobre el
estado de la conexión en memoria. El seguimiento de conexiones se realiza en cadenas
PREROUTING y OUTPUT, el numero máximo de conexiones esta guardada en
/proc/sys/net/ipv4/ip_conntrack_max.
8.2.3. Protocolos.
Todos los servicios manejan protocolos para su comunicaciones, por lo cual
iptables podremos administrar servicios dentro de los protocolos:
•TCP: Protocolo de Control de Transmisión, este protocolo es mas utilizado por los
servicios ofrecidos por algún servidor y en general en todo Internet y redes locales.
•http://es.wikipedia.org/wiki/Transmission_Control_Protocol
•UDP: Protocolo de Datagrama de Usuario, sirve para el envía de datagrama pero
debe existir una conexión establecida.
•http://es.wikipedia.org/wiki/Udp
•ICMP: Protocolo de Mensajes de Control y Error de Internet, este protocolo
solamente lo utilizamos cuando hacemos envío de paquetes de un máquina a otra
como al hacer ping.
•http://es.wikipedia.org/wiki/Internet_Control_Message_Protocol
8.2.4. Objetivos/Acciones.
Cuando nosotros creamos una regla iptables tenemos varias acciones básicas en
las cuales podremos indicar al firewall que hacer con ellas. Estas acciones son:
•ACCEPT: Acepta los paquete que pase por el firewall.
•DROP: Deniega los paquete que pase por el firewall, cortando la comunicación.
•REJECT: Funciona básicamente igual que el objetivo DROP, aunque en este caso
se devuelve un mensaje de error al host que envío el paquete bloqueado.
4
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
•REDIRECT: Sirve para redirigir paquetes y flujos hacia una máquina de la red local
o DMZ. También sirve para redirigir peticiones entre puerto del mismo firewall para
la activación de servicios.
•MASQUERADE: Hace lo mismo que SNAT, pero MASQUERADE
automáticamente convierte nuestra IP de la red local o DMZ a IP publica y se
recomienda tener esta configuración cuando en nuestra red asignamos IP de forma
DHCP.
•LOG: Este objetivo funciona para registrar información detallada sobre los
paquetes que pasan por el firewall.
5
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
6
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
3. Empezar el filtrado de paquetes con las reglas que queramos, cuidando el orden:
pondremos las reglas de más específicas a más generales.
Aceptamos todas la conexiones entrantes al puerto 22/ssh por la interfaz de red eth0.
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
Aceptamos todas la conexiones entrantes al puerto 80/apache por la interfaz de red eth0.
iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
7
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
Rechaza todas la demás conexiones desde el puerto 1 al 1024 por protocolo tcp/udp por
la interfaz de red eth0.
iptables -A INPUT -i eth0 -p tcp --dport 1:1024 -j REJECT
iptables -A INPUT -i eth0 -p udp --dport 1:1024 -j REJECT
Solamente queda verificar que haya ejecutado las reglas correctamente, para verificarlo
ejecutamos el siguiente comando.
iptables -nL
Usando esa regla cualquier petición tcp al puerto 3128 que llegara al servidor sería
rechazada. Si queremos borrar esa última regla para volver a dejar el firewall como antes
usamos el parámetro “-D”
iptables -D INPUT -i eth0 -p tcp --dport 1:1024 -j REJECT
iptables -X
iptables -Z
iptables -t nat -F
Establecemos políticas por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
Todas la peticiones que vengan de Internet hacia el puerto 80 redirigirlo a nuestro
servidor apache con IP 192.168.2.100:80.
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.2.100:80
9
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
10
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
•Los
clientes de la red local pueden conectarse a servicios del tipo APACHE en la
DMZ,
•DesdeInternet se permitirá conectarse a servicios de APACHE que se encuentran
en DMZ, el servidor apache tiene la ip 10.0.2.30.
Limpiando reglas de iptables en todas las tablas.
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
Establecemos política por defecto
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
Todas la peticiones que vengan de Internet hacia el puerto 8080 redirigirlo a la máquina
de la DMZ con IP 10.0.2.30:80 que es el servidor Apache.
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 8080 -j DNAT --to 10.0.2.30:80
Aceptamos conexiones locales en la interfaz lo
iptables -A INPUT -i lo -j ACCEPT
Tenemos acceso al firewall desde la red local y DMZ
iptables -A INPUT -s 192.168.2.0/24 -i eth1 -j ACCEPT
iptables -A INPUT -s 10.0.2.0/24 -i eth2 -j ACCEPT
Ahora hacemos enmascaramiento de la Red Local y DMZ.
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 10.0.2.0/24 -o eth0 -j MASQUERADE
11
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
Ejemplo 1: Podremos bloquear los pings que nos envíe un cliente, o un segmento de red.
iptables -A INPUT -p icmp -s 192.168.2.0/0 -j DROP
iptables -A INPUT -p icmp -s 192.168.2.20 -j DROP
12
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
13
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
--------------------------------
Otra forma si ya tenemos reglas que hemos introducido mediante líneas de comandos y
queremos guardarlas, crearemos un archivo /etc/iptables.reglas
sudo nano iptables.reglas
Daremos permisos de escritura al archivo, o nos logueados como root como hemos visto
previamente sino queremos modificar los permisos del archivo recién creado.
sudo chmod a+w /etc/iptables.reglas
y usaremos el comando iptables-save indicándole que queremos guardar las reglas en
nuestro archivo iptables.reglas
sudo iptables-save > /etc/iptables.reglas
Con eso pasaremos toda la configuración que tenga iptables en ese momento al
archivo iptables.reglas. Comprobamos que las reglas que tuviéramos definidas están
dentro del archivo
sudo nano /etc/iptables.reglas
Si reiniciamos y queremos recargar la configuración de nuestro firewall podemos usar
iptables-restore
sudo iptables-restore < /etc/iptables.reglas
Si además queremos que se carguen al iniciar el interfaz de red cuando se arranca el
sistema, podemos añadir al archivo /etc/network/interfaces la línea
pre-up iptables-restore </etc/iptables.rules
14
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
Aparte de estas dos formas, también podemos almacenar las reglas que definamos en
iptables como scripts para ejecutarlas cuando queramos como lo haríamos con cualquier
otra cadena de comandos que formaran un script en Linux.
8.8. Otro supuesto práctico.
Vamos a ver un último supuesto práctico para comprender mejor iptables, se va a
configurar un servidor para que actúe como router. Para ello, es necesario realizar los
siguientes pasos:
• Configurar las interfaces de red para que el servidor tenga acceso a las dos
redes: Internet y la red interna.
• Configurar iptables para que permita el acceso de la red interna a Internet.
auto eth0
auto eth1
address 192.168.2.100
netmask 255.255.255.0
network 192.168.2.0
broadcast 192.168.2.255
# gateway 192.168.2.100
Establezca el sistema para que actúe como router (logueados como root):
su -
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
Indicamos que la red interna tiene salida al exterior por NAT:
iptables-save >/etc/iptables.rules
net.ipv4.ip_forward=1.
Para comprender mejor iptables, se va a realizar una mejora del supuesto en la que la red
interna sólo tiene acceso al exterior para ver páginas web (puerto 80/TCP) y para la
resolución de nombres (53/UDP y 53/TCP). Además, se va a publicar un servidor web
interno que se encuentra en la dirección 192.168.2.100.
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
Se permite sólo el tráfico web (80/tcp) y DNS (53/udp y 53/tcp). Todo lo demás se
deniega:
16
Redes, servidores y seguridad informática en Linux . CEP Indalo. Enrique Brotons
Redirijimos el tráfico web que entra por la interfaz externa (eth0) al servidor de la red
interna:
iptables-save >/etc/iptables.rules
Como podemos ver las diferentes configuraciones y posibilidades de iptables son casi
ilimitadas y se van comprendiendo mejor cuanto más ejemplos vamos viendo y probando.
Este artículo esta licenciado bajo Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License.
Enrique Brotons
17