isp.sh - Userlinux.net

Blog sobre sistemas operativos, Linux, Wireless, BSD, Open Source, Software Libre, Mac OS X, Apple... y otras tech

isp.sh

#!/bin/bash
 
################################################################################
# isp.sh - script para creación de dominios, subdominios y correos
# v0.1 r0sk 19.04.2010
################################################################################
 
# Solo root puede ejecutar este script
if [ $UID -gt 0 ]
then
  echo "Solo root puede ejecutar este script"
  exit 1
fi
 
# Definimos variables y programas que vamos a usar (todas las rutas acabadas en /)
DIR_BIND="/root/pruebas/etc/bind/"
NAMED_LOCAL=${DIR_BIND}named.conf.local
DNS1="10.0.0.1.ovh.net"
IP="10.0.0.1"
DNS2="sdns1.ovh.net"
DNS2_IP="213.251.188.140"
BINDCTL=/etc/init.d/bind9
DIR_APACHE_SITES=/root/pruebas/etc/apache2/sites-available/
DIR_APACHE_DOCUMENTROOT=/root/pruebas/home/www/
A2ENSITE=`which a2ensite`
APACHECTL=/etc/init.d/apache2
 
MKDIR=`which mkdir`
DATE=`which date`
CHMOD=`which chmod`
 
# Ayuda del comando
showHelp()
{
	echo -e "[isp.sh] - Comando para la creación de dominios según una estructura determinada creada por r0sk"
	echo -e "Podremos crear dominios aprovechando el poder de la shell en un solo comando."
 
	echo -e "\nModo de empleo: isp.sh [OPCIONES]"
 
	echo -e "\nLos argumentos obligatorios para las opciones largas también son obligatorios para las opciones cortas:"
	echo -e "\t--domain o -d dominio.com\tDominio a crear"
	echo -e "\t--help o -h\t\t\tPara ver este menú de ayuda\n"
 
	echo -e "Ejemplos:"
	echo -e "\t $ isp.sh -d userlinux.net\t\tCrea el dominio userlinux.net"
}
 
# Creando un dominio
createDomain()
{
	echo -e "\t=== BIND9 ==="
	bind;
	echo -e "\t=== APACHE2 ==="
	apache;
}
 
apache()
{
	# Comprobamos que no exista ya el fichero APACHE
	if [ -f ${DIR_APACHE_SITES}${DOMAIN} ]
	then
		echo -e "\t[*] Ya existe el fichero ${DIR_APACHE_SITES}${DOMAIN}"
	else
		echo -e "\t[+] Creando fichero ${DIR_APACHE_SITES}${DOMAIN}"
		echo "<VirtualHost *:80>
	ServerAdmin webmaster@localhost
 
	DocumentRoot ${DIR_APACHE_DOCUMENTROOT}${DOMAIN}/www/
	ServerName ${DOMAIN}
	ServerAlias www.${DOMAIN}
 
	<Directory ${DIR_APACHE_DOCUMENTROOT}${DOMAIN}/www/>
		Options FollowSymLinks
		AllowOverride All
	</Directory>
 
	ErrorLog ${DIR_APACHE_DOCUMENTROOT}${DOMAIN}/logs/error.log
	CustomLog ${DIR_APACHE_DOCUMENTROOT}${DOMAIN}/logs/access.log combined
 
	<IfModule mod_expires.c>
		ExpiresActive on
		ExpiresByType text/html \"access plus 5 minutes\"
		ExpiresByType image/jpg \"access plus 3 days\"
		ExpiresByType image/gif \"access plus 3 days\"
		ExpiresByType image/jpeg \"access plus 3 days\"
		ExpiresByType image/png \"access plus 3 days\"
		ExpiresByType text/css \"access plus 24 hours\"
		ExpiresByType application/x-javascript \"access plus 24 hours\"
		ExpiresDefault \"access plus 5 minutes\"
	</IfModule>
 
</VirtualHost>
		" > ${DIR_APACHE_SITES}${DOMAIN}
		echo -e "\t[+] Creando estructura de ${DIR_APACHE_DOCUMENTROOT}${DOMAIN}/"
		${MKDIR} -p {${DIR_APACHE_DOCUMENTROOT}${DOMAIN}/www/,${DIR_APACHE_DOCUMENTROOT}${DOMAIN}/logs/,${DIR_APACHE_DOCUMENTROOT}${DOMAIN}/sd/}
	fi
	echo -e "\t[+] Reiniciando servidor APACHE"
	${A2ENSITE} ${DOMAIN}
	${BINDCTL} restart
}
 
bind()
{
	# Comprobamos que no exista ya el fichero BIND
	if [ -f ${DIR_BIND}db.${DOMAIN} ]
	then
		echo -e "\t[*] Ya existe el fichero ${DIR_BIND}db.${DOMAIN}"
	else
		echo -e "\t[+] Creando fichero ${DIR_BIND}db.${DOMAIN}"
		echo "\$ttl 86400
${DOMAIN}.		IN		SOA		${DOMAIN}.	postmaster.${DOMAIN}. (
			2010150301
			21600
			3600
			604800
			6400 )
 
			IN		NS		${DNS1}.
			IN		NS		${DNS2}.
			IN		MX		10 mail.${DOMAIN}.
			IN		A		${IP}
www			IN		A		${IP}
mail			IN		A		${IP}
${DOMAIN}.		IN		TXT		\"v=spf1 a mx ptr a:${DNS1} ~all\"" > ${DIR_BIND}db.${DOMAIN}
		echo -e "\t[+] Editando fichero ${NAMED_LOCAL} para agregar ${DOMAIN}"
		echo "// ${DOMAIN}
zone \"${DOMAIN}\" {
	type master;
	file \"${DIR_BIND}db.${DOMAIN}\";
	notify-source ${IP};
	allow-query { any; };
	allow-transfer { ${DNS2_IP}; };
};
		" >> ${NAMED_LOCAL}
 
	fi
	echo -e "\t[+] Reiniciando servidor BIND"
	${BINDCTL} restart
}
 
# Parseemos argumentos...
while [ $# -ne 0 ]; do
        case "$1" in
                --help|-h) 		showHelp; exit 0;;
                --domain|-d) 	DOMAIN="$2"; createDomain; exit 0;;
                *) 				shift;
        esac
done