Como acabamos de decir, para acceder a determinados servicios de una máquina,
una vez hemos dejado establecer las conexiones entre interfaces, es necesario
definir permisos sobre el modo de acceso, el origen y los servicios a los que
se permite acceder de esa máquina; esto lo conseguiremos mediante la orden
access-list, cuya sintaxis es la siguiente:
access-list ID accion proto dir-origen pto-origen dir-destino pto-destino
Si por ejemplo queremos habilitar un acceso HTTP desde cualquier lugar de
Internet, y además acceso POP3 desde un determinado segmento externo
(por ejemplo, 196.33.22.128/25) a la máquina 158.42.22.41, lo
haremos mediante una lista de control de dos entradas (que llamaremos prova), que podemos crear con las siguientes órdenes:
pixie(config)# access-list prova permit tcp any host 158.42.22.41 eq http
pixie(config)# access-list prova permit tcp 196.33.22.128 255.255.255.128
host 158.42.22.41 eq http
pixie(config)#
Dentro de una lista de control es importante asegurarse que la regla más
general es siempre la última; PIX funciona en este sentido como Firewall-1: en el momento en que una determinada regla hace match, se
aplica y no se sigue analizando el resto. Por ejemplo, si queremos que
ningún equipo del exterior haga ping a la máquina 158.42.22.41,
excepto los que provienen de la red 196.72.31.0/24, definiremos la siguiente
lista de control de acceso:
pixie(config)# access-list prova permit icmp 196.72.31.0 255.255.255.0 host
158.42.22.41
pixie(config)# access-list prova deny icmp any any
pixie(config)#
Con las órdenes anteriores no hacemos más que definir (o modificar, si ya
existía) la ACL `prova'; esto no tiene ningún efecto sobre el
funcionamiento del cortafuegos, ya que para que lo tenga tenemos que asociar
esta lista a una interfaz de red: en concreto, a aquella de la que va a
provenir el tráfico de entrada en cada caso. Para ello, utilizaremos la orden
access-group:
pixie(config)# access-group prova in interface outside
pixie(config)#
Con este comando asociamos la lista de control a la interfaz especificada; si
esta interfaz ya tenía asociada una lista de control, la nueva reemplaza a
la antigua pero las conexiones no se pierden, ni siquiera las que estaban
permitidas anteriormente pero ahora se niegan. Esto es útil para poder
añadir entradas intermedias a las listas de control sin que las conexiones
establecidas por el interfaz
al que queremos asociarlas se pierdan: para ello, lo más rápido es copiar
la lista en un editor de textos, realizar sobre el mismo las modificaciones
necesarias, y grabarla de nuevo en el cortafuegos con otro nombre; tras
esto, la asociamos al interfaz correspondiente mediante access-group, y
cuando estemos seguros de que todo funciona correctamente la grabamos en memoria
mediante write mem.
Si lo que queremos es añadir una entrada al final de la lista de control
no es necesario todo esto: basta con ejecutar el access-list
correspondiente para que la nueva entrada se añada a la lista, y
automáticamente se aplique sobre el interfaz; si no queremos añadir, sino
eliminar entradas de una ACL, podemos ejecutar directamente no
access-list, orden que recibe como parámetro la entrada a eliminar:
pixie(config)# sh access-list prova
access-list prova permit tcp any host 158.42.22.41 eq smtp (hitcnt=0)
access-list prova permit tcp any host 158.42.22.41 eq pop3 (hitcnt=0)
access-list prova permit tcp any host 158.42.22.41 eq telnet (hitcnt=0)
pixie(config)# no access-list prova permit tcp any host 158.42.22.41 eq pop3
pixie(config)# sh access-list prova
access-list prova permit tcp any host 158.42.22.41 eq smtp (hitcnt=0)
access-list prova permit tcp any host 158.42.22.41 eq telnet (hitcnt=0)
pixie(config)#
Como siempre, una vez que estemos seguros de que la configuración es correcta,
será necesario grabar los cambios en memoria flash mediante write
mem.
© 2002 Antonio Villalón Huerta