Professional Documents
Culture Documents
Arquitectura y configuración
de cortafuegos:
Shorewall
Técnico en Administración de
Redes y Sistemas TCP/IP
Juan José Mostazo
jmostazo@fi.upm.es
Administración de servidores seguros en Internet
+
¿Que es una puerta de enlace
(gateway)?
Una puerta de enlace es un dispositivo que permite interco-
nectar dos redes con protocolos y arquitecturas diferentes a
todos los niveles de comunicación.
09/11/10
+
¿Que es un cortafuegos?
09/11/10
+
iptables
09/11/10
+
iptables - Target
09/11/10
+
iptables - Listas de reglas
09/11/10
+
iptables – Ejemplos (1)
09/11/10
+
iptables – Ejemplos (2)
09/11/10
+
iptables – Ejemplos (3)
09/11/10
+
Shorewall
Basado en iptables.
09/11/10
+
Instalamos shorewall
En /usr/share/doc/shorewall-common/examples/one-
interface están los ficheros de ejemplo para una
configuración con una sola interfaz de red (nuestro caso).
/etc/shorewall:
shorewall.conf: Configuración general de shorewall.
interfaces: Configura las interfaces de red que van a participar.
zones: Define las zonas en las que se va a dividir la red.
policy: Define las políticas por defecto que se van a seguir.
rules: Define las excepciones de las políticas definidas.
09/11/10
+
Fichero <shorewall.conf> (I)
Configuración general de shorewall:
Opciones sobre los registros (logs): paths, formatos, etc...
Opciones asociadas al comportamiento de pasarela (router).
Opciones globales del firewall.
Iniciamos Shorewall:
sudo /etc/init.d/shorewall start
09/11/10
+
Tablas en los ficheros de
configuración
El resto de ficheros de configuración siguen una estructura
en forma de tabla.
Por ejemplo:
# ZONE | INTERFACE | BROADCAST | OPTIONS
net1 eth0 192.168.168.63
net2 ppp0 - dhcp
En este caso tenemos 4 columnas.
A la hora de añadir filas, toda sucesión de espacios y/o tabuladores
contigua se consideran un separador de columnas.
En este caso las columnas BROADCAST y OPTIONS son opcionales.
En caso de no asignar valor a una columna y querer asignar valor a
una que va después, hay que usar “-”.
09/11/10
+
Fichero <zones>
Formato:
ZONE | TYPE | OPTIONS | IN | OUT
| | | OPTIONS | OPTIONS
Zone: nombre de la zona
Type:
ipv4: indica que la zona usa ipv4.
firewall: indica que la zona define al firewall. Solo puede haber
una zona de tipo firewall.
El resto de opciones no nos conciernen.
09/11/10
+
Zonas especiales
09/11/10
+
Fichero <interfaces> (1)
Formato:
ZONE | INTERFACE | BROADCAST | OPTIONS
09/11/10
+
Fichero <interfaces> (2)
OPTIONS:
dhcp: Indica que se va a permitir el tráfico dhcp en este interfaz.
routefilter: Activa los filtros anti-escucha/usurpación en este
interfaz.
logmartians: Activa el registro de los paquetes “marcianos”.
blacklist: Activa el filtrado mediante listas negras de direcciones
IP.
maclist: Activa el filtrado mediante listas de direcciones MAC.
nosmurfs: Filtra los paquetes “pitufos” (provenientes de una
dirección de difusión).
09/11/10
+
Fichero <policy> (1)
Formato:
SOURCE DEST POLICY LOG … …
LEVEL
SOURCE: Zona origen. Se puede usar “all” para indicar que la
política se aplicará para cualquier zona de origen.
DEST: Zona destino. Se puede usar “all” para indicar que la
política se aplicará para cualquier zona de destino.
POLICY: Política que se va a aplicar.
ACCEPT: Acepta la conexión.
DROP: Ignora el intento de conexión. No informa al origen de
este hecho.
REJECT: No permite la conexión e informa de ello al origen.
LOG_LEVEL: Nivel en el que se registrarán las conexiones.
09/11/10
+
Fichero <policy> (2)
09/11/10
+
Niveles de registro (syslog)
debug (mensajes de depuración)
warning (Aviso)
err (errores)
Columnas básicas:
ACTION: Acción a realizar en caso que se cumplan las
condiciones.
SOURCE: Origen de la conexión.
DEST: Destino de la conexión.
PROTO: Protocolo usado en la conexión.
DEST PORT: Puerto de destino.
SOURCE PORT: Puerto de origen.
09/11/10
+
Fichero <rules> (2)
Acciones básicas:
ACCEPT, DROP y REJECT
SOURCE y DEST:
Se indican mediante zonas: $FW, all, ...
Se puede limitar a ciertas direcciones:
Una IP: <net:155.186.235.1>
Una subred: <net:155.186.235.0/255.255.255.0> o
<net:155.186.235.0/24>
Un rango: <net:192.168.2.11-192.168.2.17>
Una dirección de nivel físico (MAC):
<loc:~00-A0-C9-15-39-78>
Cualquier combinación hecha mediante comas:
<net:192.168.2.11-192.168.2.17,192.168.2.200>
09/11/10
+
Fichero <rules> (3)
09/11/10
+
Fichero <rules> (4)
PROTO:
Protocolos normales, como pueden ser: tcp, udp, icmp.
Se pueden mezclar usando comas: “tcp,udp”.
También se puede indicar “all” para indicar todos los protocolos
09/11/10
+
Ejemplo básico (1)
09/11/10
+
Macros (1)
09/11/10
+
Macros (2)
09/11/10
+
Macros (3)
09/11/10
+
Registrando los sucesos
Por ejemplo:
REJECT:info net $FW icmp
09/11/10
+
Ejemplo básico (2)
09/11/10
+
Fichero hosts (1)
Formato:
ZONE | HOST(S) | OPTIONS
OPTIONS:
blacklist
maclist
tcpflags
nosmurfs
09/11/10
+
Ejemplo de fichero <hosts>
Ejemplo:
#ZONE HOST(S) OPTIONS
subred1 eth1:192.168.128.0/17
09/11/10
+
Restringir por usuario/grupo
Ejemplo:
ACCEPT $FW net tcp - 80 - - www-data
09/11/10
+
Acciones avanzadas: Limit (1)
Ejemplo:
Limit:none:SSHA,3,60 net $FW tcp 22
En este caso, un cliente solo podría iniciar tres conexiones al
puerto 22 en una franja de tiempo de 60 segundos.
No se registrarán los intentos fallidos de conexión
09/11/10
+
Acciones avanzadas: Limit (2)
09/11/10
+
Utilizando listas negras (1)
shorewall.conf:
BLACKLISTNEWONLY=No – Se comprueban las listas negras cada
vez que se recibe una paquete de red.
BLACKLISTNEWONLY=Yes – Solo se comprueban las listas negras
cuando se establece una conexión.
BLACKLIST_DISPOSITION=DROP | REJECT
BLACKLIST_LOGLEVEL= Nivel en el que se registrarán los
paquetes filtrados por las listas negras.
09/11/10
+
Utilizando listas negras (2)
Hay que activar la opción blacklist en los interfaces de red
en los que queramos que se filtre mediante las listas negras.
09/11/10
+
fail2ban
Programa que revisa los registros de ciertas aplicaciones
(ssh, smtp, ...) y avisa a shorewall para bloquee las
conexiones de las IPs que generen un determinado número
de fallos de autenticación.
Instalación:
apt-get install fail2ban
cd /etc/fail2ban
modificar jail.conf: En nuestro caso, lo importante es
modificar banaction para que notifique a shorewall.
09/11/10
+
Ejemplos usando KnockDoor (1)
Fichero <rules>
Knock:none:EnableSSH net $FW tcp 1234
KnockDoor:none:EnableSSH,10 net $FW tcp 22
09/11/10
+
Ejemplos usando KnockDoor (2)
09/11/10
+
Aspectos de un firewall no vistos
en clase
Shorewall no permite controlar las conexiones en base a las
aplicaciones.
No puedes decir que solo apache2 puede escuchar en el puerto
80.
Tampoco puedes indicar que Firefox solo pueda acceder al
puerto 80.
09/11/10
+
Cosas a tener en cuenta (1)
Administrar un cortafuegos en remoto (por ejemplo,
mediante ssh) no es muy recomendable ya que se puede
perder la conexión al modificar inadecuadamente las reglas
del firewall.
En caso de hacerlo, hay que tomar precauciones. Por ejemplo,
utilizar “shorewall safe-restart” para actualizar las reglas del
firewall. Este comando reiniciará shorewall y nos preguntará si
todo a ido bien, en caso de no contestar (cosa que pasaría si
perdemos la conexión), pararía el firewall.
09/11/10
+
Cosas a tener en cuenta (2)
09/11/10