Archivo de la etiqueta: Script Skamasle

Respaldar bases de datos Mysql directamente a FTP ( Script )

Hoy he tenido que hacer un scritp que lo dejo aquí.

– Básicamente saca todas las bases de datos de mysql, las comprime y las envia al FTP que le asignes
– Es necesario por seguridad y simplemente comodidad tener creado un .my.cnf así se puede usar con root, admin, con cualquier usuario que se ejecute que tenga el .my.cnf creado y con eso es suficiente para conectar al mysql.

Aquí dejo el script que seguro a alguien le servirá:

#!/bin/bash
# Se distribuye sin ninguna garantia
# Autor Maks Skamasle
# Twitter @skamasle
bk_host=host
bk_ftp_user=
bk_ftp_pass=
bk_ftp_port=21
bk_ftp_path=/backup
log=~/tmp/bk.log
DATE=$(date)
# Mysql Connect
# We wait .my.cnf for connection this do it compatible whit any system easy
# More secure and not need your password here
if [ ! -d ~/tmp ];then
mkdir ~/tmp
fi
cd ~/tmp
databases=$(echo "show databases;" | mysql |grep -v performance_schema |grep -v information_schema |grep -v Database)
for bd in $databases
do
DATE=$(date)
echo "Respaldando $bd -- $DATE" >> $log
mysqldump $bd --ignore-table=$bd.wp_wfHoover --ignore-table=$bd.wp_wfNet404s --ignore-table=$bd.wp_wfVulnScanners > $bd.sql || rm -f $bd.sql
if [ -e $bd.sql ];then
echo "Comprimiendo $bd" >> $log
gzip $bd.sql
echo "Transfiriendo $bd" >> $log
/usr/bin/lftp -c "open -u $bk_ftp_user,$bk_ftp_pass ftp://$bk_host -p $bk_ftp_port; put -O $bk_ftp_path $bd.sql.gz " >> log
rm -f $bd.sql.gz
else
echo "BD $bd no se a podido respaldar -- $DATE " >> ~/MYSQLDUMP-ERROR.log
echo "Error al Respaldar $bd" >> $log
fi
done
exit 0

Exim IP Rotate – Script for cPanel

Bueno, algo que tenia que hacer, mucha gente lo anda pidiendo así que me a dado por hacer un script para rotar IPs.

Ya es funcional, pero estoy probando y buscando bugs.

Version 0.3
– Rota IPs,
– Dejar una lista de IPs en /root/ips o algún otro archivo ( una IP por linea )
– Hacer un cron con el tiempo que se quiera rotar la IP.

Requisitos
cPanel tiene que estar configurado para usar /etc/mailips y tiene que tener una IP configurada previamente en el formato:

*: 192.168.1.0

Acorde con la documentación

Descargar:

wget mirror.skamasle.com/scripts/sk-ip-rotate.sh

Dar permisos:

chmod +x sk-ip-rotate.sh

Crear Cron:

0 */5 * * * /root/sk-ip-rotate.sh

Mysql Monitor – Levantar MYSQL cuando se cae y enviar email si no inicia.

Dejo aquí uno de los últimos script, en este caso casi a pedido.

Función:
– Revisar si MYSQL esta online-
– En caso de que MYSQL esté caído levantarlo.
– Si esta caído y lo inicia manda las ultimas 30 lineas del log al email e informa de que esta off.
– En caso de no poder iniciar manda un email adicional para informar de que no pudo iniciar.

Versión: beta 0.1 funcional

Descargar:

wget mirror.skamasle.com/scripts/sk-mysql-monitor.sh

Editar lineas, 11, 12 y 13.

LOG='/var/lib/mysql/HOSTNAME.err'
EMAIL1='[email protected]'
EMAIL2='[email protected]'

Permisos:

chmod +x sk-mysql-monitor.sh

Cron:

*/2 * * * * /root/sk-mysql-monitor.sh

Para monitorizar otros servicios pueden ver sk-monitoring en este enlace.

Respaldar todas las bases de datos | Backup All Data Bases: Plesk, cPanel, Ispconfig, DirectAdmin

Hoy he comenzado a hacer una modificación del script de respaldo que hice hace algunos meses: SK- Server UP: Respaldar bases de datos y archivos

