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).
Otras órdenes útiles
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áquinaMediante 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íatelnet 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