Configuração Apache e DNS (bind)

Publicado por Willian Oliveira (última atualização em 13/09/2010)

[ Hits: 16.720 ]

Download apache




Olá pessoal,

Aqui estou novamente com um outro script, só que esse é bem mais funcional do que o ultimo que aqui postei.

Bem, quem é desenvolvedor ou aprendiz de web vai gostar desse script, pois o mesmo cria e configura automaticamente o Apache e DNS (BIND), isso inclui:
* Criar arquivo do Apache (com direito a uma entra DNS, HTTP ou HTTPS e redirecionamento)
* Criação de certificados OpenSSL (salvo em uma pasta especifica)
* Criação de entradas DNS
* Colocando o servidor DNS na máquina
* E muito tratamento de erro...

Tudo isso de uma forma bem interativa e "não me faça pensar"....
Ele pergunta, você responde, ele cria e inicia todos os serviços sem que você precise editar manualmente o arquivo de configuração.

O legal desse script é que ele se "instala" e "desinstala" no seu computador com um clique no teclado.
Como de se esperar, eu só testei no Debian Lenny 5.0.5...pois eu acho que o mesmo é muito fácil de instalar e configurar (como servidor).

Não recomendo copiar e colar em um arquivo esse script, pois o mesmo fica dando erro nas aspas (").

Eu espero que você goste do script, ele é meio grande, mas é bem funcional...
Tem muita "gambiarra", pois eu não sou programador Shell Script, e não conheço muitos comandos.

Se você quiser, pode comentar ou mandar um E-mail projeto.cem@gmail.com para dar sugestões e/ou funcionalidades para o script.


Beleza???

É só isso mesmo, espero que esse script seja tão útil para você, quanto é para mim!!!! ^^
Até mais...

  



Esconder código-fonte

#!/bin/bash

#Essa função é apenas para ficar parecendo que está trabalhando...na verdade é de brincadeira
criando_site(){
echo -n "Criando site"
sleep 1
echo -n "."
sleep 1
echo -n "."
sleep 1
echo -n "."
}

#Essa função verifica se os programas existem, se não ele instala
programas(){

if [ -e /etc/init.d/apache2 ]
then
echo "Você tem o Apache instalado!"
apache="sim"
else
echo "Você não pode criar um site, por que não tem um servidor instalado"
echo -n "Você deseja instalar agora? (s/n) "
read resposta

   if [ $resposta = "s" ]
   then
      apt-get install apache2
      echo "Pronto, agora você pode continuar..."
      apache="sim"
   else
      echo "Você não pode continuar se não instalar o Apache!"
      sleep 2
      exit
   fi
fi

echo "Escolha uma opção:"
echo " 1) Instalar e/ou configurar um servidor DNS (BIND) "
echo " 2) Configurar localmente "
echo ""
echo -n "Opção escolhida: "
read opcao

case $opcao in
1)

   if [ -e /usr/sbin/named ]
   then
      echo "Você tem um servidor DNS"
      bind9="sim"
   else
      apt-get install bind9
      echo "Pronto, agora você tem um servidor DNS"
      bind9="sim"
   fi
;;
2)
echo "O seu servidor resolverá localmente"
bind9="não"
;;
*)
echo "Opção inválida"
sleep 2
clear
programas
esac


}

#Tela da saida do programa
sair(){

echo ""
echo -n "Acabou por aqui, escolha uma opção: "
echo ""
echo "1) Desejo voltar ao menu inicial"
echo "2) Desejo fazer novamente a configuração"
echo "3) Desejo sair do programa"
echo ""

echo -n "Opção escolhida: "
read opcao

case $opcao in
1)
menu
;;
2)
$funcao
;;
3)
exit
;;
*)
echo -n "Opção inválida"
sleep 1
sair
esac

}

#Criar entradas no DNS
entradas(){

funcao="entradas"

echo -n "Nome da entrada (ex. ftp) "
read entrada

echo -n "Tipo de entrada: (A /CNAME) "
read tipo

#Se a entrada for A ele cria um FQDN
if [ tipo = "a" -o tipo = "A" ]
then
echo -n "Você deseja criar um FQDN? (ex. debian) "
read fqdn
echo -n "Qual a interface do computador? (ex. 192.168.0.2) "
read interface
echo "$entrada   IN   A   $interface" >> /etc/bind/db.$dominio
/etc/init.d/bind9 restart

echo -n "Criar mais entradas? (s/n)"
read resposta

   if [ $resposta = "s" ]
   then
      entradas
   else
      sair
   fi
#Se for qualquer outra coisa ele cria um CNAME
else

echo -n "Utilizando um FQDN - nome do servidor: (ex. debian) "
read fqdn
echo "$entrada   IN   CNAME   $fqdn.$dominio." >> /etc/bind/db.$dominio
/etc/init.d/bind9 restart

echo -n "Criar mais entradas? (s/n)"
read resposta
   if [ $resposta = "s" ]
   then
      entradas
   else
      sair
   fi

fi

}

