Todas las entradas de: Maks Skamasle

Acerca de Maks Skamasle

Maks Skamasle, sysadmin, fotógrafo aficionado y me gusta el tomar té por las madrugadas cuando no hay ruido ni sol.

Instalar Mod_GeoIP en cPanel – Centos 6

No voy a entrar en muchos detalles ya que es algo tarde solo que me han dado ganas de publicar esto hace tiempo y hoy como lo he tenido que volver a hacer lo dejo por aquí de una vez.

Instalar GeoIP

El mod_geoip se puede instalar tal cual en cpanel como dice la documentación, descargando:

wget http://docs.cpanel.net/twiki/pub/EasyApache3/CustomMods/custom_opt_mod-mod_geoip.tar.gz

Descomprimiendo y añadiendo a easy apache:

tar -C /var/cpanel/easy/apache/custom_opt_mods -xzf custom_opt_mod-mod_geoip.tar.gz

O bien con pecl

pecl install geoip

Pero al usar pecl nos da unos errores con este modulo, así que para corregirlos necesitamos instalar geoip y geoip-devel

Continue reading

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.

PAM: Authentication failure for illegal – Not allowed because shell /bin/bash\r does not exist

Error de Login como Root

Hoy me toco ver que pasaba con un servidor centos con WHM:cPanel en el que no se podía acceder con el usuario root por SSH

: error: PAM: Authentication failure for illegal user root from IP
: Failed keyboard-interactive/pam for invalid user root from IP port 38127 ssh2
: Postponed keyboard-interactive for invalid user root from IP port 38127 ssh2
: User root not allowed because shell /bin/bash\r does not exist
: input_userauth_request: invalid user root

Lo más extraño fue que no se hizo nada, no se edito ningún archivo, simplemente fallo.

El problema fue este -> /bin/bash\r una linea con un carácter de escape de windows, los únicos dos lugares posibles que pudieron afectar eran:

Continue reading

CSF en Debian: Error (iptables binary location) does not exist!, at line

Un error común si instalamos CSF en debian es que cuando tratáramos de reciniciarlo con el comando:

csf -r

Nos devuelta este mensaje de error:

Error:  (iptables binary location) does not exist!, at line 40

Aveces la linea cambia, 20, 35, 40 etc pero el problema aparentemente es el mismo.

La solución que he visto más oportuna es agregar la ruta completa de iptables a csf.conf.

En mi caso en /etc/csf.conf no había ninguna ruta y tampoco esta iptables = «» OJO importante ver si esta esa linea en el archivo antes de agregarla.

Yo como no la tenía la he agregado al final, importante poner la ruta, algo así:

IPTABLES = "/sbin/iptables"

Se puede hacer de una vez con:

echo IPTABLES = "/sbin/iptables" >> /etc/csf.conf

Aunque siempre cabe la posibilidad de que esa no sea la ruta de iptables, así que podemos buscarlo antes aver donde esta metido con:

whereis iptables

Y la ruta que nos de al binario es la que ponemos, luego de eso el error desaparece al ejecutar csf -r. o cualquier comando para reiniciar csf que usemos.

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 🙂