Configuração Apache e DNS (bind)
Publicado por Willian Oliveira (última atualização em 13/09/2010)
[ Hits: 16.676 ]
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
Configurar a rede no Debian, Kurumim e Ubuntu
Bloqueando ataque de força bruta em ssh através de script bash
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
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Como atualizar o Debian 8 para o 10 (10)
Dica sobre iptables ACCEPT e DROP (6)
NGNIX - Aplicar SNAT para evitar roteamento assimetrico (29)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta