#!/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