Un blog mas

Bitácora de vuelo

>SNMP o Simple Network Management Protocol, es un protoclo de capa aplicacion que facilita el intercambio de información de administración entre dispositivos de red.

El mismo se puede definir como un protocolo que a manera de servicio nos permite recuperar informacion remota acerca de los componentes conectados a la red tales como computadoras, servidores, impresoras, routers, etc.

Para tener en cuenta…

Se puede definir el funcionamiento de SNMP a manera de un modelo cliente servidor, ya que para que funcione necesitamos dos aplicaciones basicas snmpd y snmp, en las cuales se puede definir la primera como el servidor y la otra como el cliente.

Aunque podamos relacionar el funcionamiento de esta manera cabe destacar que ambas aplicaciones deben estar instaladas en los equipos que componen la red, es decir tanto en el servidor u equipo de donde voy a monitorear los componentes de la red como tambien dichos componentes.

Instalación

Para lograr que SNMP se ejecute de manera adecuada en nuestra red tenemos que instalar snmp y snmpd, abriendo una consola y escribiendo :

root@server1:# sudo apt-get install snmp snmpd

Configuracion

Una vez instalado, procederemos a configurar snmpd.

root@server1:# cd /etc/snmp/
root@server1:# mv snmpd.conf snmpd-backup.conf
root@server1:# echo «» > snmpd.conf

Lo que haremos es trabajar con una copia vacia del archivo de configuracion snmpd.conf.

root@server1:# mcedit snmpd.conf

Luego lo editamos y escribimos:

# Listas de control de acceso (ACL)
## sec.name source community (alias clave de acceso)
com2sec local 127.0.0.1/32 local
com2sec miRed 192.168.1.0/24 public

recommunity miRed

#Se asigna ACL al grupo de lectura escritura
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local

#Se asigna ACL al grupo de solo lectura
group MyROGroup v1 miRed
group MyROGroup v2c miRed
group MyROGroup usm miRed

# Ramas MIB que se permiten ver
## name incl/excl subtree mask(optional)
view all included .1 80

# Establece permisos de lectura y escritura
## group context sec.model sec.level prefix read write notif
access MyROGroup «» any noauth exact all none none
access MyRWGroup «» any noauth exact all all all

# Informacion de Contacto del Sistema
syslocation Servidor X en CUALQUIER PARTE
syscontact Encargado (hablame@gmail.com)

Ya hemos configurado:


  • Listas de control de acceso: Se deben crear las listas de control de acceso (ACL o Access Control List) , las cuales sirven para definir lo que tendrá acceso hacia el servicio snmpd. A una de estas listas se le otorgará permiso de acceso de lectura y escritura, para lo que sea necesario en relación con administración, y a la otra de solo lectura. Por razones de seguridad solo la interfaz 127.0.0.1 estará en la lista de lectura escritura. Se otorgará permiso de acceso de solo lectura a una red o bien a una dirección IP en la otra lista de control de acceso.
  • Definición de grupos: Se crean al menos dos grupos: MyRWGroup y MyROGroup. El primero será un grupo al que se asignarán más adelante permisos de lectura escritura y el segundo será un grupo al que posteriormente se asignarán permisos de solo lectura. Por cada grupo se asignan tres líneas que especifican el tipo de acceso que se permitirá en un momento dado a un grupo en particular. Es decir, MyRWGroup se asocia a local y MyROGroup a miRed.
  • Ramas permitidas: Se especifican las ramas que se van a permitir ver a través del servicio.
  • Asignación de permisos a los grupos: Se debe especificar que permisos tendrán los dos grupos, MyROGroupMyRWGroup. Son de especial interés las últimas columnas.
  • Parámetros de carácter informativo: Se definen dos parámetros de carácter informativo para que cuando utilicen aplicaciones cliente como MRTG se incluya algo de información acerca de que sistema se está accediendo.
Luego simplemente guardamos el archivo. Ahora tenemos que configurar el servicio snmp para que se accedido desde cualquier parte de miRed por lo cual, tendremos que editar el archivo /etc/default/snmpd y buscar la linea:


SNMPDOPTS=’-Lsd -Lf /dev/null -u snmp -I -smux -p /var/run/snmpd.pid’

y la reemplazamos por


SNMPDOPTS=’-C -c /etc/snmp/snmpd.conf -p /var/run/snmpd.pid’


Guardamos el archivo y luego reiniciamos el servicio snmpd tecleando

