Está en la página 1de 15

Configuración de Firewall

Cisco PIX
Introducción
PIX (Private Internet eXchange) es una de las soluciones de seguridad ofrecidas por
Cisco Systems; se trata de un firewall completamente hardware: a diferencia de otros
sistemas cortafuegos, PIX no se ejecuta en una máquina Unix, sino que incluye un
sistema operativo empotrado denominado Finesse que desde espacio de usuario se
asemeja más a un router que a un sistema Unix clásico. Por tanto, dado que la gestión
de este cortafuegos no es tan inmediata para un administrador de sistemas como la de
uno que se ejecute sobre Unix, vamos a dedicarle más tiempo al PIX Firewall de lo que
hemos dedicado al resto de cortafuegos.

El cortafuegos PIX utiliza un algoritmo de protección denominado Adaptive Security


Algorithm (ASA): a cualquier paquete inbound (generalmente, los provenientes de redes
externas que tienen como origen una red protegida) se le aplica este algoritmo antes de
dejarles atravesar el firewall, aparte de realizar comprobaciones contra la información de
estado de la conexión (PIX es stateful) en memoria; para ello, a cada interfaz del firewall
se le asigna un nivel de seguridad comprendido entre 0 (el interfaz menos seguro,
externo) y 100 (el más seguro, interno). La filosofía de funcionamiento del Adaptive
Security Algorithm se basa en estas reglas:
♦ Ningún paquete puede atravesar el cortafuegos sin tener conexión y estado.

♦ Cualquier conexión cuyo origen tiene un nivel de seguridad mayor que el destino
(outbound) es permitida si no se prohíbe explícitamente mediante listas de acceso.

♦ Cualquier conexión que tiene como origen una interfaz o red de menor seguridad que
su destino (inbound) es denegada, si no se permite explícitamente mediante listas
de acceso.

♦ Los paquetes ICMP son detenidos a no ser que se habilite su tráfico explícitamente.

♦ Cualquier intento de violación de las reglas anteriores es detenido, y un mensaje de


alerta es enviado a syslog.
Cuando a un interfaz del cortafuegos llega un paquete proveniente de una red con menor
nivel de seguridad que su destino, el firewall le aplica el adaptive security algorithm para
verificar que se trata de una trama válida, y en caso de que lo sea comprobar si del host
origen se ha establecido una conexión con anterioridad; si no había una conexión previa,
el firewall PIX crea una nueva entrada en su tabla de estados en la que se incluyen los
datos necesarios para identificar a la conexión.

El cortafuegos PIX puede resultar muy complejo de gestionar, especialmente a los que
provenimos del mundo Unix, ya que como hemos dicho se asemeja más a un router que
a un servidor con cualquier flavour de Unix; es por tanto recomendable consultar
bibliografía adicional antes de trabajar con estos equipos.

La primera sesión con PIX Firewall


Si conectamos al firewall por consola a través de una línea serie entramos directamente
sin necesidad de contraseña, en modo no privilegiado; esto lo sabemos porque nos
aparece el prompt siguiente:

pixie>
Si en este prompt tecleamos la orden `?', nos mostrará la ayuda disponible en el modo
sin privilegios:

dixie> ?
enable Enter privileged mode or change privileged mode password
pager Control page length for pagination
quit Disable, end configuration or logout
dixie>

Son pocos comandos con los que apenas se puede hacer nada; la orden pager nos
permite ajustar el número de líneas para paginar, la orden quit (o exit) sale del firewall,
y la orden enable nos pasa a modo superusuario, pidiendo la contraseña (que por
defecto será `cisco'); cada orden del PIX se puede abreviar (por ejemplo, en lugar de
enable podríamos teclear ena):

dixie> ena
Password: *****
dixie#

Como vemos, al estar en modo privilegiado, el prompt cambia y nos muestra una
almohadilla; en este modo ya podemos reconfigurar parámetros del PIX, y tenemos más
órdenes disponibles que antes:
dixie# ?
arp Change or view the arp table, and set the arp timeout value
auth-prompt Customize authentication challenge, reject or acceptance prompt
configure Configure from terminal, floppy, or memory, clear configure
copy Copy image from TFTP server into flash.
debug Debug packets or ICMP tracings through the PIX Firewall.
disable Exit from privileged mode
enable Modify enable password
flashfs Show or destroy filesystem information
kill Terminate a telnet session
pager Control page length for pagination
passwd Change Telnet console access password
ping Test connectivity from specified interface to <ip>
quit Disable, end configuration or logout
reload Halt and reload system
session Access an internal AccessPro router console
terminal Set terminal line parameters
who Show active administration sessions on PIX
write Write config to net, flash, floppy, or terminal, or erase flash
dixie#