Es un script que he usado mucho y he visto que la opción de transferencia la uso poco y que aveces tengo inconvenientes por que tengo que buscar la clave de plesk o el ispconfig, así que he hecho unas modificaciones y he dejado el script modificado solo para respaldar bases de datos y para agilizar el proceso que detecte automáticamente la clave de plesk, cpanel e ispconfig.

Lo he probado en 3 servidores ( plesk, cpanel e ispconfig ( añadido soporte a DirectAdmin ) y funciona de maravilla, aunque, aún tengo pensado hacerle muchas mejoras, más que nada para agilizar el procesos, quiero hacer el script interactivo, que haya que descargarlo y ejecutarlo y sobre la marcha pregunte por el servidor o lo detecte de una vez, es fácil de hacer pero lleva su tiempo, por ahora dejo la beta 1 que es la que seguiré usando y espero que en los próximos días tenga un rato para hacer las mejoras y el script me ahorre mucho más tiempo… que básicamente es evitar editar el archivo siempre que lo use, pero ya funciona bien 🙂

Backup All Data Bases: Ispconfig, cPanel, DirectAdmin, Plesk

skdumpbd.sh

####

# 21 Dic 2014: añadido conteo de bases de datos.
# 5 Sep solucionados unos bugs en beta 0.2, se a añadido segundos y minutos a los nombres para poder crear varios backups seguidos, quitando la restricción de 1 backup diario, si se hacía más de un backup pedía borrar o sobre escribir el anterior.
# 9 de octure añadido soporte para directadmin beta 0.3

###

Editamos las lineas:
Expira, por si queremos ejecutarlo en un cron.
servertype aquí ponemos normal, si queremos definir la clave más abajo, si no podemos plesk, cpanel o ispconfig para no escribir la contraseña en el script.
backupin una carpeta vacía donde se guardarán los backups.

Respaldar todas las bases de datos del servidor

#!/bin/bash
# Respaldamos todas las bases de datos del servidor, 
# Creamos un archivo con el log, 
# 
# v0.4 Cambios menores, añadido conteo de bases de datos.
# 21 de dic del 2014
# Maks Skamasle | Skamasle.com | [email protected] | twiter @skamasle
#   This program is free software: you can redistribute it and/or modify
#   it under the terms of the GNU General Public License as published by
#   the Free Software Foundation, either version 3 of the License, or
#   (at your option) any later version.
#
#   This program is distributed in the hope that it will be useful,
#   but WITHOUT ANY WARRANTY; without even the implied warranty of
#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#   GNU General Public License for more details. http://www.gnu.org/licenses/
# Bajo licencia GNU GPL http://www.gnu.org/licenses/ se distribuye sin ninguna garantía.
# Actualizaciones  y más: http://kb.skamasle.com/2014/respaldar-todas-las-bases-de-datos-backup-all-data-bases-plesk-cpanel-ispconfig/
backupin=/root/sk-mysqldump # Ruta para guardar los backup
expira=5 	# Número de días que se retienen los backups de MSYQL en local (archivos mayores a 2 días se borran antes del backup)
# Datos de mysql.
# Tipo de servidor.
# Detectamos el tipo de servidor, plesk, cpanel o ispconfig para obtener automaticamente la clave de la base de datos.
# Si el servidor no es plesk, cpanel o ispconfig dejamos como "normal" y definimos la clave en la parte de abajo en mypass.
#################
#################
servertype=cpanel # Opciones: normal, cpanel, plesk, ipsconfig, directadmin
#################
#################
myuser="root"
mypass="pass" # Root Password
myhost="localhost"

if [ $servertype = plesk ]; then
	myuser="admin"	
	mypass=`cat /etc/psa/.psa.shadow` 
fi
if [ $servertype = cpanel ]; then
# cPanel algunos servidores en el .my.cnf tienen " en el pass y otros no así que hay que
# editar el cut -d '"' en caso de no tener comillas cambiar el " por un =, las versiones viejas no tiene
# comillas.... las nuevas luego de 11.32 suelen tenerlo
	mypass=`cat /root/.my.cnf |grep password | cut -d '"' -f2`
fi
if [ $servertype = ispconfig ]; then
	mypass=`cat /usr/local/ispconfig/server/lib/mysql_clientdb.conf |grep password | cut -d "'" -f2`
fi
if [ $servertype = directadmin ]; then
	myuser="da_admin"
	mypass=`cat /usr/local/directadmin/conf/mysql.conf |grep passwd | cut -d "=" -f2`
fi

MKDIR=/bin/mkdir
TOUCH=/bin/touch
logfile=/root/SK-BackupLog.txt
fecha=$(/bin/date)
if [ ! -d $backupin ]; then
	$MKDIR $backupin 
else
	find $backupin -type d -mtime +$expira | xargs rm -Rf
	
fi
if [ ! -e $logfile ]; then
	$TOUCH $logfile
fi
carpetabk=$backupin/`date +%Y-%m-%d-h%H%M-%S`

if [ ! -d $carpetabk ]; then
	$MKDIR -p $carpetabk
fi
# no hace falta cambiarlo
lists=$(echo "show databases;" | mysql -h $myhost -u $myuser -p$mypass | grep -v Database | grep -v information_schema | grep -v performance_schema | grep -v phpmyadmin | grep -v mysql)

echo "Comenzando el respaldo de las bases de datos" >> $logfile
tput setaf 1
tput bold
echo "Comenzando el respaldo de las bases de datos"
tput sgr0 
echo $fecha >> $logfile
C=0
for db in $lists
do
		tput setaf 2	
 	echo "Respaldo base de datos $db"
	mysqldump -h $myhost -u$myuser -p$mypass --opt $db > $carpetabk/$db.sql 2>/tmp/skdump_errorlog
	echo "Respaldando $db" >> $logfile
	tput setaf 3	
	echo "Comprimiendo (gzip) base de datos --- $db"
	tput sgr0	
	gzip $carpetabk/$db.sql
	let "C = $C + 1"
done
echo "Backup completo, se respaldaron $C Bases de Datos!" >> $logfile
echo $fecha >> $logfile
echo "Puedes revisar el log en $logfile y el errorlog en /tmp/skdump_errorlog"
tput setaf 2
echo "Se respaldaron $C Bases de datos"
tput sgr0
wget http://mirror.skamasle.com/scripts/skdumpbd.sh
chmod +x skdumpbd.sh
./skdumpbd.sh

Sk-serverup – Respaldo Automatico de Mysql y Transferencia a Servidor Remoto

Antes de seguir leyendo revisa este enlace con el script mejorado que tal vez te interese

Bien, mi último script saldrá a la luz hoy, aunque comencé a hacerlo hace no mucho ( ayer o antes de ayer ).

Hace tiempo publique unos script para respaldar mysql -> http://www.skamasle.com/como-2-formas-de-hacer-backup-remoto-a-bases-de-datos-mysql/

Son muy sencillos, solo hacen un respaldo, lo malo es que necesitamos ejecutar un script por base de datos y si tenemos 50 bases de datos 50 scripts.

Lo otro que tenía el antiguo script ( que no era mio ) es que solo respalda y deja en el servidor local.

Respaldo completo servidor mysql

Este nuevo script que hice tiene alguna que otra función extra:

Continue reading

Backups Caseros – Remotos e Incrementales si el PC esta Encendido.

Los backups son importantes para mi y al tener varias computadoras que mejor que una haga backup dentro de otra, el problema es que hacerlo de forma manual aveces no es conveniente, primero por tiempo y segundo por que se me olvida !

Ahora bien, tener varias computadoras en casa no significa que estén todas encendidas siempre, aunque casi todos los días coinciden y durante un periodo de tiempo llegan a estar encendidas a la vez más de una computadora, así que he pensado en esto durante un tiempo y me dio por hacer un script que aproveche esos periodos de tiempo y haga un backup.

Versión 0.3.3
– Selección de puerto SSH.
– Bugs solucionados.

Versión 0.3.0
– Algunos cambios en el código, ahora funciona con bash solamente, no se puede ejecutar con sh en ubuntu si no con./
– [Bug] Mejora en los backups, revisa códigos de error, si el pc se apaga o el backup no termina no se crea el lock file.
– Se puede escoger puerto para el SSH.

Versión 0.2.2 beta

– Posibilidad de escoger otro puerto ssh.
– Cambios menores.

Continue reading

Instalador de scripts de ConfigServe

No es que sea algo extremadamente necesario ya que la instalación de los programas ce configserve es muy pero muy fácil, pero, si necesitamos instalar varios de ellos hay que buscarlos, descargarlos, instalarlos etc, así que hice un pequeño script que lo hace de forma automática, con la posibilidad de instalar todas las aplicaciones o solamente una.

El script:

Algunos cambios en versión 0.3.1.

Se añadió una opción más, añadir IPs de cloudflare al servidor.

#!/bin/bash
# CSF, CMM, CMQ, CMC, CMM, CSE
# Skamasle.com
# Por Maks - Skamasle
# v 0.3.2 - Añadido rangos de ip a csf, bugs corregidos.
# 31 Enero 2014
# Use bajo su propio riesgo y responsabilidad.
firewall () {
if [ ! -d /etc/csf ]; then
	tput setaf 6
	echo "Instalando CSF - Firewall"
	cd /usr/local/src
	wget http://www.configserver.com/free/csf.tgz >/dev/null 2>&1
	tar -xzf csf.tgz > /dev/null
	cd csf 
	sh install.sh >/dev/null 2>&1
	tput bold
	echo "Listo !"
	tput sgr0
else
	echo "Parece que CSF ya esta instalado"

fi
}

cloudflareip () {
if [ -d /etc/csf ]; then
	echo "Añadiendo IPs de CloudFlare a CSF"
	csf -a 199.27.128.0/21
	csf -a 173.245.48.0/20
	csf -a 103.21.244.0/22
	csf -a 103.22.200.0/22
	csf -a 103.31.4.0/22
	csf -a 141.101.64.0/18
	csf -a 108.162.192.0/18
	csf -a 190.93.240.0/20
	csf -a 188.114.96.0/20
	csf -a 197.234.240.0/22
	csf -a 198.41.128.0/17
	csf -a 162.158.0.0/15
	csf -a 2400:cb00::/32
	csf -a 2606:4700::/32
	csf -a 2803:f800::/32
	csf -a 2405:b500::/32
	csf -a 2405:8100::/32
	tput bold
	echo "Listo rangos de IP de cloudflare añadidos al servidor !"
	tput sgr0
else 
	echo "CSF no esta instalado, instalalo antes con: sh skcs.sh csf"
fi

}

cmq () {
if [ ! -d /usr/local/cpanel/whostmgr/docroot/cgi/configserver/cmq ]; then
	tput setaf 6
	echo "Instalando CMQ - Mail Queues"
	cd /usr/local/src
	wget http://www.configserver.com/free/cmq.tgz >/dev/null 2>&1
	tar -xzf cmq.tgz >/dev/null 
	cd cmq 
	sh install.sh >/dev/null 2>&1
	tput bold
	echo "Listo !"
	tput sgr0
else
	echo "Parece que CMQ ya esta instalado"
fi
}

cmc () {
if [ ! -d /usr/local/cpanel/whostmgr/docroot/cgi/configserver/cmc ]; then
	tput setaf 6
	echo "Instalando CMC - ModSecurity Control"
	cd /usr/local/src
	wget http://www.configserver.com/free/cmc.tgz >/dev/null 2>&1
	tar -xzf cmc.tgz >/dev/null
	cd cmc 
	sh install.sh >/dev/null 2>&1
	tput bold
	echo "Listo !"
	tput sgr0
else
	echo "Parece que CMC ya esta instalado"
fi
}

cmm () {
if [ ! -d /usr/local/cpanel/whostmgr/docroot/cgi/configserver/cmm ]; then
	tput setaf 6
	echo "Instalando CMM - Mail Manage"
	cd /usr/local/src
	wget http://www.configserver.com/free/cmm.tgz >/dev/null 2>&1
 	tar -xzf cmm.tgz >/dev/null
	cd cmm 
	sh install.sh >/dev/null 2>&1
	tput bold
	echo "Listo !"
	tput sgr0
else
	echo "Parece que CMM ya esta instalado"
fi
}

cse () {
if [ ! -d /usr/local/cpanel/whostmgr/docroot/cgi/configserver/cse ]; then
	tput setaf 6
	echo "Instalando CSE- Server Explorer"
	cd /usr/local/src
	wget http://www.configserver.com/free/cse.tgz >/dev/null 2>&1

	tar -xzf cse.tgz >/dev/null
	cd cse
	sh install.sh >/dev/null 2>&1
	tput bold
	echo "Listo !"
	tput sgr0
else
	echo "Parece que CSE ya esta instalado"
fi
}
todo () {
echo "Instalando TODO: CSE, CMM, CSF, CMQ y CMC"
firewall
cse 
cmm 
cloudflareip
cmq 
cmc
}

if [ -z "$1" ]; then
		tput bold
		tput setaf 1
	echo "###################"
	echo "Modo de ejecución:"
	echo "sh skcs.sh opcion"
	echo "###################"
		tput setaf 2
	echo "###################"
	echo "Opciones posibles (en minuscula todo):"
	echo "###################"
	echo "csf, cse, cmm, cmc, cmq, addip todo"
	echo "Ej: para instalar todo ejecuta:"
	echo "sh skcs.sh todo"
	echo "###################"
		tput setaf 6
	echo "###################"
	echo "CSF = Firewall"
	echo "CSE = Server Explorer"
	echo "CMM = Mail Manage"
	echo "CMC = ModSecurity Control"
	echo "CMQ = Mail Queues"	
	echo "ADDIP = Añade los rangos de IP de cloudflare a la lista blanca de CSF"
	echo "TODO = Instalado y hace todo lo anterior"
	echo "###################"
		tput sgr0
	exit
fi

case "$1" in
	csf)
		firewall
            ;;
         
	cse)
		cse
            ;;
         
	cmm)
		cmm
            ;;
	cmc)
		cmc
            ;;
	cmq)
		cmq
            ;;
	addip)
		cloudflareip
            ;;
	todo)	
		todo
		;;
