Configuração Apache e DNS (bind)
Publicado por Willian Oliveira (última atualização em 13/09/2010)
[ Hits: 16.720 ]
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...
#!/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
Nmap,traceroute,ssh,ftp e nbtscan, tudo junto nesse script basicão.
Usando variáveis em shell script
Converter animes em .mp4 para .avi (e outros) com qualidade perfeita
Agenda de telefone em Shell usando Dialog
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (14)
Tenho dois Link's ( IP VÁLIDOS ), estou tentando fazer o failover... (0)
Pendrive não formata de jeito nenhum (4)