root@server1:# /etc/init.d/snmpd restart


Pruebas

Una vez hemos terminado la parte de configuracion debemos proceder a hacer unas pruebas minimas para saber si nuestro SNMP se esta ejecutando adecuadamente en nuestra red. Para esto abrimos una consola y tecleamos

root@server1:# snmpwalk 127.0.0.1 -c local -v2c system

y luego tecleamos

root@server1:# snmpwalk 192.168.1.131 -c public -v2c system

Si en ambos casos la respuesta es una maraña de informacion, podemos dar por sentado que el servicio se ejecutó adecuadamente a nivel local (es decir sobre la máquina donde lo ejecutamos) y a nivel de red.

>Una vez mas nos tocó analizar algunas herramientas e implementar la que nos resulte mejor en relación costo/beneficio (donde costo significa esfuerzo y no $$).
Compitiendo con AMANDA (Advanced Maryland Automatic Network Disk Archiver) y Bacula, el
BackUpPC fue el elegido por su fácil instalación y configuración, y sobre todo la nula necesidad de instalar clientes en las máquinas a backupear.

BackupPC

BackupPC es una herramienta empresarial de alto rendimiento para realizar copias de seguridad de PCs y portátiles Linux y Windows a servidores de disco. BackupPC es altamente configurable y fácil de instalar y mantener. Hace backups de multiples máquinas vía la generación de un Tar, Samba o rSync. También puede hacer backups en cinta.

Ventajas

A pesar de que comparte algunas características con otros productos, tiene otras que son útiles en infraestructuras heterogéneas:

  1. Soporta clientes en casi todas las plataformas (Windows, Linux, Unix, MacOS).

  2. El servidor puede funcionar en hardware genérico y con diversos sistemas operativos.

  3. No se requiere instalar ningún programa en los equipos a respaldar.

  4. Utiliza diversos mecanismos para la comunicación (Samba, Rsync).

  5. Realiza respaldos totales e incrementales, con diferentes niveles de compresión para cada equipo.

  6. Utiliza discos duros en arreglo o cintas como dispositivos de destino.

  7. Permite a cada usuario que revise y administre sus trabajos de respaldo.

  8. Ofrece una interfaz Web donde se administran y restauran los trabajos de respaldo.

  9. Soporta creación de archivos en dispositivos magnéticos, que permiten trasportar los respaldos fuera de las instalaciones.

  10. No requiere la adquisición de licencias y el número de usuarios soportados depende más bien de la red y la capacidad de almacenamiento.

Esta es una solución muy completa, diseñada para entornos corporativos, pero que requiere de conocimientos sobre OpenSSH, Samba y Rsync, además de nociones de redes y del manejo de paquetes de Linux, de acuerdo a la distribución que el lector seleccione.

Instalación

La instalación la realizamos sobre un Ubuntu Linux Server 8.04 mediante el comando apt-get (no mas comentarios!).

Lo único luego de su instalación es generar una clave con htpasswd para el usuario backuppc que es el usuario generado por default.

Dentro de /etc/backuppc tenemos los archivos de configuración que se conforman de un config.pl con los valores mas genericos y dentro de esta carpeta se iran agregando los archivos nombre-host.pl con la configuración específica de cada una de las computadoras que se resguardará.

Una de las bondades del BackUpPc es el entorno web que trae para administrarlo, de manera que se puede configurar todo desde un browser en http://localhost/backuppc .

Una verificación que se debe hacer antes de agregar un host es verificar que el servidor resuelva el nombre, ya sea vía DNS o mediante el archivo hosts dentro de /etc.

El método que se eligió para trabajar en rSync, para ello es necesario tener generadas y configuradas las claves publicas y privadas en el servidor de backUp y en los clientes a sincronizar.


//
// Genero la clave en el servidor y la copio
//

root@server1:# sudo -u backuppc touch /var/lib/backuppc/.ssh/known_hosts
root@server1:# sudo -u backuppc ssh-keygen -t rsa
root@server1:# sudo -u backuppc cp /var/lib/backuppc/.ssh/id_rsa.
pub /var/lib/backuppc/.ssh/BackupPC_id_rsa.pub
root@server1:# scp /var/lib/backuppc/.ssh/
BackupPC_id_rsa.pub client1:/home/pepe/.ssh/

//
// Agrego la clave publica en el authorized_keys2 del cliente
//
root@
client1:# cat /home/pepe/.ssh/BackupPC_ id_rsa.pub >> authorized_keys2