esac

Descarga:

wget mirror.skamasle.com/scripts/skcs.sh

Trabaja así:

Si queremos instalar todos los paquetes ejecutamos:

sh skcs.sh todo

Si solo queremos csf:

sh skcs.sh csf

Y así sucesivamente con los paquetes que queremos instalar.

Como ya he dicho no es que sea la bomba solo facilita el trabajo un poco en algunos casos.

Añadir una palabra delante de cada linea en un fichero.

Estaba trabajando con el webmaster tools y la nueva herramienta para deshabilitar enlaces de google que la actualizo de vez en cuando.

En esta ocasión iba a deshabilitar 250 dominios spamers, pero el problema es que tenia los dominios en un archivo de texto:

dominio.com
lalal.net
blabla.com
etc.com

Bien, el asunto es que para mandar los dominios a google hay que hacerlo de esta forma:

domain:dominio.com
domain:lalal.net
domain:blabla.com
domain:etc.com

Así que antes de buscar nada hice un sencillo script que hiciera el trabajo y que seguramente a alguien le servirá también.

#!/bin/bash
fichero=$(cat $1 | tr "\n" " ")
for palabra in $fichero
do
     echo domain:$palabra >> $2
done

Si, eso es todo y en menos de un segundo tenemos domain: delante de todas las lineas.