#Se o BIND 9 existir ou a pessoa escolher o servidor DNS
bind_criar(){

funcao="bind_criar"

echo "Configurando DNS (BIND)"

echo -n "Qual é o número da sua interface? (ex. 192.168.0.2) "
read interface

echo -n "Qual é o nome do seu servidor? (ex. debian) "
read servidor

echo -n "Qual é a primeira entrada? (www) "
read entrada

#Coloca as entradas no arquivo named.conf.local
echo "zone \"$dominio\" {
        type master;
        file \"/etc/bind/db.$dominio\";
};" >> /etc/bind/named.conf.local


#Cria o arquivo do BIND
touch /etc/bind/db.$dominio

echo ";
; BIND - Entradas para o dominio - $dominio
;
\$TTL    604800
@       IN      SOA     $dominio. root.$dominio. (
                              2         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
;
@       IN      NS      $dominio.
@       IN      A       $interface
$servidor   IN   A   $interface
$entrada   IN   CNAME   $servidor.$dominio." > /etc/bind/db.$dominio

#Redireciona para a função de mais entradas
echo -n "Você deseja colocar mais entradas no seu arquivo de DNS? (s/n) "
read mais_entradas

   if [ $mais_entradas = "s" ]
   then
      entradas
   else
      /etc/init.d/bind9 restart      
      sair
   fi

}

#Se não for usar o BIND
localmente(){
echo "Configurando dominio localmente..."
echo "127.0.0.1      $dns" >> /etc/hosts
sair
}


#Cria só um dominio, sem o Apache
dominio(){

funcao="dominio"

echo -n "Digite o nome do dominio: (ex. dominio.com) "
read dominio

#Vai para função bind criar
bind_criar

#Redireciona para a função entradas
echo -n "Você deseja colocar mais entradas no seu arquivo de DNS? (s/n) "
read mais_entradas

   if [ $mais_entradas = "s" ]
   then
      entradas
   else
      /etc/init.d/bind9 restart      
      sair
   fi

}


#Coloca um servidor DNS para o Linux
servidor_dns(){

clear
funcao="servidor_dns"

echo -n "Qual é o número do seu servidor DNS? (192.168.0.2) "
read servidor

echo "nameserver $servidor" >> /etc/resolv.conf

echo -n "Você deseja fazer o teste se o servidor está vivo? (s/n) "
read resposta

ping -c 5 $servidor

sair
}

#Função para criar sites automaticamente - DNS e Apache
criar_site_auto(){

clear
#Antes de criar um site, ele pergunta se você quer usar localmente ou usar um
#servidor DNS (bind9)
programas

funcao="criar_site_auto"

echo -n "Digite o nome do dominio: (ex. dominio.com) "
read dominio

echo -n "Digite a pasta de hospedagem: (/var/www/) "
read caminho

echo -n "Esse é o caminho completo \"$caminho$dominio\"? (s/n) "
read resposta

if [ $resposta = "s" ]
then
mkdir $caminho$dominio
echo "Pasta criada, continuando..."
else
sair
fi

echo -n "Que protocolo você deseja utilizar? (http/https) "
read protocolo

#Verificando a resposta do protocolo e fazendo o que o usuário pediu
   case $protocolo in
   http)
      echo "Utilizando HTTP, porta 80"
      porta="80"
      echo "Escrevendo os arquivos..."
      ssl_1="#SSLEngine On"
      ssl_2="#SSLCertificateFile /"
   ;;
   https)
      echo "Utilizando HTTPS, porta 443"
      porta="443"
      echo "Escrevendo configurações em: \"/certificados/\""

      if [ -e /certificados ]
      then
         openssl req $@ -new -x509 -days 365 -nodes -out /certificados/$dominio.pem -keyout /certificados/$dominio.pem
         chmod 777 -R /certificados/
         ssl_1="SSLEngine On"
         ssl_2="SSLCertificateFile /certificados/$dominio.pem"
      else
         mkdir /certificados/
         openssl req $@ -new -x509 -days 365 -nodes -out /certificados/$dominio.pem -keyout /certificados/$dominio.pem
         chmod 777 -R /certificados/      
         ssl_1="SSLEngine On"
         ssl_2="SSLCertificateFile /certificados/$dominio.pem"
      fi
   ;;
   *)
      echo "Utilizando HTTP, porta 80"
      porta="80"
      echo "Escrevendo os arquivos..."
      ssl_1="#SSLEngine On"
      ssl_2="#SSLCertificateFile /"
   esac