Para comenzar a reconfigurar el firewall nos pondremos en modo configuración (desde


modo privilegiado) con la orden configure (la `t' corresponde a Terminal); de nuevo,
cambia el prompt que nos aparece en consola:

dixie# con t
dixie(config)#

En este modo disponemos de más comandos para configurar el PIX; como siempre,
podemos verlos con la orden `?':

dixie(config)# ?
aaa Enable, disable, or view TACACS+ or RADIUS user authentication, authorization and
accounting
access-group Bind an access-list to an interface to filter inbound traffic
access-list Add an access list
age This command is deprecated. See ipsec, isakmp, map, ca commands
alias Administer overlapping addresses with dual NAT.
apply Apply outbound lists to source or destination IP addresses
arp Change or view the arp table, and set the arp timeout value
auth-prompt Customize authentication challenge, reject or acceptance prompt
aaa-server Define AAA Server group
ca CEP (Certificate Enrollment Protocol)Create and enroll RSA key pairs into a PKI
(Public Key Infrastructure).
clock Show and set the date and time of PIX
conduit Add conduit access to higher security level network or ICMP
crypto Configure IPsec, IKE, and CA
configure Configure from terminal, floppy, or memory, clear configure
copy Copy image from TFTP server into flash.
debug Debug packets or ICMP tracings through the PIX Firewall.
disable Exit from privileged mode
domain-name Change domain name
dynamic-map Specify a dynamic crypto map template
enable Modify enable password
established Allow inbound connections based on established connections
failover Enable/disable PIX failover feature to a standby PIX
filter Enable, disable, or view URL, Java, and ActiveX filtering
fixup Add or delete PIX service and feature defaults
flashfs Show or destroy filesystem information
ipsec Configure IPSEC policy
isakmp Configure ISAKMP policy
global Specify, delete or view global address pools, or designate a PAT
(Port Address Translated) address
hostname Change host name
vpdn Configure VPDN (PPTP) Policy
interface Identify network interface type, speed duplex, and if shutdown
ip Set ip address for specified interface, define a local address pool, or
toggle Unicast Reverse Path Forwarding on an interface.
kill Terminate a telnet session
link This command is deprecated. See ipsec, isakmp, map, ca commands
linkpath This command is deprecated. See ipsec, isakmp, map, ca commands
logging Enable logging facility
map Configure IPsec crypto map
mtu Specify MTU(Maximum Transmission Unit) for an interface
name Associate a name with an IP address
nameif Assign a name to an interface
names Enable, disable or display IP address to name conversion
nat Associate a network with a pool of global IP addresses
outbound Create an outbound access list
pager Control page length for pagination
passwd Change Telnet console access password
ping Test connectivity from specified interface to <ip>
quit Disable, end configuration or logout
radius-server Specify a RADIUS aaa server
reload Halt and reload system
rip Broadcast default route or passive RIP
route Enter a static route for an interface
session Access an internal AccessPro router console
snmp-server Provide SNMP and event information
sysopt Set system functional option
static Map a higher security level host address to global address
tacacs-server Specify a TACACS+ server
telnet Add telnet access to PIX console and set idle timeout
terminal Set terminal line parameters
tftp-server Specify default TFTP server address and directory
timeout Set the maximum idle times
url-cache Enable URL caching
url-server Specify a URL filter server
virtual Set address for authentication virtual servers
who Show active administration sessions on PIX
write Write config to net, flash, floppy, or terminal, or erase flash
dixie(config)#

Interfaces de red
Cisco denomina a cada uno de sus interfaces hardware de la forma ethernetN o token-
ringN. Desde el modo configuración podemos asignarles nombres simbólicos y niveles de
seguridad, teniendo en cuenta que el nombre outside se asigna por defecto a la tarjeta
ethernet0 y el nombre inside a la ethernet1. Además, el nivel de seguridad de la interfaz
outside ha de ser el más bajo, 0, y el reservado para inside el más elevado, 100; el resto
de tarjetas pueden tener cualquier número comprendido entre los dos anteriores.

Si queremos asignarle un nombre simbólico y un nivel de seguridad a un interfaz hemos


de utilizar la orden nameif; por ejemplo, para denominar dmz a la tarjeta ethernet2, y
darle un nivel 50, ejecutaríamos lo siguiente :

dixie(config)# nameif e2 dmz security50


dixie(config)#

Es muy importante que exista una interface llamada outside con un nivel 0 y una inside
con un nivel 100; si alguna de las dos no existe, o si está duplicada, el cortafuegos
parará todo el tráfico que pase por él. Podemos ver si la configuración actual de las
interfaces es correcta mediante la orden show nameif:

dixie(config)# show nameif


nameif ethernet0 outside security0
nameif ethernet1 inside security100
nameif ethernet2 dmz security50
nameif ethernet3 intf3 security15
dixie(config)#

Accesos entre interfaces


Para conseguir excepciones a las reglas de funcionamiento del adaptive security
algorithm se utilizan los comandos nat y static; la orden nat permite que una interfaz de
mayor seguridad pueda acceder a uno de menor, mientras que static hace justo lo
contrario.

Para cada interfaz de mayor nivel de seguridad que quiera acceder a una de menor nivel
hemos de ejecutar la orden nat:

dixie(config)# nat (dmz) 0 0.0.0.0 0.0.0.0


dixie(config)# sh nat
nat (dmz) 0 0.0.0.0 0.0.0.0 0 0
pixie(config)#

La orden anterior indica que el interfaz dmz accederá sin realizar NAT (el primer `0'),
aplicando esto a todas las máquinas de la subred conectada a ese interfaz: los dos
grupos `0.0.0.0' representan la dirección y la subred, respectivamente, de los equipos a
los que permitimos la salida; si sólo quisiéramos que una de las máquinas conectada al
interfaz dmz accediera a segmentos de menor prioridad, pondríamos su dirección IP y su
máscara (255.255.255.255).

Si lo que queremos es permitir el acceso desde un interfaz de menor nivel de seguridad a


uno de mayor ejecutaremos la orden static, que tiene la sintaxis siguiente:
static (if_interna,if_externa) dir_destino dir_destino netmask mascara
El hecho de que aparezca por duplicado la dirección destino de la máquina que estamos
`publicando' al exterior es porque, al ejecutar la orden nat, hemos decidido no hacer NAT
real; si lo estuviéramos haciendo, en lugar de la dirección destino utilizaríamos en primer
lugar la dirección que le damos a la máquina hacia el exterior (típicamente, una IP
pública) y en segundo la dirección que tiene el equipo dentro de la red a la que está
directamente conectado (una privada).

De esta forma, si lo que queremos es que desde toda Internet (interfaz outside) se
pueda acceder a nuestro servidor de correo POP3, en la máquina 158.42.22.41 (por
ejemplo, dentro del interfaz dmz), ejecutaríamos en primer lugar la siguiente orden:

dixie(config)# static (dmz,outside) 158.42.22.41 158.42.22.41 netmask 255.255.255.255


dixie(config)# sh static
static (dmz,outside) 158.42.22.41 158.42.22.41 netmask 255.255.255.255 0 0
dixie(config)#

Con el comando anterior nos limitamos a `publicar' la dirección de una máquina


protegida por el PIX firewall al resto de Internet; pero esto no significa que ya se pueda
acceder a ese sistema: tras la orden static, es necesario habilitar listas de control de
acceso a los diferentes servicios de la dirección que hemos publicado, y asociar dichas
listas de control a la interfaz correspondiente; si por ejemplo el acceso necesitado es
SMTP, ejecutaríamos la siguiente orden:

dixie(config)# access-list prueba permit tcp any host 158.42.22.41 eq smtp


dixie(config)# access-group prueba in interface outside
dixie(config)#

Como vemos, asociamos la lista de control a la interfaz de entrada del tráfico, no a la


que está conectada la máquina. El tema de las listas de control de acceso es el que
vamos a ver en el punto siguiente.

Listas de control de acceso


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.
Rutado
En el cortafuegos PIX es necesario especificar mediante rutas estáticas cómo vamos a
encaminar los paquetes que nos llegan, añadiendo una ruta para cada red conectada a
un interfaz; sólo podremos asignar una ruta por defecto, asociada siempre al interfaz
outside.

Para ver las rutas del firewall utilizaremos la orden sh route:

pixie(config)# sh route
outside 0.0.0.0 0.0.0.0 172.17.1.3 1 OTHER static
inside 172.17.2.0 255.255.255.0 172.17.2.1 1 CONNECT static
dmz 192.168.63.0 255.255.255.0 192.168.63.156 1 CONNECT static
failover 192.168.87.208 255.255.255.252 192.168.87.209 1 CONNECT static
dmz 158.42.0.0 255.255.0.0 192.168.63.156 1 OTHER static
pixie(config)#

Como vemos, la ruta por defecto está asociada a la interfaz outside; además, la interfaz
dmz tiene dos rutas, una para una clase pública y otra para una privada, y también
existe una boca del firewall dedicada en exclusiva al failover, del que hablaremos más
adelante.

Si lo que queremos es modificar cualquiera de estas rutas, añadir rutas nuevas, o


eliminar alguna de ellas, ejecutaremos la orden route, cuya sintaxis es la siguiente:
route interfaz direccion-remota mascara gateway metrica
Por ejemplo, si deseamos enrutar el tráfico dirigido a la red 192.168.63.128/25 a través
del interfaz dmz, que tiene como dirección IP 192.168.63.156, y que está directamente
conectado a la red (un salto), ejecutaríamos esta orden:

pixie(config)# route dmz 192.168.63.128 255.255.255.128 192.168.63.156 1


pixie(config)#

Para eliminar una ruta, ejecutaremos el comando no route, que recibe como parámetro
la ruta que deseamos eliminar (algo similar a lo que sucedía con las listas de control de
acceso).
Arranque y parada del cortafuegos
La orden reload (modo privilegiado) reinicia el firewall y carga su configuración, bien
desde diskette bien desde la memoria flash (en caso de que no haya ningún disco en la
unidad). Al ejecutar reload se nos pedirá confirmación para reiniciar el cortafuegos, y es
muy importante que en caso de no querer ejecutar el comando tecleemos `n';
cualquier otra respuesta ejecuta la orden.

Configuraciones del sistema


Nombre de la máquina
Mediante la orden hostname cambiamos el nombre de host del cortafuegos:

dixie(config)# hostname pixie


pixie(config)# hostname dixie
dixie(config)#
Contraseñas
En modo configuración podemos cambiar la contraseña de acceso al modo privilegiado
mediante la orden enable password; mediante show enable vemos la cadena cifrada
con nuestra contraseña:

dixie(config)# show enable


enable password /hVDnFhQPQc4lzN5 encrypted
dixie(config)# enable password passprova
dixie(config)# show enable
enable password S6KVLr8BjSKx8os/ encrypted
dixie(config)#

Esta clave es diferente de la que se utiliza para acceder al cortafuegos vía telnet; para
modificar esta última (por defecto será `cisco') utilizaremos la orden passwd, y para
visualizar la cadena cifrada resultante show passwd:

dixie(config)# show passwd


passwd 2KFQnbNIdI.2KYOU encrypted
dixie(config)# passwd prova
dixie(config)# show passwd
passwd /hVDnFhQPQc4lzN5 encrypted
dixie(config)#

Si quisiéramos restaurar esta contraseña a su valor original (`cisco'), no tenemos más


que ejecutar la orden clear passwd:

dixie(config)# show passwd


passwd /hVDnFhQPQc4lzN5 encrypted
dixie(config)# clear passwd
dixie(config)# show passwd
passwd 2KFQnbNIdI.2KYOU encrypted
dixie(config)#

La cadena `encrypted' que aparece tras la contraseña indica que se trata de una clave
cifrada; también nos puede resultar útil para asignar un password directamente en
cifrado, en lugar de hacerlo en texto claro:

dixie(config)# show passwd


passwd 2KFQnbNIdI.2KYOU encrypted
dixie(config)# passwd /hVDnFhQPQc4lzN5 encrypted
dixie(config)# show passwd
passwd /hVDnFhQPQc4lzN5 encrypted
dixie(config)# show enable password
enable password 2KFQnbNIdI.2KYOU encrypted
dixie(config)# enable password /hVDnFhQPQc4lzN5 encrypted
dixie(config)# show enable password
enable password /hVDnFhQPQc4lzN5 encrypted
dixie(config)#

En caso de pérdida de la clave de acceso vía telnet, no tenemos más que conectar al
cortafuegos mediante una conexión serie y, desde el modo privilegiado asignar una
nueva contraseña; si lo que hemos perdido es la clave para situar al cortafuegos en
modo privilegiado, el proceso es algo más complicado: en este caso debemos
descargar la utilidad PIX Password Lockout Utility apropiada para nuestra versión de
firewall (que podemos ver con sh version), desde la dirección
http://www.cisco.com/warp/public/110/34.shtml
Se trata de un fichero `.bin' que podemos transferir a un disquette mediante la orden
dd:

anita:~$ dd if=np51.bin of=/dev/fd0


144+0 records in
144+0 records out
anita:~$

Tenemos que arrancar con el disco al que hemos transferido este sistema, que nos
automáticamente nos preguntará si queremos borrar las claves; le diremos que sí y
reiniciaremos el cortafuegos, que tendrá como contraseña de acceso remoto `cisco' y no
tendrá password para pasar al modo privilegiado.
Cambios permanentes
Cada vez que nuestro PIX se apague perderá su configuración y cargará o bien una
introducida en un diskette (esto es sólo teoría, nunca nos ha funcionado correctamente)
o bien la que está grabada en su memoria flash; si deseamos que nuestros cambios sean
permanentes hemos de grabarlos o en disco o en memoria flash , mediante la orden
write (write floppy o write mem, en cada caso):

dixie# write mem


Building configuration...
Cryptochecksum: 206a9447 17e7ec36 d53c98d2 22a06c5e
[OK]
dixie# wr floppy
Building configuration...
[OK]
dixie#
Si lo que queremos es visualizar la configuración que vamos a grabar (la actual),
podemos ejecutar la orden write terminal, que la volcará en pantalla; esto representa la
configuración que se está ejecutando en estos momentos, cuyo resultado puede ser
diferente del proporcionado por sh conf (este último muestra la configuración que
hemos cargado al arrancar).

Configuración de terminal

Para reconfigurar el número de líneas de nuestra terminal de conexión, tanto en modo


privilegiado como en modo usuario, podemos usar la orden pager, que recibe como
parámetro el número de líneas deseado:

dixie> show pager


pager lines 24
dixie> pager 30
dixie> show page
pager lines 30
dixie>

Para configurar el número de columnas de nuestra consola podemos utilizar el comando


terminal; si esta orden recibe como parámetro la palabra monitor, habilita la impresión
de mensajes de syslog en nuestra pantalla, mientras que si recibe como parámetro la
palabra width modifica el número de columnas. De nuevo, para ver la configuración
actual utilizaremos la orden show:

dixie# show terminal

Width = 80, monitor


dixie# terminal width 90
dixie# show terminal

Width = 90, monitor


dixie#

Información del sistema


Las órdenes que nos permiten obtener información del estado actual del PIX comienzan
por la palabra `show'; algunas de ellas son las siguientes:
show processes
Muestra los procesos que se están ejecutando en el cortafuegos.

show version
Muestra información genérica sobre el firewall, como la versión del software instalado en
el PIX, el uptime del sistema, ciertos parámetros hardware, licencias, etc. Este es un
ejemplo de dicha información:
dixie(config)# show version

Cisco Secure PIX Firewall Version 5.1(2)


Compiled on Tue 16-May-00 16:09 by bhochuli
Finesse Bios V3.3

dixie up 140 days 0 hours

Hardware: SE440BX2, 128 MB RAM, CPU Pentium II 349 MHz


Flash AT29C040A @ 0x300, 2MB
BIOS Flash AM28F256 @ 0xfffd8000, 32KB

0: ethernet0: address is 0090.279b.c9d2, irq 11


1: ethernet1: address is 0090.279b.c848, irq 10
2: ethernet2: address is 0090.279b.c759, irq 15
3: ethernet3: address is 0090.279b.c84c, irq 9

Licensed connections: 65536

Serial Number: 18018531 (0x112f0e3)


Activation Key: 0xfe1f8896 0xe1fcb1e2 0x3400545b 0x8f392616
dixie(config)#
show interface

Muestra información detallada sobre cada uno de los interfaces de red del firewall, de
forma muy parecida al ifconfig de Unix.

show conn
Muestra las conexiones activas a través del cortafuegos.
show history
Muestra las últimas órdenes ejecutadas en línea de comandos, de una forma similar al
histórico que casi todos los shells de Unix incorporan; la interfaz del PIX es muy similar a
la de bash: Control-W borra una palabra, Control-E va al final de línea, Control-B al
principio, Control-R realiza búsquedas, los cursores recorren el histórico de órdenes, etc.

show flashfs
Muestra información sobre el sistema de ficheros empotrado en la memoria flash de la
máquina.

show clock
Muestra la fecha y hora del sistema; podemos modificar esta información mediante la
orden clock:
pixie(config)# sh clock
01:38:34 Jun 11 2001
pixie(config)# clock set 03:30:00 Jun 11 2001
pixie(config)# sh clock
03:30:02 Jun 11 2001
pixie(config)#

show configure
Muestra la configuración cargada al arrancar el cortafuegos (no tiene por qué ser la que
se está ejecutando en estos momentos; esta se puede ver con wr t). Es el contenido de
la memoria no volátil.

show failover
Muestra el estado del subsistema de tolerancia a fallos.

show who
Muestra las conexiones establecidas vía telnet con el cortafuegos.

El sistema de log remoto


El PIX Firewall registra los eventos que se producen en la máquina en un sistema de log
que podemos visualizar en el propio cortafuegos mediante la orden sh log. También
podemos enviar los registros a un sistema Unix que escuche peticiones de syslog remoto,
indicando la interfaz por la que se van a enviar los registros y la dirección del sistema
remoto mediante logging host:

pixie(config)# logging host inside 192.168.63.22


pixie(config)#

En el sistema donde deseemos enviar los registros, el demonio syslogd ha de estar


escuchando peticiones remotas (opción `-r' del programa), y en los cortafuegos
intermedios ha de estar habilitado el tráfico desde el PIX al puerto 514 (UDP) de la
máquina Unix.
Por defecto, PIX registra eventos más relacionados con el estado del failover que con la
seguridad de los sistemas y los posibles ataques que pueden sufrir. Esto genera una gran
cantidad de mensajes que pueden hacer crecer al fichero de log de una forma
considerable con entradas de este tipo:
Jun 6 09:46:37 192.168.63.156 %PIX-1-103003: (Primary) Other firewall
network interface 0 failed.
Jun 6 09:46:49 192.168.63.156 %PIX-1-103005: (Primary) Other firewall
reporting failure.
Jun 6 09:46:49 192.168.63.156 %PIX-1-105004: (Primary) Monitoring on
interface 1 normal
Jun 6 09:51:04 192.168.63.156 %PIX-1-105009: (Primary) Testing on interface
0 Passed

Para evitar registrar estos mensajes, en el cortafuegos podemos ejecutar la orden no


logging message, que recibe como parámetro el número de mensaje que no queremos
guardar; por ejemplo, si queremos evitar el registro de la alerta PIX-1-103003,
ejecutaremos:

pixie(config)# no logging message 103003


pixie(config)#
Si queremos lo contrario, volver a registrar el mensaje en el sistema remoto,
ejecutaremos la misma orden pero sin el `no' delante, o bien clear logging disabled, que
habilita el registro de todos los mensajes.
pixie(config)# logging message 103003
pixie(config)#

Podemos ver los mensajes que no estamos registrando mediante el comando sh logging
disabled:

pixie(config)# sh logging disabled


no logging message 105008
no logging message 105009
no logging message 103003
no logging message 103004
no logging message 103005
pixie(config)#
A nosotros nos va a interesar más registrar eventos registrados con entradas y salidas al
cortafuegos, y también con tráfico negado en el mismo. Para ello, podemos ver la facility
y la severity de los mensajes de log en el sistema Unix; la facility es siempre PIX,
mientras que la severity es el número siguiente en el código de mensaje registrado (de 1
a 7); por ejemplo, un mensaje con un código como PIX-6-307002 corresponde a una
facility PIX y a una severity 6.

Podemos configurar nuestro syslog.conf para registrar los eventos provenientes del PIX
(para Unix, con severity local4) en diferentes ficheros; lo más cómodo será registrar
todos los eventos (ejecutando logging trap debugging) con una facility 20 (logging
facility 20), y luego denegar mensajes determinados - relativos al failover mediante no
logging message.
Failover
El sistema de alta disponibilidad implantado por PIX permite utilizar una unidad
secundaria que tomará el control de las conexiones en caso de que la primaria falle;
ambas unidades estarán conectadas por un cable serie (un RS-232 modificado) que
transmite a 9600 baudios, y contínuamente se intercambian mensajes `hello' para que
ambas puedan conocer el estado de la otra unidad. Si dos de estos mensajes
consecutivos - se envían a intervalos de 15 segundos - no son recibidos en un
determinado tiempo, entra en juego el failover para comprobar cual de las dos unidades
ha fallado y transferir el control a la otra. Entonces cada unidad cambia de estado: la
nueva unidad activa asume las direcciones IP y MAC de la anterior y comienza a aceptar
tráfico, y la que antes era la activa ahora asume los parámetros de la que no lo era; el
resto de elementos de la red no ve ningún cambio en los dispositivos, por lo que no
existen cambios o timeouts en las tablas ARP.

Si queremos saber el estado del failover (por ejemplo para ver cuál es la unidad activa
en un determinado momento) hemos de ejecutar la orden sh failover:

pixie(config)# sh failover
Failover On
Cable status: Normal
Reconnect timeout 0:00:00
This host: Primary - Active
Active time: 386520 (sec)
Interface failover (192.168.87.209): Normal
Interface dmz1 (192.168.63.156): Normal
Interface outside (172.17.1.1): Normal
Interface inside (172.17.2.1): Normal
Other host: Secondary - Standby
Active time: 405 (sec)
Interface failover (192.168.87.210): Normal
Interface dmz1 (192.168.63.157): Normal
Interface outside (172.17.1.2): Normal
Interface inside (172.17.2.2): Normal

Stateful Failover Logical Update Statistics


Link : failover
Stateful Obj xmit xerr rcv rerr
General 53081 0 50149 0
sys cmd 52067 0 50146 0
up time 0 0 0 0
xlate 9 0 0 0
tcp conn 1005 0 3 0
udp conn 0 0 0 0
ARP tbl 0 0 0 0
RIP Tbl 0 0 0 0

Logical Update Queue Information


Cur Max Total
Recv Q: 0 1 50149
Xmit Q: 0 3 53081
pixie(config)#

En el resultado de la orden anterior vemos que la unidad principal está funcionando


normalmente, mientras que la secundaria está en standby; esto será lo habitual si no
entra en juego el failover o incluso si entra y la unidad principal se recupera, ya que en
ese caso se hace un rebalanceo. Si en lugar de que todas las interfaces estén en estado
normal aparecieran errores temporales de escasa duración, no hay ningún problema, ya
que esto suele significar que el cortafuegos está testeando la alta disponibilidad y la
conectividad de las interfaces.

El failover es casi transparente a la administración de la máquina, en el sentido de que la


configuración sólo se realiza en la unidad activa en cada momento, y automáticamente
se transfiere a la que está en standby; además, como hemos dicho, cuando entra la alta
disponibilidad las unidades intercambian sus direcciones IP, por lo que el acceso vía
telnet a la máquina se realiza contra la misma dirección que durante el funcionamiento
normal de los equipos. Incluso si trabajamos con stateful failover, las unidades
mantienen la información de estado de cada conexión, por lo que en caso de switchover
ninguna de ellas se pierde; en caso contrario, las conexiones activas son eliminadas y el
cliente debe reestablecerlas.

Con la orden failover podemos habilitar el failover, y con no failover deshabilitarlo:

pixie(config)# no failover
pixie(config)# sh failover
Failover Off
Cable status: Normal
Reconnect timeout 0:00:00
pixie(config)#

Las órdenes anteriores también admiten argumentos; si indicamos `link' podemos definir
la interfaz de stateful failover, por la que ambas unidades intercambiarán información.
Con `ip address' podemos configurar una dirección de failover para cada interfaz de la
unidad secundaria, y con el parámetro `active' forzamos a una unidad determinada
ponerse como activa (o en standby, si ejecutamos no failover active). Como siempre,
podemos teclear el signo `?' para obtener ayuda desde línea de comandos:

pixie(config)# failover ?
usage: [no] failover [active]
failover ip address <if_name> <ip_address>
failover timeout <hh:mm:ss>
failover reset
failover link <if_name>
pixie(config)# failover