Lo guardamos con cualquier nombre ej: cambio.sh y lo ejecutamos así:

sh cambio.sh FicheroConTextos.txt FicheroNuevo.txt

Se pueden hacer cambios en el script para que sea más fácil de usar o bien para que sea más complejo y comente solo las primeras lineas del fichero o las últimas, pero vamos, que lo por necesidad, no debería ni haber escrito este tema pero, queda para el recuerdo y tal vez le sirva a alguien.

Monitorear servicios (ftp, mysql, apache etc) y levantar si esta caído.

Se que hay muchos monitores de servicios, incluso webmin tiene uno muy bueno, pero tengo servidores muy lite que apenas y ejecutas programas, algunos solo con un FTP y con RAM limitada, otros con nginx nada más y no corren nada más, hacen de proxy o son backup, así que no merece la pena instalar webmin en algunos, por lo tanto hice este pequeño script para levantar servicios caídos automáticamente.

Esta pensando en servidores con Debian, aunque funciona en Centos también, en servidores cPanel no hace falta ya que cpanel tiene su propia herramienta de monitoreo, pero hay que lo querrá poner por cualquier motivo, pero no funciona con apache con httpd status de cPanel y tampoco con exim ( motivo desconocido aún )

El script funciona con cualquier servicio que returne un código de error por defecto, aunque se puede pulir más.

