Académique Documents
Professionnel Documents
Culture Documents
Administrador Linux
Módulo 5
Iptable y Squid
Objetivos
Temario
5.1 Iptables
5.2 ¿Qué es un firewall?
5.3 Firewall con iptables
5.4 Perfeccionamiento del firewall
5.5 Squid
5.6 Instalación
5.7 Configuración
5.8 Ajustes del firewall
Examen
Los participantes deberán rendir el examen online o presentar el material solicitado
según corresponda.
Iptables es el programa que permite modificar las tablas y las cadenas de reglas.
La idea es que podemos agregar, modificar o quitar reglas del firewall mediante la
ejecución del comando iptables. Usualmente se arma un script con los comandos
necesarios en nuestro sistema, y se agrega un script de inicio en /etc/init.d para
agregar o quitar las reglas.
Al kernel le llega un paquete, se fija en las reglas del firewall y toma la decisión de que
realizar con ese paquete. Las decisiones que se puede tomar se observan en el
siguiente grafico.
FILTER
INPUT Paquetes que llegan con destino a nuestro sistema
FORWARD Paquetes que pasan por nuestro sistema dirigidos a otros
OUTPUT Paquetes generados en nuestro sistema y son enviados
NAT
PREROUTING Se utiliza para modificar paquetes al entrar
OUTPUT Se utiliza para modificar paquetes generados localmente
antes de ser enrutados
POSTROUTING Se utiliza para modificar paquetes al salir
MANGLE
PREROUTING Se utiliza para modificar paquetes al entrar
POSTROUTING Se utiliza para modificar paquetes al salir
Dado que las computadoras en la actualidad están interconectadas en red, ya sea red
interna o Internet, existe la posibilidad que nuestra información sea vista por gente que
no debería tener acceso a ella (por ejemplo un hacker).
Como mencionamos anteriormente los firewalls pueden ser hardware (un dispositivo) o
software (por ejemplo netfilter/iptables) y, en primera instancia, pueden clasificarse
temporalmente de la siguiente manera:
En la actualidad los firewalls son capaces de realizar una inspección detallada de los
paquetes y compartir los datos con sistemas de prevención de intrusos (IPS).
La quinta generación está conformada por los llamados Kernel proxy firewall, estos
están desarrollados en el interior del kernel y es una tecnología totalmente diferente a
las previamente vistas.
ACEPTAR - ACCEPT
En este caso por defecto se acepta el tráfico que pasa por el firewall y se deniega
explícitamente mediante reglas. El riesgo es que no controlamos que puertos están
abiertos, por ejemplo si se instala un nuevo software o en un peor caso un gusano o
spyware, podría abrir un nuevo puerto.
DENEGAR - DROP
En este caso por defecto se niega el tráfico y se permite lo que se explicito en las
reglas. En este caso el firewall actúa como una pared.
Al momento de decidir qué hacer con un paquete el firewall compara regla por regla
hasta que encuentra una coincidencia (match) y se realiza lo que la regla indica. Una
vez realizada la acción no se verifican el resto de las reglas, por esto es muy
importante verificar muy bien el orden de las reglas y cuan permisivas son.
Topologías comunes
Hay diversas topologías de red en base a la posición que ocupa el firewall, por ejemplo
Bastion host, Dual-homed firewall, Screened host, Screened subnet, etc. Veremos en
este apartado dos disposiciones básicas para luego pasar a la configuración de
iptables.
Esquema simple, el trafico sale directamente del firewall (sin red interna).
Esquema simple con red interna, el firewall tiene dos placas de red. Una de las placas
conectada a Internet y otra conectada a la red interna.
Descartar (drop) todos los paquetes del tipo http provenientes de la red 193.11.1.0/24
# iptables -A FORWARD -p tcp -dport 80 -s 193.11.1.0/24 -d debian.linux.com -j
DROP Descartar (drop) los paquetes de telnet provenientes del host hacker.net
# iptables -A INPUT -p tcp -s hacker.com -d debian.linux.com -dport 23 -j DROP
Descartamos los paquetes ICMP (ping, etc) que provienen de un host malicioso
# iptables -A INPUT -s hacker.com -p icmp -j DROP
Para verificar que las reglas se han aplicado debemos ejecutar el comando
# iptables –L -n
Una vez finalizado este saludo el tráfico queda establecido. Para que nuestro firewall
acepte conexiones una vez establecidas deberemos tener una serie de reglas que
verificaran el estado de la conexión. Las reglas lucirán como las siguientes:
Para guardar las reglas actuales del firewall (backup) utilizamos el comando
# iptables-save
# iptables-restore
Configurando iptables
#!/bin/sh
echo “Se está ejecutando el script de firewall”
## FLUSH de reglas
iptables -F
iptables -X
iptable -Z
iptables –t nat -F
## Reglas
## Se permite el tráfico a localhost
iptables -A INPUT -i lo -j ACCEPT
## Maximo acceso para nuestra IP
iptables -A INPUT -s 200.77.1.1 -j ACCEPT
Si queremos darle un poco mas de rigor al ejemplo anterior podríamos cerrar al menos
los puertos bajos de TCP y UDP (también llamados puertos conocidos). Agregaremos
entonces las líneas que siguen al script anterior:
Supongamos ahora que nuestro firewall está entre la red local con direccionamiento
privado e Internet.
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat –F
## Reglas
O, por ejemplo, podemos decidir bloquear las conexiones a Messenger para todos los
usuarios, excepto para nosotros, dejando log de las conexiones.
Ahora veremos un caso similar al anterior pero en el que agregamos una DMZ (zona
desmilitarizada).
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat –F
Haremos ahora un ejemplo de firewall con política denegar. Recordemos que en este
caso debemos explicitar todas las conexiones que permitiremos pero tenemos mayor
protección.
#!/bin/sh
echo “Se esta ejecutando el script de firewall”
## FLUSH de reglas
iptables -F
iptables -X
iptables -Z
iptables -t nat –F
## Reglas
bash: al utilizar un script para el firewall podremos utilizar los comandos del
shell para realizar acciones adicional, por ejemplo mostrar en pantalla la regla
que se esta aplicando.
iptables -A INPUT -i lo -j ACCEPT && echo "regla loopback accept ok"
5.5 Squid
5.6 Instalación
# wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE13.tar.gz
Descomprimimos:
Por supuesto que existen muchas más opciones disponibles que están descriptas en
la documentación.
5.7 Configuración
Para configurar Squid editaremos el archivo /etc/squid/squid.conf. Hay muchos
parámetros con los que trabajar por lo que veremos algunos de ellos.
http_port
El puerto por defecto es el 3128, pero modificando este parámetro podemos decirle a
squid en que puerto debe atender solicitudes.
También es común encontrar que los proxys atiendan en el puerto 8080 y podemos
hacer que atienda en los dos puertos haciendo lo siguiente:
# You may specify multiple socket addresses on multiple lines.
http_port 3128
http_port 8080
maximum_object_size
Tamaño máximo de los objetos a guardar en cache. Por ejemplo si queremos guardar
los objetos que ocupan hasta 20 Mb.
maximum_object_size 20 MB
cache_dir
Este parámetro establece el tamaño de cache en el disco rígido para squid y refiere a
la cantidad de información que almacenara squid.
Por ejemplo podemos establecer un cache de 1giga mediante
cache_dir ufs /var/spool/squid 1000 16 256
ftp_passive
Si utilizamos un firewall que solo permite conexiones FTP pasivas debemos activar
esta opción:
ftp_passive on
Control de acceso
Se genera una lista de acceso y se le aplican reglas. Veremos cómo funciona esto
tomando en cuenta nuestra Lan de ejemplos anteriores 192.168.139.0/24
Listas de acceso
Las listas de acceso tienen la siguiente sintaxis
acl red_local_permitida src 192.168.139.0/255.255.255.0
Se puede recurrir a leer un archivo en cuyo contenido esta la lista permitida mediante
acl listapermitidos src “/etc/squid/hostpermitidos”
Reglas de acceso
Son las que definen si se permite el acceso o no, para esto trabajan en conjunto con
las listas de acceso. Para permitir que la red interna se comunique y el resto no. La
sintaxis es:
http_access allow red_local_permitida
http_aceess deny all
Por ejemplo para evitar que se pueda acceder a contenido de tipo flash video
debemos hacer algo como esto:
acl deny_rep_mime_flashvideo rep_mime_type -i video/flv
acl deny_rep_mime_flashvideo rep_mime_type -i video/x-ms-asf
acl deny_rep_mime_flashvideo rep_mime_type -i video/x-ms-wmv
acl deny_rep_mime_flashvideo rep_mime_type -i application/x-shockwave-flash
http_reply_access deny deny_rep_mime_flashvideo denied_media
Autenticación LDAP/AD:
Por ejemplo para redireccionar el protocolo HTTP debemos tener una regla que
reenvié cualquier solicitud entrante desde la red local hacia el exterior puerto 80 al
puerto 3128