Los parámetros de configuración son entendibles, básicamente se configura el método a utilizar ($Conf{XferMethod}) y el directorio a resguardar ($Conf{RsyncShareName})


No recuerdo mayor complicación en la configuración de esta herramienta, solo hay que tener cuidado con el usuario que se utiliza para generar las claves públicas y privadas (en este caso backuppc).

Ahora disponemos de una interface sencilla de administración vía web de nustro sistema de BackUp donde se pueden hacer copias bajo demanda y en un tiempo establecido, de manera incremental y en poco tiempo gracias al uso del rSync.


Suspendiendo o eliminando un cliente

Para suspender la ejecución del backup en un cliente se modifica el valor de $conf{FullPeriod} en el archivo de configuración del cliente. Los valores que se pueden utilizar son -1 y -2:

  • -1 : Con este valor se suspenden los backups regulares del cliente aunque queda disponible la opción de ejecutarlo manualmente desde la interface web.
  • -2 : Con dicho valor se bloquea la posibilidad del backup ya sea desde su ejecución automática o de manera manual desde la interface web.

Ambos estados permiten explorar los backups anteriores.

Para eliminar completamente los backups de un cliente se debe borrar el archivo de configuración (host.pl) y remover el __TOPDIR__/pc/$host del disco. Es necesario recargar la aplicación con el comando /etc/init.d/backuppc reload .

Resguardando el pool de datos

Para hacer una copia del directorio de datos del sistema de backup principalmente es necesario disponer de un file system tan grande como el directorio __TOPDIR__. La copia se puede realizar con el comando dd (copias a nivel de bloques), el comando cp con el parámeto -a o con rsync -H.
Si lo que se desea es reponer los datos resguardados a partir de estos últimos se utilizará el comando BackupPC_tar_PCCopy provisto por el BackupPc.

__INSTALLDIR__/bin/BackupPC_tarPCCopy __TOPDIR__/pc | tar xvPf –

Asegurando el sistema de BackUp (permitRootLogin=no)

Una vez configurado el sistema, una de las cosa que no me gustó de la instalación básica es que se debía modificar él acceso vía ssh al cliente. Para que dicho acceso vuelva restringirse hay que combinar algunas herramientas.

En primer lugar instalaremos en la máquina cliente de BackUp (client1) un shell restringido (rssh) al que solo se le permitirá realizar un rsync. Este shell estará disponible para el usuario backuppc, el cuál crearemos luego. También habilitaremos el rsync dentro de la lista de servicios accesibles en nuestro shell:

root@client1:# apt-get install rssh
root@client1:# adduser backuppc –shell /usr/bin/rssh –disabled-password
root@client1:# vi /etc/rssh.conf

y descomentamos la siguiente línea

#allowscp
#allowsftp
#allowcvs
#allowrdist
allowrsync

El siguiente paso es volver a la normalidad el servicio de ssh evitando login de root a nuestro cliente, para lo cuál modificaremos el archivo /etc/ssh/sshd_config :

root@client1:# vi /etc/ssh/sshd_config

y modificamos la siguiente línea:

PermitRootLogin no

El último paso para que nuestro nuevo usuario backuppc pueda ejecutar el rsync (eso u solo eso), debemos agregar una ack en el archivo /etc/sudoers. Tener en cuenta que este archivo se puede modificar con cualquier editor de textos pero es conveniente utilizar el comando visudo para que, al guardar, verifique una correcta sintaxis y así evitar problemas.

root@client1:# visudo

y la línea a agregar será:

backuppc ALL=NOPASSWD: /usr/bin/rsync –server –sender *

Esto indica que el comando rsync podrá ser utilizado vía un sudo desde cualquier máquina (ALL) y sin password (NOPASSWD) por el usuario backuppc.

Del lado del cliente solo resta agregar la clave pública del usuario backuppc del servidor de backups en el archivo authorized_keys (o
authorized_keys2 según el caso) dentro de /home/backuppc/.ssh/ . Si dicha clave no estaba creada aún les repetimos los pasos:

root@server1:# sudo -u backuppc ssh-keygen -t rsa
root@server1:# scp /var/lib/backuppc/.ssh/id_rsa.pub client1:/home/backuppc/.ssh/authorized_keys2

El último paso es cambiar la configuración del backuppc modificando el archivo client1.pl desde un editor de texto o vía el administrador web para que backuppc sea el encargado de ejecutar el comando en lugar de root. Para ello se modifcará las líneas:

#$Conf{RsyncClientCmd} = ‘$sshPath -q -x -l root $host $rsyncPath $argList+’;
#$Conf{RsyncClientRestoreCmd} = ‘$sshPath -q -x -l root $host $rsyncPath $argList+’;

$Conf{RsyncClientCmd} = ‘$sshPath -q -x -l backuppc $host sudo $rsyncPath $argList+’;
$Conf{RsyncClientRestoreCmd} = ‘$sshPath -q -x -l backuppc $host
sudo $rsyncPath $argList+’;

Links:



>A veces por la necesidad de ejecutar en forma remota algún comando de manera automática, o simplemente porque estamos cansados de escribir las claves de acceso a cada uno de los servidores que administramos, nos vimos forzados en cambiar el método de autentificación corriente de login de nuestros servidores de Ssh por uno con un juego de llaves publicas/privadas.

Suponiendo que ya se encuentra instalados los servicios, lo primero que debemos hacer es generar las claves dentro del cliente, el cual se quiere conectar de manera remota al servidor Ssh. El comando a utilizar se encuentra dentro del paquete de ssh que a esta altura ya debe estar instalado.

pablo@sshCliente # ssh-keygen -t rsa

El mismo genera un juego de llaves publico (id_rsa.pub) y privada (id_rsa) que están copiadas por default en la carpeta /home/pablo/.ssh, del tipo el tipo RSA con una longitud de 2048 bits, y que serán válidas para nuestra máquina y nuestro usuario (en este caso pablo@sshCliente).

La clave pública deberá ser copiada al servidor de la siguiente manera:

pablo@sshCliente# scp /home/pablo/.ssh/id_rsa.pub pablo@sshServidor:/home/pablo/

y en el servidor:

pablo@sshServidor# cat /home/pablo/id_rsa.pub >> /home/pablo/.ssh/authorized_keys
pablo@sshServidor# rm /home/pablo/id_rsa.pub

Hay que verificar que los permisos del archivo authorized_keys esten correctos (0600).

Ahora se pueden ejecutar comandos de manera remota sin necesidad de escribir una clave:

pablo@sshCliente# ssh pablo@sshServidor ‘comando a ejecutar en servidor’


Links:

>

Hace casi tres años, nos encomendaron la tarea de desarrollar de manera rápida unos cuantos sitios web de diversas índoles. Para ello analisamos varias herramientas y una de las mas completas resultó ser el sistema de manejador de contenidos (o CMS) Joomla!.

Instalación:

De forma casi inmediata descargamos el .zip de la págnia oficial descargas y lo descomprimimos dentro de la carpeta pública de nuestro servidor web.

Un requisito fundamentales para no tener problemas durante la instalación, administración y el posterior manteniminto es contar con la famosa arquitectura LAMP (Linux, Apache, MySQL y Php).

La instalación del Joomla! se realiza mediante un acceso de la url desde un explorador web. El mismo nos redireccionará a /instalation desde donde tendremos que completar una serie de datos básicos como el nombre del sitio, la url registrada, ubicación, usuario y password de la base de datos, password del usuario administrador del site, y si queremos instalar un paquete de datos de ejemplo.

Luego de finalizar se nos exigirá eliminar la carpeta /instalation y la próxima vez que accedamos al site podremos ver el Joomla! en marcha.

Administración:

La configuración y administración del Joomla! se realiza integramente desde el explorador web vía la url www.misitioweb.com/administrator . Una vez logueado con el usuario «admin» y la password seteada en el paso anterior, vemos un menú superior desplegable que describimos muy por arriba de la siguiente forma:

  • Site: Configuración Global del CMS, usuarios, templates, lenguajes y recursos multimedia.
  • Menu: ABM de grupos y elementos de cada menú del site.
  • Content: Todo lo referente al contenido estático, categorias, secciones y elementos del sitio web.
  • Components: Administración de los componentes que conforman la funcionalidad del sitio.
  • Modules: Configuración de los módulos, parte visual de cada componente.
  • Installers: Apartado de instalación y desinstalación de los templates, idiomas, componentes, extensiones y módulos del Joomla!.
Los nombres de cada menú y sobre todo su orden varian según la versión de Joomla! utilizada (1.x o 1.5x).