#!/bin/bash
# Monitoreo de servicios.
# Por Skamasle - Maks Usmanov.
# Skamasle.com - kb.skamasle.com
# Contacto [email protected]
# Modificación: 29 dic 2013
# Versión 0.4
# Use bajo su propio riesgo, skamasle.com no se hace responsable del uso que se le de al script
# NOTA: Este script no borra ni hace intentos de borrar ningún archivo, solo revisa que los
# servicios estén corriendo, el único archivo que crea este script es ReporteServicios.txt
# que es donde se guardará el reporte de servicios que han estado caídos.
servicios='proftpd mysql apache2 nginx varnish memcached lighttpd pureftpd pure-ftpd-mysql httpd'
report=/root/ReporteServicios.txt
fecha=$(date)
checkstatus () {
service $1 status > /dev/null 
status="$?"
if [ $status  -eq "1" ] || [ $status  -eq "2" ] || [ $status  -eq "3" ] || [ $status  -eq "4" ]; then
	echo "$1 esta caído" $fecha >> $report
	/etc/init.d/$1 start >> $report
fi
}

existe () {

if [ -e /etc/init.d/$1 ]; then
	checkstatus $1
fi
}

for servicio in $servicios
        do 
                existe $servicio
done

Descargar y ejecutar:

wget mirror.skamasle.com/scripts/sk-monitoring.sh

