lunes 20 de noviembre de 2006

[LINUX] Instalacición/configuración de SNMP

SNMP (Simple Network Management Protocol) es un protocolo para monitorización y gestión remota de máquinas. Su uso está muy extendido sobre con herramientas como HP Openview o Nagios. Vamos a especificar aquí su instalación y configuración con una seguridad mínima:

En Debian instalamos el paquete snmpd de Servidor SNMP con el comando:
apt-get install snmpd


A continuación, editar el fichero /etc/snmp/snmpd.conf y en la zona de la comunidad poner lo siguiente:

####
# First, map the community name (COMMUNITY) into a security name
# (local and mynetwork, depending on where the request is coming
# from):
# sec.name source community
#com2sec paranoid default public
#com2sec readonly default public
#com2sec readwrite default private
com2sec local 127.0.0.1
com2sec miredlocal
com2sec miredlocal


Donde >comunidad< es el nombre de comunidad que hace de clave para todos los equipos de la plataforma, por lo que es importante quitar public y private al ser las generales. es la red de los equipos que usamos para monitorizar, y es la red de la plataforma.

Después ir a la sección para mapear los nombres de seguridad en los nombres de grupos

####
# Second, map the security names into group names:

# sec.model sec.name
#group MyROSystem v1 paranoid
#group MyROSystem v2c paranoid
#group MyROSystem usm paranoid
#group MyROGroup v1 readonly
#group MyROGroup v2c readonly
#group MyROGroup usm readonly
#group MyRWGroup v1 readwrite
#group MyRWGroup v2c readwrite
#group MyRWGroup usm readwrite
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
group MyROGroup v1 miredlocal
group MyROGroup v2c miredlocal
group MyROGroup usm miredlocal



En realidad valdria con v2c que es la versión a utilizar de snmp.
Tras editar el fichero, es necesario reiniciar el servicio mediante /etc/init.d/snmpd restart


Si se quieren instalar herramientas de SNMP como snmpwalk., snmpget o snmpset es necesario instalar el paquete snmp mediante el comando:
apt-get install snmp

La manera más fácil de comprobar una petición snmp es:
snmpwalk -v2c -c

donde es la comunidad configurada en el /etc/snmpd.conf
y la ip de la maquina a consultar.

[CISCO] Comandos básicos de routers/switchs

Los comandos más básicos:

- Conexión al router: telnet [IP]
- Para entrar en modo supervisión (requiere contraseña. Necesario para la mayoría de los comandos show): enable
- Para ver parámetros de los comandos show: show ?
- Para deshabilitar un comando: no [comando]
- Ver toda la configuración funcionando: show run
- Ver toda la configuración en memoria no volatil: show start
- Borrar la configuración en memoria: erase start
- Borrar la configuración en disco: erase nvram
- Guardar la configuración en memoria al disco: copy run start
- Para salir de directorios/conexión: exit
- Para ver el estado de los interfaces: show interface [interface]
- Ver otros dispositivos Cisco vecinos: show cdp neighbors detail

Para ver el estado:

- Versión de IOS: show version
- Utilización CPU: show processes
- Utilización Memoria: show mem
- Estado del SNMP: show snmp
Nota: si aparece SNMP agent not enable comprobar en la configuración si existen las líneas:
snmp-server community public RO
snmp-server community private RW
snmp-server enable traps snmp authentication
Con las comunidades apropiadas
- Estado de Flash (disco total, usado, nombre de fichero) : show flash
Nota: si el disco esta lleno comprobar que ficheros eliminar. Con show version se nos muestra cual es el fichero de imagen que carga al arrancar y ese fichero NO ha de ser eliminado bajo ningún concepto. Para borrar un fichero de la flash: delete flash:[fichero] Para ver un fichero de la flash: more flash:[fichero]
- Estado de los controladores (tarjetas): show controllers
- Estado Interfaces: show interfaces status
Nota: Según el estado de los interfaces podemos determinar los siguiente:
* Interface is up, line protocol is up - Funciona correctamente.
* Interface is down, line protocol is down - Fallo de Hardware o de Cableado
* Interface is up, line protocol is down - Fallo de configuración
* Interface is up, line protocol is up (loop) - Problema de loop.
* Interface is administratively down, line protocol is down - Comprobar si se ha hecho shutdown del interface o la configuración de dirección IP del interface (ej. Ip duplicada).
- Trafico en un interface: show interface [interface]
- Tabla de Enrutamiento: show ip route
Nota:
Si apareciera vacío, comprobar configuración ip y también comprobar si por cdp descubrimos dispositivos vecinos
- Ver que router está activo (HRSP): show standby
Nota: Si quisiéramos que otro router fuera activo, habría que cambiarle la prioridad (por defecto es 100) con el comando: standby 2 priority 120 y luego hacer standby 2 preempt
Nota: Para poder hacer ping hacia el exterior, es necesario hacerlo modificando la ip de origen para ello ejecutar el comando ping y en los campos Target Ip Address introducir el valor de la ip de destino y en el campo Extended commands escribimos y para meter los comandos avanzados de ping y asi en Source address or interface poner la ip de origen o interface. En el resto de parámetros que se nos ofrecen, hay pulsar [Enter] para aceptar el valor por defecto.
- Ver otros dispositivos Cisco vecinos: show cdp neighbors detail
- Ver estadísticas de tráfico IP por protocolos: show ip traffic

jueves 9 de noviembre de 2006

[LINUX] Truco con los runlevel

Para cambiar los runlevel :

O bien se hace a mano el link desde /etc/init.d/aplicacion hacia /etc/rc2.d/SNUMaplicacion

O se ejecuta: update-rc.d nagios defaults (debian)

(Gracias a Oscar)

[LINUX] Intercambio de claves publicas entre maquinas por SSH

La intención es poder hacer uso de ssh sin necesidad de utilizar contraseñas lo que es util para scripts o procesos automaticos que no requieran de operación humana. Es necesario que ambas máquinas (cliente y servidor) tengan creado el usuario con el que se va a conectar, aunque no es necesario que tengan la misma contraseña.

1.- Generar la pareja de claves publicas de la maquina que va a acceder
Para ello nos situamos en la maquina que va a acceder (cliente) y nos autenticamos con el usuario con el que vamos a conectarnos remotamente.
Ejecutamos el comando:

ssh-keygen -t rsa

Mostrará algo parecido a esto:

Generating public/private rsa key pair. Enter file in which to save the key (/home/mi_usuario/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mi_usuario/.ssh/id_rsa.
Your public key has been saved in /home/mi_usuario/.ssh/id_rsa.pub.
The key fingerprint is: 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00mi_usuario@cliente


Donde mi_usuario es el nombre del usuario con el que nos vamos a conectar remotamente y cliente es el nombre de la maquina cliente en la que nos encontramos.

Dejamos los valores por defecto que pide, en especial hay que dejar passphrase vacio para que lo pregunte .

2.- Comprobamos la configuración de ssh en la maquina a la que se accede (servidor)
Comprobar el fichero /etc/ssh/sshd_config y ver que estan habilitadas las opciones:

Protocol 2
RSAAuthentication yes
PubkeyAuthentication yes

3.- Copiamos el fichero de clave publica generado en el paso 1 al servidor
Copiamos el fichero id_rsa.pub generado en el paso 1 a cualquier directorio del servidor, por ejemplo /tmp/

4.- Añadimos el contenido del fichero de clave publica a la lista de claves authorizadas
Tras autenticarnos en el servidor con el mismo usuario con el que se va a conectar la maquina cliente, nos vamos al directorio home del usuario y de ahí al directorio .ssh que cuelga de él. Una vez dentro ejecutar el comando siguiente:

cat >> ./authorized_keys

Donde es el fichero de clave publica de la maquina cliente que hemos copiado en el paso 3.

Es importante comprobar que en el fichero authorized_keys hay una linea por cada cliente a conectarse sin lineas en blanco ni partidas.

5.- Comprobaciones finales.
Comprobar que tanto el directorio .ssh como el fichero authenticated_keys tienen de propietario al usuario con el que vamos a conectarnos y que los permisos son correctos (0700 para el directorio y 0600 para el fichero).
Borrar tambien el fichero de clave publica copiado en el paso 3 puesto que ya no es necesario.

6.- Prueba
Desde la máquina cliente identificarse con el usuario con el que se han generado las claves y ejecutar el comando:

ssh

donde ip_servidor es la ip de la maquina destino a la que conectarse.

Si todo ha ido bien, habremos conectado con la maquina destino sin tener que introducir contraseña.

7.- Conexión bidireccional

En el caso de querer una conexion bidireccional tendremos que repetir los pasos desde la maquina servidor a la maquina cliente (generar claves en la maquina servidor, copiarlas a la maquina cliente, añadirlas al authorized_keys, etc.).

[LINUX] Hacer bonding con dos tarjetas Ethernet

Bonding es poder tener dos tarjetas de red en un mismo equipo con la misma ip. Los siguientes pasos permiten configurarlo en una Debian (en Windows suele ser el mismo fabricante quien proporciona la herramienta de Bonding o Teaming).

- Instalar los paquetes:
ifenslave
ifenslave-2.6

-
Editar el fichero /etc/network/interface y añadir lo puesto en negrita:
-
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto bond0
iface bond0 inet static
address
netmask
gateway
pre-up ifconfig eth0 up
pre-up ifconfig eth1 up
up ifenslave bond0 eth0 eth1
down ifenslave -d bond0 eth0 eth1
post-down ifconfig eth0 down
post-down ifconfig eth1 down
auto eth0
iface eth0 inet static
# address 192.168.xxx.xxx
# netmask 255.255.255.0
# gateway 192.168.xxx.xxx
auto eth1
iface eth1 inet static
# address 192.168.xxx.xxx
# netmask 255.255.255.0
# gateway 192.168.xxx.xxx

Es necesario comentar la info de red de los interface y sustituir , y por sus valores correctos


- Editar el fichero /etc/modules y añadir lo puesto en negrita:

# /etc/modules: kernel modules to load at boot time.
#
# This file should contain the names of kernel modules that are
# to be loaded at boot time, one per line. Comments begin with
# a "#", and everything on the line after them are ignored.

ide-cd
ide-generic
sd_mod
tg3
bonding

- Editar el fichero /etc/modules.conf y añadir al final lo puesto en negrita:

alias bond0 bonding
options bond0 miimon=100

- Reiniciar la máquina para que coja los cambios

[LINUX] Instalación de un servidor NTP

- Introducción

NTP es un protocolo para sincronizar diferentes maquinas por red. Es necesario utilizar NTP en el cluster para sincronizar los diferentes componentes.
La máquina que servirá como servidor ntp será un servidor que pueda acceder a direcciones publicas de Internet. A está máquina se la llamara en este tutorial Servidor NTP.

- Instalación de Servidor NTP.

Es necesario instalar el paquete ntp-server mediante el comando

apt-get install ntp-server

Los paquetes asociados a ntp-server necesarios para instalar el servidor son:

- ntp
- ntp-simple

También es interesante, aunque no necesario instalar el paquete ntpdate.

- Configuración del Servidor NTP.

El fichero de configuración que regular el funcionamiento de ntp es /etc/ntp.conf

Hay que hacer los siguientes cambios:
- Descomentar la línea:

logfile /var/log/ntpd

De esa forma se utiliza ese fichero para logs de ntp en vez de /etc/syslog donde saca los mensajes por defecto.

- Modificar la línea:

server pool.ntp.org

por

server es.pool.ntp.org

Con ello, el pool de servidores de ntp al que conectarse es el español.

- Descomentar la línea:

restrict default kod notrap nomodify nopeer noquery

Con ello hace que por defecto comparta la hora con todo el mundo pero no permita modificarla.

- Comentar la línea

#restrict 127.0.0.1 nomodify

Al no ser necesario permitir la consulta desde la maquina local

- Añadir la línea:

restrict mask nomodify notrap

Indicando la subred donde esta montado el cluster con su mascara de red. Así permitimos que todas las maquinas del cluster puedan consultar con el Servidor NTP pero no modificar la hora.
Con esto quedaría configurado el servidor ntp y solo habría que lanzarlo en el Servidor NTP mediante el comando /etc/init.d/ntp-server start pero antes podría ser interesante sincronizarle con el pool de servidores mediante el comando ntpdate. Lo hacemos ahora, porque NO es posible ejecutar ntpdate en la misma maquina donde este corriendo un servidor ntp al utilizar el mismo puerto.

Ejecutamos el comando:

ntpdate es.pool.ntp.org

Y comprobamos si la hora se ha actualizado.

Una vez lanzado el ntp-server podemos ver en el fichero /var/log/ntpd los diferentes mensajes incluido el de sincronización con algún servidor del pool que será del tipo:

synchronized to XXX.XXX.XXX.XXX, stratum Y

donde XXX.XXX.XXX.XXX será la ip del servidor contactado e Y el nivel del stratum.

Nota: NTP tarda un tiempo en actualizarse y sincronizarse por lo que pueden llegar a pasar varios minutos (en torno a los cinco) antes de sincronizarse y poder servir la hora a los otros equipos de la red.

- Instalación de ntpdate en las demás máquinas del cluster
En el resto de maquinas del cluster tenemos que instalar el paquete ntpdate con el comando:

apt-get install ntpdate

Una vez ejecutado, podemos actualizar la hora de la maquina con el Servidor NTP en cualquier momento con el comando:

ntpdate xxx.xxx.xxx.xxx

donde xxx.xxx.xxx.xxx es la ip del Servidor NTP una vez sepamos que el servidor ntp de esta maquina esta sincronizado.

- Hacer que la sincronización periódica.

Para que las máquinas del cluster actualicen periódicamente su hora con adminserver se puede crear una entrada en el crontab mediante el comando:

crontab –e

y añadir la línea:

* 1 * * * /usr/sbin/ntpdate xxx.xxx.xxx.xxx

Donde xxx.xxx.xxx.xxx es la ip del Servidor NTP. Se puede cambiar la periodicidad de una hora a lo deseado.

- Instalación de NTP en dispositivos Cisco
Para poder instalar NTP en dispositivos cisco hay que ejecutar los siguientes comandos:

equipo#configure terminal
equipo(config)#clock timezone GMT +1
equipo(config)#clock summer-time GMT+1 recurring
equipo(config)#ntp server
equipo(config)#exit

Donde es la ip privada del Servidor NTP. Con ello hemos configurado la zona horaria, ajuste horario y el servidor ntp Server con el que sincronizarse

Para comprobar el estado del ntp se pueden utilizar los comandos:

show ntp status
show ntp association

- Reglas de firewall
Para poder comunicarse con los servidores ntp es necesario abrir el puerto UDP 123 en ambas direcciones entre la ip pública del adminserver y la ip del pool de servidores ntp.


- Troubleshooting
- En caso de salir el error: no suitable server al ejecutar el comando ntpdate. Le repetimos en modo debug mediante el comando ntpdate –du

Pueden ocurrir varias cosas:
• Si solo aparecen transmit y ningún receive puede ser que no este arrancado el servicio ntp en el servidor o que haya algún firewall intermedio que impide recibir la respuesta del servidor.
• Aparecen transmit y receive y el mensaje:

stratum 16, precision -xx, leap 11…

Eso quiere decir que el servidor puede estar funcionando pero aun no esta sincronizado con otros servidores ntp por lo que su valor de stratum es demasiado alto para ser fiable. Recuerda que no puedes utilizar ntpdate en la misma maquina servidor si estas corriendo el servicio de ntp-server.

- En el servidor también pueden ejecutarse el comando ntpq –p para ver como esta funcionando el servidor y su sincronización. Veremos el listado de servidores con los que esta sincronizado y su stratum.

- Utilizando la herramienta ntptrace también podemos ver su conectividad con el y el stratum.

[LINUX] SSL en Tomcat4

Pasos para la instalación de SSL en Tomcat4 con una o dos consolas.

1. - Añadir reglas de NAT al router y firewall para el puerto asignado. En este ejemplo sera 8888 para una consola y 8887 en el caso de usar una segunda consola

2.- En la maquina donde esté instalado el Tomcat4 y el Apache realizar los siguientes pasos:

1- Modificar el fichero /etc/tomcat4/web.xml y añadir antes del lo siguiente para obligar a funcionar solo bajo servidor seguro:

<security-constraint>
<web-resource-collection>
<web-resource-name>Security Page</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

3.- Modificar el fichero /etc/tomcat4/server.xml en la seccion del puerto 8888 (o 8180 que es el puerto por defecto de Tomcat) y añadir el parametro redirectPort="443" quedando tal y como sigue:

<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 80 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8888" redirectPort="443" minProcessors="5" maxProcessors="75"
enableLookups="true" acceptCount="10" debug="0"
connectionTimeout="20000" useURIValidationHack="false" />

Importante: poner el puerto asociado a esta consola, por ejemplo 8888

Añadir a continuacion de este parrafo la definición de un conector para el puerto 8443 tal y como sigue:

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8443" minProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="10" debug="0" scheme="https" secure="true" connectionTimeout="20000" useURIValidationHack="false" disableUploadTimeout="true">
<Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" keystoreFile="/usr/share/tomcat4/almacen.key" keystorePass="contraseña" clientAuth="false" protocol="TLS"/>
</Connector>

Importante: en keystoreFile poner el fichero de almacen de claves y en keystorePass la contraseña para acceder

En el caso de utilizar otra consola (por ejemplo otra aplicación) definimos otro conector en otro puerto por ejemplo 8887 y que redireccione a 442.

<!-- Define a non-SSL Coyote HTTP/1.1 Connector on port 80 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8887" redirectPort="442" minProcessors="5" maxProcessors="75"
enableLookups="true" acceptCount="10" debug="0"
connectionTimeout="20000" useURIValidationHack="false" />


Incluimos ahora el conector para SSL en el puerto 442 apuntando a otro almacen de claves y su contraseña para acceder a el:

<!-- Define a SSL Coyote HTTP/1.1 Connector on port 8442 -->
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" port="8442" minProcessors="5" maxProcessors="75" enableLookups="true" acceptCount="10" debug="0" scheme="https" secure="true" connectionTimeout="20000" useURIValidationHack="false" disableUploadTimeout="true">
<Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" keystoreFile="/usr/share/tomcat4/almacen2.key" keystorePass="contraseña2" clientAuth="false" protocol="TLS"/>
</Connector>


En concreto hay que tener en cuenta los parametros keystoreFile donde debe indicarse el fichero de almacen de claves de certificados y la contraseña keystorePass que es la clave para poder acceder a ese almacen de certificados. Tenlos en cuenta a la hora de generar las claves privadas y el certificado.

4- Crea dos reglas en iptables para redireccionar puertos (del 80 al 8180, y 443 al 8443) con los siguientes comandos:

iptables -t nat -I PREROUTING --src 0/0 --dst ip_consola -p tcp --dport 80 -j REDIRECT --to-ports 8888
iptables -t nat -I PREROUTING --src 0/0 --dst ip_consola -p tcp --dport 443 -j REDIRECT --to-ports 8443

Y en el caso de utilizar otra consola:

iptables -t nat -I PREROUTING --src 0/0 --dst ip_consola -p tcp --dport 442 -j REDIRECT --to-ports 8442

Estas reglas deben cargarse cada vez que se reinicia el servidor por lo que se puede utilizar de un script como el que se adjunta para iniciarse al arrancarse la maquina.

5.- Crear las claves privadas del servidor mediante el comando:

/usr/lib/j2sdk1.4-sun/jre/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore /usr/share/tomcat4/almacen.key

Preguntará contraseña del almacen de certificados, introducir la misma contraseña que se ha indicado en el server.xml (contraseña).
Despues preguntará los siguientes datos:
Nombre y Apellidos (CN) - introducir la url de la pagina web sin http:// y en caso de haber varias url de entrada utilizar *
Nombre de unidad de organización (OU)
Nombre de organización (O)
Ciudad (L)
Provincia (ST)
Codigo Pais (C)

Tras confirmar la introducción de datos, pulsar Intro para asociar la misma contraseña que la del almacen de claves.

6.- Generar la petición de certificado mediante el comando:

/usr/lib/j2sdk1.4-sun/jre/bin/keytool -certreq -alias tomcat -keyalg RSA -file /usr/share/tomcat4/peticioncertificado.csr -keystore /usr/share/tomcat4/almacen.key

7.- Ese csr se lo facilitamos a la CA para que genere el certificado incluyendo las lineas de BEGIN y END.

Si queremos autofirmarlo utilizando nuestra propia CA hacer lo siguiente:
- Ir a la maquina donde esta instalado el servicio de CA (en nuestro caso un Windows2K3)
- Introducir en el navegador la url del gestor de Servicios de Certificate Server: http:/localhost:8080/certsrv/
- Pinchamos en "Enviar una solicitud de certificados usando un archivo cifrado de base64 CMC o PKCS #10 o una solicitud de renovación usando un archivo cifrado de base64 PKCS #7."
- Seleccionamos "Servidor Web" en la plantilla del Certificado y en el campo "Cifrado de Base64 Solicitud de certificado" pegamos el contenido del fichero .csr incluidos los campos -----BEGIN NEW CERTIFICATE REQUEST----- y -----END NEW CERTIFICATE REQUEST-----. El campo atributos adicionales le dejamos en blanco. Pulsamos el boton de Enviar. Asi habremos creado la peticion de certificado con el numero que nos indica.
- Nos vamos a la herramienta de Entidad Emisora de Certificados dentro de Herramientas Administrativas.
- Dentro de la carpeta Peticiones Pendientes estara la peticion con el numero mostrado antes. Pinchamos en el ella con el boton derecho y elegimos "Todas las tareas", "Emitir".
- Una vez emitido el certificado, procedemos a descargarlo, para ello nos vamos de nuevo a http:/localhost:8080/certsrv/
- Pinchamos en "Ver el estado de una solicitud de certificado pendiente". Seleccionamos base64 y procedemos a descargar el certificado y la cadena de certificados grabandolos como certificadoweb.cer y cadenacertificado.p7b respectivamente
- Tambien nos hace falta el certificado raiz de la entidad emisora. Para ello nos vamos a: http:/localhost:8080/certsrv/ y seleccionamos: "Descargar certificado de Entidad emisora, cadena de certificados o lista de revocación de certificados"
- Seleccionamos la Entidad Emisora, asi como nos mostrara el metodo de codificacion (elegir base64) y pinchamos en descargar certificado de entidad emisora como root.cer

Al tener dos claves publicas, pues necesitamos dos almacenes de claves. Por lo que repetimos el proceso con el otro servidor

8.- Teniendo ya el certificado raiz del emisor, la cadena de certificados y el certificado de servidor web los llevamos a la maquina donde se encuentra el tomcat. En caso de facilitarnoslos en correo electronico,copiarlo en el bloc de notas incluyendo las lineas BEGIN y END y grabarlo con extension .cer. Desde Windows podemos abrir el certificado para ver el contenido antes de instalarlo. Procedemos a importarlo en el almacen de claves:

/usr/lib/j2sdk1.4-sun/jre/bin/keytool -import -trustcacerts -keystore /usr/share/tomcat4/almacen.key -alias root - file root.cer


/usr/lib/j2sdk1.4-sun/jre/bin/keytool -import -trustcacerts -keystore /usr/share/tomcat4/almacen.key -alias tomcat -file certificadoweb.p7b


9.- Reiniciar el servicio de Tomcat4 mediante el comando: /etc/init.d/tomcat restart

10.- Comprobar que al acceder a la consola por el puerto 80 redirecciona en el navegador a https://ipconsola/