Extensiones:
Por medio de las extensiones (componentes o módulos) que se pueden agregar al Joomla!, el sitio puede nomar funcionalidades especiales que no están incluidas en la instalación básica. Por ejemplo existen componentes para agregar foros, chats, comentarios a las notas, manejo de comunidades de usuarios, administración de notas por niveles o grupos de usuarios, etc.
Como se instalan? Fácil, fácil, fácil. Buscamos la extension que queremos implementar, la mayoría están registradas y categorizadas en http://extensions.joomla.org. Recordemos que un componente es una funcionalidad que realizará nuestro sitio web y un módulo la parte activa que se visualizará en el mismo. Una vez que ubicamos la extensión, descargamos el paquete, generalmente comprimido en un .zip. La única diferencia para su instalación es que en la versión 1.x de Joomla! se diferencian los módulos de los componentes dentro del menú, en cambio en las versiones 1.5x las instalaciones se realizan desde un único acceso en el menú. En definitiva el Joomla! subirá el .zip desde nuestra ubicación local y procederá a instalarlo. Si todo va bien nos devolverá un success!.

Extensiones Utilizadas:

  • AkoComment: Comentarios en notas publicadas.
  • OpenSef: Urls amigables y generación de sitemaps de google.
  • zOOm Media Gallery: Para administrar galerias de imágenes.
  • Juga: Administrador permiso de acceso a elementos organizados por grupos.
  • Joomulus: Nube de tags desarrollado con flash.
  • Blocklist: Bloqueo de acceso por IP
Alguas recomendaciones:

La extensión AkoComment es utilizada para permitir el uso de comentarios en cada una de las noticias del sitio. Se recomienda elevar el tiempo entre comentarios (timeout) y activar el captcha.

El componente OpenSef es un componente que tiene dos funciones fundamentales: una es traducir las url a un nombre amigable (transforma el titulo de la nota en la url de la misma), y además genera de manera casi automática el sitemap del sitio para que google lo indexe. Este componente tiene un bug importantisimo que se hace notar cuando el sitio comprende muchas noticias. Su performance explota por dos motivos. La primera es una falla en el código fuente que fué corregida después de su última versión. Solo hay que reemplazar el código de abajo:

en el archivo sef.class.php

function lookupOutgoing(  $site_id, $url ) {
global $opensef_aliases, $database;

$returnaliases = array();
/*
if ($site_id == null) $site_id = -1;
if (count($opensef_aliases) > 0) {
foreach($opensef_aliases as $aliases){
if ( $aliases->internal == $url ) {
$returnaliases[] = $aliases;
}
}
}
*/
if (!count($returnaliases))
{
$query = "SELECT * FROM #__opensef_sef
WHERE published = '1'
AND valid = '1'
AND (direction IS NULL OR direction = '' OR
direction = 'o')
AND internal='$url'
ORDER BY site_id DESC, published DESC,
valid DESC, LENGTH(direction) DESC
LIMIT 1";


$database->setQuery( $query );
if ($database->loadResult())
{
$aliases = $database->loadObjectList();
foreach($aliases as $k=>$val)
{
$returnaliases[] = $val;
}
}
}

if (is_array( $returnaliases ) && count( $returnaliases ))
{

$returnaliases = xclCastObjectList( $returnaliases,
'JosOpenSEFAlias' );

return $returnaliases[0];
}
$null = null;
return $null;
}


y en el sef.php

if ($sefSite->id == null) $sefSite->id = -1;
$query = "SELECT * FROM #__opensef_sef
WHERE published = '1' AND valid = '1'
AND (direction IS NULL OR direction = ''
OR direction = 'o') AND (site_id IS NULL
($sefSite->id ? ' OR site_id = ' .
$sefSite->id : '') . ')
AND (external='{$_SERVER['REQUEST_URI']}'
ORDER BY site_id DESC, published DESC,
valid DESC, LENGTH(direction) DESC";
$database->setQuery( $query );
if ($database->loadResult()) {
$opensef_aliases = $database->loadObjectList();
}

Además hay que agregar indices a los campos «internal» y «external» de la tabla «jos_opensef_sef».

Acá les dejo un par de scripts para ejecutar en la base de datos (si comparten notas con editores usuarios de Mac) ya que el «omitir caracter» del openSef no funciona del todo bien con estas comillas.

UPDATE `mos_content` SET `title`=REPLACE(`title`,'“','"')
WHERE `title` like "%“%"

UPDATE `mos_content` SET `title`=REPLACE(`title`,'”','"')
WHERE `title` like "%”%"

Links:

Sitios basados en Joomla:
Stop SOPA