Primero
Creamos un script llamado crear_usuario.vbs
strContainer = WScript.Arguments.Unnamed(0)
strName = WScript.Arguments.Unnamed(1)
strPasswd = WScript.Arguments.Unnamed(2)
strLogonScript= WScript.Arguments.Unnamed(3)
strGroup = WScript.Arguments.Unnamed(4)
'Conectarse
'***********************************************
Set objRootDSE = GetObject("LDAP://rootDSE")
If strContainer = "" Then
Set objContainer = GetObject("LDAP://" & objRootDSE.Get("defaultNamingContext"))
Else
Set objContainer = GetObject("LDAP://" & strContainer & "," & objRootDSE.Get("defaultNamingContext"))
End If
'Crear el usuario
'***********************************************
Set objUser = objContainer.Create("user", "cn=" & strName)
objUser.Put "sAMAccountName", strName
objUser.SetInfo
'Poner la clave de usuario
'-----------------------------------------------
Set objUser = GetObject("LDAP://cn=" & strName & "," & strContainer & "," & objRootDSE.Get("defaultNamingContext"))
objUser.SetPassword(strPassword)
objUser.scriptPath = strLogonScript
objUser.SetInfo
Wscript.Quit
Segundo
Llamamos al script para que cree los usuarios.
cscript crear_usuario.vbs "OU=admins,OU=IT" adminit clave123 script-usuarios.bat it-admins
cscript crear_usuario.vbs "OU=users,OU=IT" userit1 clave123 script-usuarios.bat it-users
Cajón desastre para administradores de redes y sistemas informáticos. Este blog es para encontrar aquellas cosas que haces una vez y luego te cuesta repetirlas.
miércoles, 13 de marzo de 2013
Script para crear un grupo de usuarios que contenga todos los usuarios de una OU
Primero
creamos un script llamado crear_grupos.bat
@echo off
color 0a
cls
SET strContainer=%1
SET strMidominio=%2
SET GRUPO_SAMID=%3
SET UNIDAD_ORGANIZATIVA=%strContainer%,%strMidominio%
SET GRUPO=cn=%GRUPO_SAMID%,%UNIDAD_ORGANIZATIVA%
echo Create group alumnos
dsadd group %GRUPO% -samid %GRUPO_SAMID%
echo Add all member of OU to group
dsquery user %UNIDAD_ORGANIZATIVA% | dsmod group %GRUPO% -addmbr
echo --------------------------------------------
dsquery user %UNIDAD_ORGANIZATIVA%
echo --------------------------------------------
dsquery user %GRUPO%
dsquery group %GRUPO% | dsget group -members
Segundo
llamamos al script para crear los grupos de usuarios.
rem Crear un grupo de usuarios que contenga todos los usuarios de una OU
call crear_grupos.bat "OU=admins,OU=IT" "dc=midominio,dc=local" it-admins
rem Crear un grupo de usuarios que contenga todos los usuarios de una OU
call crear_grupos.bat "OU=users,OU=IT" "dc=midominio,dc=local" it-users
Optimizar windows 7
He encontrado este script para optimizar maquinas virtuales windows 7 pero no recuerdo donde, de todas formas para que no se olvide aquí lo dejo.
rem Use this script for desktops _without_ View Persona Management implemented.
rem Setting Default HKCU values by loading and modifying the default user registry hive
reg load "hku\temp" "%USERPROFILE%\..\Default User\NTUSER.DAT"
reg ADD "hku\temp\Software\Policies\Microsoft\Windows\Control Panel\Desktop" /v SCRNSAVE.EXE /d "%windir%\system32\scrnsave.scr" /f
reg ADD "hku\temp\Software\Policies\Microsoft\Windows\Control Panel\Desktop" /v ScreenSaveTimeOut /d "600" /f
reg ADD "hku\temp\Software\Policies\Microsoft\Windows\Control Panel\Desktop" /v ScreenSaverIsSecure /d "1" /f
reg ADD "hku\temp\Software\Microsoft\Windows\CurrentVersion\Policies\System" /v Wallpaper /d " " /f
reg ADD "hku\temp\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Cache" /v Persistent /t REG_DWORD /d 0x0 /f
reg ADD "hku\temp\Software\Microsoft\Feeds" /v SyncStatus /t REG_DWORD /d 0x0 /f
reg ADD "hku\temp\Software\Microsoft\WIndows\CurrentVersion\Policies\Explorer" /v HideSCAHealth /t REG_DWORD /d 0x1 /f
reg unload "hku\temp"
rem Making modifications to the HKLM hive
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Internet Explorer\Main" /v DisableFirstRunCustomize /t REG_DWORD /d 0x1 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\PrefetchParameters" /v EnableSuperfetch /t REG_DWORD /d 0x0 /f
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v NoAutoUpdate /t REG_DWORD /d 0x1 /f
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows NT\SystemRestore" /v DisableSR /t REG_DWORD /d 0x1 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Disk" /v TimeOutValue /t REG_DWORD /d 200 /f
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Image" /v Revision /t REG_SZ /d 1.0 /f
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Image" /v Virtual /t REG_SZ /d Yes /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application" /v MaxSize /t REG_DWORD /d 0x100000 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Application" /v Retention /t REG_DWORD /d 0x0 /f
reg ADD "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Network\NewNetworkWindowOff" /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\System" /v MaxSize /t
REG_DWORD /d 0x100000 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\System" /v Retention /t REG_DWORD /d 0x0 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security" /v MaxSize /t REG_DWORD /d 0x100000 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog\Security" /v Retention /t REG_DWORD /d 0x0 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 0x0 /f
reg ADD "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer" /v NoRecycleFiles /t REG_DWORD /d 0x1 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0x0 /f
reg ADD "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" /v UserAuthentication /t REG_DWORD /d 0x0 /f
reg ADD "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\policies\system" /v EnableLUA /t REG_DWORD /d 0x0 /f
reg Add "HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\Sideshow" /v Disabled /t REG_DWORD /d 0x1 /f
rem Using Powershell to perform Windows Services modifications
Powershell Set-Service 'BDESVC' -startuptype "disabled"
Powershell Set-Service 'wbengine' -startuptype "disabled"
Powershell Set-Service 'DPS' -startuptype "disabled"
Powershell Set-Service 'UxSms' -startuptype "disabled"
Powershell Set-Service 'Defragsvc' -startuptype "disabled"
Powershell Set-Service 'HomeGroupListener' -startuptype "disabled"
Powershell Set-Service 'HomeGroupProvider' -startuptype "disabled"
Powershell Set-Service 'iphlpsvc' -startuptype "disabled"
Powershell Set-Service 'MSiSCSI' -startuptype "disabled"
Powershell Set-Service 'swprv' -startuptype "disabled"
Powershell Set-Service 'CscService' -startuptype "disabled"
Powershell Set-Service 'SstpSvc' -startuptype "disabled"
Powershell Set-Service 'wscsvc' -startuptype "disabled"
Powershell Set-Service 'SSDPSRV' -startuptype "disabled"
Powershell Set-Service 'SysMain' -startuptype "disabled"
Powershell Set-Service 'TabletInputService' -startuptype "disabled"
Powershell Set-Service 'Themes' -startuptype "disabled"
Powershell Set-Service 'upnphost' -startuptype "disabled"
Powershell Set-Service 'VSS' -startuptype "disabled"
Powershell Set-Service 'SDRSVC' -startuptype "disabled"
Powershell Set-Service 'WinDefend' -startuptype "disabled"
Powershell Set-Service 'WerSvc' -startuptype "disabled"
Powershell Set-Service 'MpsSvc' -startuptype "disabled"
Powershell Set-Service 'ehRecvr' -startuptype "disabled"
Powershell Set-Service 'ehSched' -startuptype "disabled"
Powershell Set-Service 'WSearch' -startuptype "disabled"
Powershell Set-Service 'wuauserv' -startuptype "disabled"
Powershell Set-Service 'Wlansvc' -startuptype "disabled"
Powershell Set-Service 'WwanSvc' -startuptype "disabled"
rem Making miscellaneous modifications
bcdedit /set BOOTUX disabled
vssadmin delete shadows /All /Quiet
Powershell disable-computerrestore -drive c:\
netsh advfirewall set allprofiles state off
powercfg -H OFF
net stop "sysmain"
fsutil behavior set DisableLastAccess 1
rem Making modifications to Scheduled Tasks
schtasks /change /TN "\Microsoft\Windows\Defrag\ScheduledDefrag" /Disable
schtasks /change /TN "\Microsoft\Windows\SystemRestore\SR" /Disable
schtasks /change /TN "\Microsoft\Windows\Registry\RegIdleBackup" /Disable
schtasks /change /TN "\Microsoft\Windows Defender\MPIdleTask" /Disable
schtasks /change /TN "\Microsoft\Windows Defender\MP Scheduled Scan" /Disable
schtasks /change /TN "\Microsoft\Windows\Maintenance\WinSAT" /Disable
Script para cambiar la clave de un usuario del directorio activo
Un sencillo script en visual basic script para realizar el cambio de contraseñas automatizado
Option Explicit
Dim objOU, objUser, objRootDSE
Dim strContainer, strDNSDomain, strPassword, strName
Set objRootDSE = GetObject("LDAP://RootDSE")
strDNSDomain = objRootDSE.Get("DefaultNamingContext")
' -----------------------------------------------'
strContainer = WScript.Arguments.Unnamed(1)
strName = WScript.Arguments.Unnamed(0)
strPassword = WScript.Arguments.Unnamed(2)
If strContainer = "" Then
Set objUser = GetObject("LDAP://cn=" & strName & "," & _
objRootDSE.Get("defaultNamingContext"))
Else
Set objUser = GetObject("LDAP://cn=" & strName & "," & strContainer & "," & _
objRootDSE.Get("defaultNamingContext"))
End If
objUser.SetPassword(strPassword)
objUser.SetInfo
WScript.Quit
Podemos utilizar el script para cambiar una clave o hacer otro script que llame al primero para cambiar claves a mas de un usuario
cscript resetear_clave.vbs usuario01 "OU=SUB-CARPETA,OU=CARPETA" NuevaClave
cscript resetear_clave.vbs usuario02 "OU=SUB-CARPETA,OU=CARPETA" NuevaClave
cscript resetear_clave.vbs usuario03 "OU=SUB-CARPETA,OU=CARPETA" NuevaClave
·
·
·
Etiquetas:
ad,
directorio activo,
dominio,
microsoft,
script,
server,
visual basic script,
windows
Ubicación:
Donostia-San Sebastián, Guipúzcoa, España
martes, 12 de marzo de 2013
Backup programado de los equipos CISCO usando TFTP
A veces se nos puede olvidar realizar el típico write mem o copy running-config startup-config y ya no te digo nada si tienes que copiar la configuración al servidor tftp (que si no me acuerdo de la IP, ...).
Por eso puedes tomar la decisión de que todos los días se guarde la configuración actual "copy runnig-config startup-config" y además esta configuración la copiamos a un servidor TFTP.
La variable $h indica el nombre del host (router, switch, ...). Recomiento aprovechar para crear carpetas en el servidor TFTP, una para cada host.
La variable $t indica la fecha y hora a la que se realiza la copia de la configuración.
De esta forma obligamos a que se guarde una copia de la configuracion cada vez que realizamos write mem.
Programamos una tarea que guarda la configuración que se esta ejecutando:
Programamos la ejecución de la tarea a las 0h todos los días:
En principio todas las configuraciones son texto y no deberían ocupar mucho pero si programamos una copia al día son 365 configuraciones al año. Tened cuidado con que no se llene el servidor TFTP, pues dejaría de hacer copias de las configuraciones.
Bibliografía:
http://www.cisco.com/en/US/products/sw/iosswrel/ps1835/products_tech_note09186a008020260d.shtml#ab
http://www.certificationkits.com/cisco-certification/Cisco-CCNP-TSHOOT-Complex-Network-Maintenance.html
Por eso puedes tomar la decisión de que todos los días se guarde la configuración actual "copy runnig-config startup-config" y además esta configuración la copiamos a un servidor TFTP.
La variable $h indica el nombre del host (router, switch, ...). Recomiento aprovechar para crear carpetas en el servidor TFTP, una para cada host.
La variable $t indica la fecha y hora a la que se realiza la copia de la configuración.
De esta forma obligamos a que se guarde una copia de la configuracion cada vez que realizamos write mem.
archive
path tftp://IP_SERVIDOR_TFTP/$h/$h-$t
write-memory
Programamos una tarea que guarda la configuración que se esta ejecutando:
kron policy-list backup
cli write memoryProgramamos la ejecución de la tarea a las 0h todos los días:
kron occurrence backup at 0:00 recurring
policy-list backup
En principio todas las configuraciones son texto y no deberían ocupar mucho pero si programamos una copia al día son 365 configuraciones al año. Tened cuidado con que no se llene el servidor TFTP, pues dejaría de hacer copias de las configuraciones.
Bibliografía:
http://www.cisco.com/en/US/products/sw/iosswrel/ps1835/products_tech_note09186a008020260d.shtml#ab
http://www.certificationkits.com/cisco-certification/Cisco-CCNP-TSHOOT-Complex-Network-Maintenance.html
Ubicación:
Donostia-San Sebastián, Guipúzcoa, España
jueves, 7 de marzo de 2013
Servidor TFTP en Ubuntu con permisos de escritura
Mucho hardware de red todavía utiliza TFTP para subir y bajar configuraciones y para copiar firmware, etc.
Existen pequeños programas para windows que como administrador de sistemas te sacan del apuro cundo los necesitas, pero en este articulo trataremos de explicar como configurar un servidor TFTP en Ubuntu.
Elegimos tftpd-hpa por que no tiene limitacion de 32MB (atftpd la tiene) y por que permite que utilicemos los comandos put y get.
Instalamos el cliente tftp, y los demonios tftpd-hpa y xinetd
apt-get install tftp tftpd-hpa xinetd
Una vez instalado configuramos los siguiente archivos de la siguiente manera:
root@hostname:~# nano /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
#la opción --create es la que permite #que se puedan crear archivos cuando realizamos put
TFTP_OPTIONS="--secure --create"
root@hostname:~#nano /etc/inetd.conf
#FIJAROS QUE ESTA TODO COMENTADO
# /etc/inetd.conf: see inetd(8) for further informations.
#
# Internet superserver configuration database
#
#
# Lines starting with "#:LABEL:" or "#<off>#" should not
# be changed unless you know what you are doing!
#
# If you want to disable an entry so it isn't touched during
# package updates just comment it out with a single '#' character.
#
# Packages should modify this file by using update-inetd(8)
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
#:INTERNAL: Internal services
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
#daytime stream tcp nowait root internal
#time stream tcp nowait root internal
#:STANDARD: These are standard services.
#:BSD: Shell, login, exec and talk are BSD protocols.
#:MAIL: Mail, news and uucp services.
#:INFO: Info services
#:BOOT: TFTP service is provided primarily for booting. Most sites
# run this only on machines acting as "boot servers."
#:RPC: RPC based services
#:HAM-RADIO: amateur-radio services
#:OTHER: Other services
Por si acaso alguno tiene iniciativa recordar que NO hay que crear un archivo dentro de la ruta /etc/xinet.d/tftpd o algo parecido
A continuación creamos los directorios necesarios y asignamos los permisos adecuados.
root@hostname:~# sudo mkdir /var/lib/tftpboot
root@hostname:~# sudo chmod -vfR 777 /var/lib/tftpboot
root@hostname:~# sudo chown -vfR tftp:tftp /var/lib/tftpboot
Reiniciamos los servicios
root@hostname:~# sudo service xinetd stop;sudo service tftpd-hpa stop;sudo service tftpd-hpa start;sudo service xinetd start
Comprobamos que se esta ejecutando el servicio TFTPD
root@hostname:~# ps -aux | grep tftpd
root 29285 0.0 0.0 15088 332 ? Ss 20:07 0:00 /usr/sbin/in.tftpd --listen --user tftp --address 0.0.0.0:69 --secure --create /var/lib/tftpboot
root@hostname:~# netstat -nap | grep tftp
udp 0 0 0.0.0.0:69 0.0.0.0:* 29285/in.tftpd
unix 2 [ ] DGRAM 98078 29285/in.tftpd
Ahora podemos probar el tftp con el cliente
root@hostname:~# tftp 127.0.0.1
tftp> ?
Commands may be abbreviated. Commands are:
connect connect to remote tftp
mode set file transfer mode
put send file
get receive file
quit exit tftp
verbose toggle verbose mode
trace toggle packet tracing
status show current status
binary set mode to octet
ascii set mode to netascii
rexmt set per-packet retransmission timeout
timeout set total retransmission timeout
? print help information
tftp> get prueba1.txt
Received 9350 bytes in 0.0 seconds
tftp> put prueba2.txt
Sent 9350 bytes in 0.0 seconds
tftp> quit
Servidor FTP en Ubuntu con permisos de escritura
Instalamos los paquetes necesarios:
sudo apt-get install vsftpd
Des-habilitamos los usuarios que no nos interesa que accedan a través del protocolo FTP.
more /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth required pam_shells.so
nano /etc/ftpusers
# /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).
root
daemon
bin
sys
sync
games
man
lp
mail
news
uucp
nobody
Modificamos el archivo de configuración para permitir que los usuarios del sistema accedan y su máscara por defecto sea rwxrwxrwx
nano /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
syslog_enable=YES
connect_from_port_20=YES
ftpd_banner=Servidor FTP
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
local_umask=000
A veces me ha pasado que he tenido que eliminar la configuración PAM para vsftpd (Suele dar problemas, no se si es un bug)
rm /etc/pam.d/vsftpd
nano /etc/vsftpd.conf
#pam_service_name=vsftpd
Reiniciamos el demonio ftp y listo, ya tenemos funcionando un servidor FTP
service vsftpd restart
Mi recomendación para crear los usuarios y que todo funcione bien (permisos etc) es la siguiente:
Cuando creemos los usuarios tendremos que mantener la siguiente estructura.
dirFTP (r-xr-xr-x)
|__dirusuarioA (r-xr-xr-x)
|__dirconpermisosdeescritura(rwxrwxrwx)
|__dirusuarioB (r-xr-xr-x)
|__dirconpermisosdeescritura(rwxrwxrwx)
·
·
·
|__dir usuario Z (r-xr-xr-x)
|__dir con permisos de escritura(rwxrwxrwx)
El shell de los usuarios lo suelo poner a /usr/sbin/nologin por seguridad.
El directorio /home del usuario A sería /home/dirFTP/dirusuarioA
El usuario A cuando se conecta por FTP tiene que ver una única carpeta llamada dirconpermisosdeescritura y es en esta carpeta en la única que podrá subir archivos o crear carpetas etc.
ftp://usuario:clave123@ip_servidor_FTP/
sudo apt-get install vsftpd
Des-habilitamos los usuarios que no nos interesa que accedan a través del protocolo FTP.
more /etc/pam.d/vsftpd
# Standard behaviour for ftpd(8).
auth required pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed
# Note: vsftpd handles anonymous logins on its own. Do not enable pam_ftp.so.
# Standard pam includes
@include common-account
@include common-session
@include common-auth
auth required pam_shells.so
nano /etc/ftpusers
# /etc/ftpusers: list of users disallowed FTP access. See ftpusers(5).
root
daemon
bin
sys
sync
games
man
lp
news
uucp
nobody
Modificamos el archivo de configuración para permitir que los usuarios del sistema accedan y su máscara por defecto sea rwxrwxrwx
nano /etc/vsftpd.conf
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
syslog_enable=YES
connect_from_port_20=YES
ftpd_banner=Servidor FTP
chroot_local_user=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
rsa_cert_file=/etc/ssl/private/vsftpd.pem
local_umask=000
A veces me ha pasado que he tenido que eliminar la configuración PAM para vsftpd (Suele dar problemas, no se si es un bug)
rm /etc/pam.d/vsftpd
nano /etc/vsftpd.conf
#pam_service_name=vsftpd
Reiniciamos el demonio ftp y listo, ya tenemos funcionando un servidor FTP
service vsftpd restart
Mi recomendación para crear los usuarios y que todo funcione bien (permisos etc) es la siguiente:
Cuando creemos los usuarios tendremos que mantener la siguiente estructura.
dirFTP (r-xr-xr-x)
|__dirusuarioA (r-xr-xr-x)
|__dirconpermisosdeescritura(rwxrwxrwx)
|__dirusuarioB (r-xr-xr-x)
|__dirconpermisosdeescritura(rwxrwxrwx)
·
·
·
|__dir usuario Z (r-xr-xr-x)
|__dir con permisos de escritura(rwxrwxrwx)
El shell de los usuarios lo suelo poner a /usr/sbin/nologin por seguridad.
El directorio /home del usuario A sería /home/dirFTP/dirusuarioA
El usuario A cuando se conecta por FTP tiene que ver una única carpeta llamada dirconpermisosdeescritura y es en esta carpeta en la única que podrá subir archivos o crear carpetas etc.
ftp://usuario:clave123@ip_servidor_FTP/
Ubicación:
Hernani, Guipúzcoa, España
Plugin nagios para enviar notificaciones html por correo
Modificaciones del plugin nagios "notify-html-email" para enviar notificaciones html por correo.
He modificado el plugin para que aparezcan mis gráficas pnpnagios dentro del correo, castellanizarlo, etc.
Un ejemplo de como queda:
Hay que recordar que en ubuntu no viene instalado por defecto la libreria MIME lite Perl pero se puede instalar facilmente desde:
apt-get install libmime-lite-perl
El comando que hay que definir en nagios debería ser algo asi:
/usr/bin/perl $USER1$/notify-html-email $USER6$
$USER1$ es el directorio de plugins
$USER6$ es la url de acceso a nagios
estas variables se definen en el archivo /etc/nagios3/resources.cfg
Aquí dejo el script modificado
#!/usr/bin/perl
use strict;
use warnings;
use MIME::Lite;
use URI::Escape;
my $nagios_url = $ARGV[0] || die('You must pass the url to your nagios installation as the first argument');
my $color_red = '#FF8080';
my $color_green = '#80FF80';
my $color_yellow = '#FFFF80';
my $color_orange = '#FF9900';
my $color_even = '#C9C9C9';
my $color_odd = '#EAEAEA';
my %colors=(
'PROBLEM' => $color_red,
'RECOVERY' => $color_green,
'ACKNOWLEDGEMENT' => $color_yellow,
'CRITICAL' => $color_red,
'WARNING' => $color_yellow,
'OK' => $color_green,
'UNKNOWN' => $color_orange,
'UP' => $color_green,
'DOWN' => $color_red,
'UNREACHABLE' => $color_orange,
);
my %allowed_types = (
'PROBLEM' => 1,
'RECOVERY' => 1,
'ACKNOWLEDGEMENT' => 1
);
exit if !defined($allowed_types{$ENV{NAGIOS_NOTIFICATIONTYPE}});
my $type = $ENV{NAGIOS_SERVICEATTEMPT} ? 'service' : 'host';
my $font = 'helvetica, arial';
my $style_th_even = '"background-color: #c9c9c9; font-weight: bold; width: 130px;"';
my $style_th_odd = '"background-color: #eaeaea; font-weight: bold; width: 130px;"';
my $style_td_even = '"background-color: #c9c9c9;"';
my $style_td_odd = '"background-color: #eaeaea;"';
my $style_table = "\"background-color: #000000; font-family: consolas, verdana, arial; font-size: 12px;\"";
my $style_body = "\"background-color: #ffffff;\"";
my $style_state = sprintf('"background-color: %s"',
$type eq 'service'
? $colors{$ENV{NAGIOS_SERVICESTATE}}
: $colors{$ENV{NAGIOS_HOSTSTATE}}
);
my $subject = sprintf('[EMPRESA] %s [%s] ',
$type eq 'service' ? $ENV{NAGIOS_HOSTNAME} . ' - ' . $ENV{NAGIOS_SERVICEDESC} : $ENV{NAGIOS_HOSTNAME},
$type eq 'service' ? $ENV{NAGIOS_SERVICESTATE} : $ENV{NAGIOS_HOSTSTATE}
);
my $host_url = sprintf('%s/cgi-bin/status.cgi?navbarsearch=1&host=%s',
$nagios_url,
$ENV{NAGIOS_HOSTNAME}
);
my @rows;
my $notification_title;
if($type eq 'service') {
my $service_url = sprintf('%s/cgi-bin/extinfo.cgi?type=2&host=%s&service=%s',
$nagios_url,
$ENV{NAGIOS_HOSTNAME},
uri_escape($ENV{NAGIOS_SERVICEDESC})
);
my $service_perf_image_url = sprintf('%s/../../pnp4nagios/graph?host=%s&srv=%s',
$nagios_url,
$ENV{NAGIOS_HOSTNAME},
uri_escape($ENV{NAGIOS_SERVICEDESC})
);
$notification_title = sprintf('Notificacion de Servicio - %s (%s)',
$ENV{NAGIOS_SERVICESTATE},
$ENV{NAGIOS_SERVICESTATETYPE}
);
@rows = (
{
'title' => 'Estado:',
'data' => "$ENV{NAGIOS_SERVICESTATE} ($ENV{NAGIOS_SERVICESTATETYPE})",
'style' => $style_state,
},
{
'title' => 'Equipo:',
'data' => "<a href=\"$host_url\">$ENV{NAGIOS_HOSTNAME}</a> ($ENV{NAGIOS_HOSTALIAS}) $ENV{NAGIOS_HOSTGROUPNAME}",
},
{
'title' => 'Direccion IP:',
'data' => $ENV{NAGIOS_HOSTADDRESS},
},
{
'title' => 'Servicio:',
'data' => "<a href=\"$service_url\">$ENV{NAGIOS_SERVICEDESC}</a> ($ENV{NAGIOS_SERVICEDISPLAYNAME})",
},
{
'title' => 'Chequeo del Servicio',
'data' => "$ENV{NAGIOS_SERVICEOUTPUT}",
},
{
'title' => 'Momento del evento:',
'data' => $ENV{NAGIOS_SHORTDATETIME},
},
{
'title' => 'PNP4Nagios:',
'data' => "<a href=\"$service_perf_image_url\">Visualizar graficos</a>",
},
);
} else {
my $host_perf_image_url = sprintf('%s/../../pnp4nagios/graph?host=%s&srv=_HOST_',
$nagios_url,
$ENV{NAGIOS_HOSTNAME},
uri_escape($ENV{NAGIOS_SERVICEDESC})
);
$notification_title = sprintf('Notificacion de Equipo - %s (%s)',
$ENV{NAGIOS_HOSTSTATE},
$ENV{NAGIOS_HOSTSTATETYPE}
);
@rows = (
{
'title' => 'Estado:',
'data' => "$ENV{NAGIOS_HOSTSTATE} ($ENV{NAGIOS_HOSTSTATETYPE})",
'style' => $style_state,
},
{
'title' => 'Equipo:',
'data' => "<a href=\"$host_url\">$ENV{NAGIOS_HOSTNAME}</a> ($ENV{NAGIOS_HOSTALIAS}) $ENV{NAGIOS_HOSTGROUPNAME}",
},
{
'title' => 'Direccion IP:',
'data' => $ENV{NAGIOS_HOSTADDRESS},
},
{
'title' => 'Chequeo del equipo:',
'data' => $ENV{NAGIOS_HOSTOUTPUT},
},
{
'title' => 'PNP4Nagios:',
'data' => "<a href=\"$host_perf_image_url\">Visualizar graficos</a>",
},
);
}
if($ENV{NAGIOS_NOTIFICATIONTYPE} eq 'ACKNOWLEDGEMENT') {
push(@rows,
{
'title' => 'Reconocido por:',
'data' => $ENV{NAGIOS_NOTIFICATIONAUTHORALIAS},
}
);
push(@rows,
{
'title' => 'Comentario:',
'data' => $ENV{NAGIOS_NOTIFICATIONCOMMENT},
}
);
}
# Begin the email
my $body = "
<body style=$style_body>
<h2 style=\"text-align:center; font-family: verdana, arial; color: #203040\">Monitorizacion Nagios</h2>
<p style=\"text-align:center; font-family: verdana, arial; color: #404040\">$notification_title</p>
<table align=\"center\" border=\"0\" cellpadding=\"4\" cellspacing=\"2\" style=$style_table>";
# Add the rows to the email
for(my $i=0; $i<@rows; $i++) {
$body .= sprintf('<tr><th style=%s>%s</th><td style=%s>%s</td></tr>',
$i % 2 == 0 ? $style_th_even : $style_th_odd,
$rows[$i]->{'title'},
defined($rows[$i]->{'style'}) ? $rows[$i]->{'style'} : $i % 2 == 0 ? $style_td_even : $style_td_odd,
$rows[$i]->{'data'}
);
}
$body .= "</table><p style=\"text-align:center\"><img src=\"cid:lgNextel.png\" height=\"30px\"></body>";
my $msg = MIME::Lite->new(
To => $ENV{NAGIOS_CONTACTEMAIL},
Subject => $subject,
Type =>'multipart/related'
);
$msg->attach(Type => 'text/html', Data => $body);
$msg->attach(Type => 'image/png', Id => 'lgNextel.png', Path => '/var/www/img/lgNextel.png');
$msg->send();
Suscribirse a:
Entradas (Atom)