Cron:

*/5 * * * * sh /ruta/sk-monitoring.sh

Eso es todo, si alguien quiere aportar alguna idea para mejorar el script, bienvenida sea.

Sistemas de monitoreo más completos

Si buscan algo más pro, pueden usar webmin que tiene un servicio de monitoreo completo.

Enlace a SIM
Enlace a CSF
Enlace a Webmin

Esos 3 son sistemas bastante completos si quieren algo mejor, sk-moinitoring es para tener algo propio, pero que no compite con sistemas con años de desarrollo.

Sacar todos los correos asignados a las cuentas cpanel

He estado trabajando en un script para el cual necesito la lista de eMails de los usuarios de cPanel y ya que hice la función y tal lo converti en un script aparte por si alguien necesita sacar los emails de todos los usuarios de cPanel.

Tal vez haya algo default en cPanel para hacer esto, pero como ya estaba haciendo algo para mi lo hice.

El script hace dos cosas, primero muestra los emails de los usuarios y segundo muestra los usuarios que no tienen email asignado, por defecto crea el archivo /tmp/UsuariosSinEmailDefinido.txt y ahí guarda todos los usuarios de cPanel que no tengan un correo asignado a su cuenta, se puede añadir un archivo similar para agregar ahí los usuarios que si tienen un eMail o bien solo los usuarios.

Correo Principal de todas las cuentas de cPanel

#!/bin/bash
# Sacar lista de emails de usuarios cpanel.
# Skamasle.
ruta=/var/cpanel/users
ListaSinMails=/tmp/UsuariosSinEmailDefinido.txt
if [ -e $ListaSinMails ]; then
	cat /dev/null > $ListaSinMails
else
	touch $ListaSinMails
fi
imp () {
mail=$1
td=$(cat $mail |grep "CONTACTEMAIL" |cut -d"=" -f2)
if [[ $td == *@* ]]; then
        echo "El Correo del usuario: $mail es" $td
else
    	tput bold
        tput setaf 1
echo "Usuario $mail no tiene asignado un eMail"
        tput sgr 0
        echo "$mail" >> $ListaSinMails
fi
}
correo () {
cd $ruta
for i in *
	do
 		imp $i
done
}
correo
	tput bold
	tput setaf 2
echo "Usuarios que no tienen un email definido"
tput sgr 0
cat $ListaSinMails
exit 1

Si usan windows y copian y pegan puede que tengan problemas, igual el scipt lo pueden bajar desde aquí: CP-Mail.sh

wget http://mirror.skamasle.com/scripts/CP-Mails.sh

Espero les sirva 🙂