echo -n "Qual entrada DNS você deseja utilizar no site? (ex. www.dominio.com) "
read dns

echo -n "Você deseja fazer um redirecionamento para um outro site? (s/n) "
read redirecionar

#Verifica se é para redirecionar
   if [ $redirecionar = "s" ]
   then
      echo -n "Para qual site? (ex. http://www.site.com) "
      read redirecionar
      redirect="RedirectPermanent / $redirecionar"
   else
      redirect="#RedirectPermanent /"
   fi


#Configuração básica do Apache2
touch /etc/apache2/sites-available/$dominio
echo "<VirtualHost *:$porta>" > /etc/apache2/sites-available/$dominio
echo "   ServerName $dns" >> /etc/apache2/sites-available/$dominio
echo "   DocumentRoot $caminho$dominio" >> /etc/apache2/sites-available/$dominio
echo "   $ssl_1" >> /etc/apache2/sites-available/$dominio
echo "   $ssl_2" >> /etc/apache2/sites-available/$dominio
echo "   $redirect" >> /etc/apache2/sites-available/$dominio
echo "</VirtualHost>" >> /etc/apache2/sites-available/$dominio
a2ensite $dominio
a2enmod ssl
/etc/init.d/apache2 reload

echo -n "Você deseja criar um arquivo para teste? (s/n) "
read teste

   if [ $teste = "s" ]
   then
      criando_site
      touch $caminho$dominio/index.html
      echo "<html>
<head>
<meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\">
</head>
<body>
<h1>Minha primeira página!</h1>
</body>
</html>" > $caminho$dominio/index.html
      echo "Site criado."
   else
      echo "Site criado."
fi

#Chama a função bind9 para escrever ou não as entradas 
      if [ $bind9 = "sim" ]
      then
         bind_criar

      else
         localmente

      fi

}


#Função para criar sites manualmente - Só o Apache
criar_site_manual(){

clear

funcao="criar_site_manual"

echo -n "Digite o nome do dominio: (ex. dominio.com)"
read dominio

echo -n "Digite a pasta de hospedagem: (/var/www/) "
read caminho

echo -n "Esse é o caminho completo \"$caminho$dominio\"? (s/n) "
read resposta

   if [ $resposta = "s" ]
   then
      mkdir $caminho$dominio
      echo "Pasta criada, continuando..."
   else
      sair
   fi

echo -n "Que protocolo você deseja utilizar? (http/https) "
read protocolo

   case $protocolo in
   http)
      echo "Utilizando HTTP, porta 80"
      porta="80"
      echo "Escrevendo os arquivos..."
      ssl_1="#SSLEngine On"
      ssl_2="#SSLCertificateFile /"
   ;;
   https)
      echo "Utilizando HTTPS, porta 443"
      porta="443"
      echo "Escrevendo configurações em: \"/certificados/\""

      if [ -e /certificados ]
      then
         openssl req $@ -new -x509 -days 365 -nodes -out /certificados/$dominio.pem -keyout /certificados/$dominio.pem
         chmod 777 -R /certificados/
         ssl_1="SSLEngine On"
         ssl_2="SSLCertificateFile /certificados/$dominio.pem"
      else
         mkdir /certificados/
         openssl req $@ -new -x509 -days 365 -nodes -out /certificados/$dominio.pem -keyout /certificados/$dominio.pem
         chmod 777 -R /certificados/      
         ssl_1="SSLEngine On"
         ssl_2="SSLCertificateFile /certificados/$dominio.pem"
      fi
   ;;
   *)
      echo "Utilizando HTTP, porta 80"
      porta="80"
      echo "Escrevendo os arquivos..."
      ssl_1="#SSLEngine On"
      ssl_2="#SSLCertificateFile /"
   esac

echo -n "Qual entrada DNS você deseja utilizar (ex. www.dominio.com) "
read dns

echo -n "Você deseja fazer um redirecionamento para um outro site? (s/n) "
read redirecionar

#Verifica se é para redirecionar
   if [ $redirecionar = "s" ]
   then
      echo "Para qual site? (ex. http://www.site.com) "
      read $redirecionar
      redirect="RedirectPermanent / $redirecionar"
   else
      redirect="#RedirectPermanent /"
   fi

#Configuração básica do Apache2
touch /etc/apache2/sites-available/$dominio
echo "<VirtualHost *:$porta>" > /etc/apache2/sites-available/$dominio
echo "   ServerName $dns" >> /etc/apache2/sites-available/$dominio
echo "   DocumentRoot $caminho$dominio" >> /etc/apache2/sites-available/$dominio
echo "   $ssl_1" >> /etc/apache2/sites-available/$dominio
echo "   $ssl_2" >> /etc/apache2/sites-available/$dominio
echo "   $redirect" >> /etc/apache2/sites-available/$dominio
echo "</VirtualHost>" >> /etc/apache2/sites-available/$dominio
a2ensite $dominio
a2enmod ssl
/etc/init.d/apache2 reload

echo -n "Você deseja criar um arquivo para teste? (s/n) "
read teste

   if [ $teste = "s" ]
   then
      criando_site
      touch $caminho$dominio/index.html
      echo "<html>
<head>
<meta content=\"text/html; charset=utf-8\" http-equiv=\"content-type\">
</head>
<body>
<h1>Minha primeira página!</h1>
</body>
</html>" > $caminho$dominio/index.html
      echo "Site criato"
      sair
   else
      echo "Site criado."
      sair
   fi

}

#Função que testa o servidor
testar_servidor(){

clear
funcao="testar_servidor"

echo ""
mii-tool
echo ""
echo -n "Qual é o número da sua interface de rede? "
read interface

echo ""
ifconfig $interface
echo ""
echo -n "Essa é a sua rede, digite um número próximo a esse..."
echo -n "Qual é o nome ou número IP do servidor? (192.168.0.2) "
read servidor

echo ""
ping -c 5 $servidor
sair

}

#Função para instalar esse script no computador
instalar(){
echo -n "Você deseja instalar esse script no sistema? (s/n) "
read resposta

if [ $resposta = "s" ]
then

#Copia o arquivo para o SBIN do sistema
   cp ./apache /sbin
   chmod 755 /sbin/apache
   
   if [ -e /sbin/apache ]
   then
#Se a copia foi bem sucedida ele mostra a mensagem e volta para o menu principal
   echo "Instalação efetuada com sucesso!"
   echo "Agora para usar esse script digite \"apache\" no terminal"
   sleep 4
   menu
   

#Se não existir ele mostra o erro e volta para o menu principal
   else
   echo "Ocorreu um erro ao instalar..."
   sleep 2
   menu
   fi

else

#Se for digitado qualquer coisa diferente de s, volta para o menu principal
   echo "Ops, você digitou algo errado, voltando ao menu principal"
   sleep 2
   menu

fi
}


#Função para desistalar o script do sistema
desistalar(){

echo -n "Você deseja desistalar esse script do sistema? (s/n) "
read resposta

if [ $resposta = "s" ]
then

rm /sbin/apache

   if [ -e /sbin/apache ]
   then
   echo "Não pode desistalar esse script"
   echo "Dê um \"rm /sbin/apache \" para fazer isso manualmente"
   sleep 5
   exit

   else

   echo "Script desistalado com sucesso!"
   sleep 2
   exit
   fi

exit

else

#Se for digitado qualquer coisa diferente de s, volta para o menu principal
echo "Ops, você digitou algo errado, voltando ao menu principal"
sleep 2
menu

fi
}

menu() {

clear
funcao="menu"

#Verifica se o script está instalado

if [ -e /sbin/apache ]
then
instalado="sim"
else
instalado="não"
fi


echo "========================================"
echo "|    Configurador Apache e DNS         |"
echo "========================================"
echo "| 1) Criar novo dominio DNS            |"
echo "| 2) Configurar servidor DNS           |"
echo "========================================"
echo "| 3) Criar novo site (DNS e Apache)    |"
echo "| 4) Criar novo site (Só apache)       |"
echo "========================================"
echo "| 5) Testar um servidor                |"
echo "========================================"

#Escreve instalar ou desistalar dependendo da váriavel
   if [ $instalado = "sim" ]
   then
      echo "| d) Desistalar esse script do sistema |"
   else
      echo "| i) Instalar esse script no sistema   |"
      
   fi

echo "| q) Para sair                         |"
echo "========================================"
echo ""
echo -n "Opção escolhida: "
read opcao

case $opcao in
1)
dominio
;;
2)
servidor_dns
;;
3)
criar_site_auto
;;
4)
criar_site_manual
;;
5)
testar_servidor
;;
i)
instalar
;;
d)
desistalar
;;
q)
exit
;;
*)
echo -n "Opção inválida"
sleep 1
menu

esac
}

#Inicia o menu
menu

Scripts recomendados

Nmap,traceroute,ssh,ftp e nbtscan, tudo junto nesse script basicão.

smbs

Usando variáveis em shell script

Converter animes em .mp4 para .avi (e outros) com qualidade perfeita

Agenda de telefone em Shell usando Dialog


  

Comentários
[1] Comentário enviado por silenobrito em 10/03/2013 - 19:43h

Parabéns. Seu script funciona perfeitamente


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts