Apache.pdf

download Apache.pdf

of 54

Transcript of Apache.pdf

  • Apache

    O servidor www um servidor em uma rede TCP/IP onde util iza o protocoloHTTP(HyperText Transfer Protocol Protocolo de transferncia de HiperTexto) que soas pginas de internet.

    Em uma conexo pelo protocolo HTTP, o cliente o navegador web (Mozilla, Firefox, ...)que faz a requisio ao servidor www, que representado pelo programa Apache emsistemas Linux / Unix que responde pelas requisies das conexes das pginas.

    Nesta captulo ser mostrado o servidor www apache, onde ser instalado econfigurado no computador com endereo IP 192.168.1.10 da nossa rede interna DMZ(protegida atrs do firewall com endereo IP 192.168.1.1) onde so implementadasregras de iptables com NAT como mostrado abaixo para redirecionar as requisiesexternas da internet para o servidor web (apache) da rede local (Veja a aula doRoteador NAT para mais detalhes).

    # /sbin/iptables -A PREROUTING -t nat -d 192.168.1.10 -j DNAT --to 192.168.1.1# /sbin/iptables -A POSTROUTING -t nat -s 192.168.1.1 -j SNAT --to 192.168.1.10

    1

  • 2

  • Instalao do apache

    Para instalar o apache no Debian utilize o comando apt-get e no Fedora yum, ou sepreferir baixar e instalar pelo arquivo fonte (.tar.gz ou .tar.bz2) acesse o site do apachehttp://httpd.apache.org/.

    Aproveite para instalar o suporte ao PHP no apache para criao de pginas dinmicaspara os hosts virtuais

    Debian

    # apt-get install apache2

    # apt-get install libapache2-mod-php5 php5-cli php5-common php5-cgi

    Fedora

    # yum install httpd

    # yum install php php-cli php-common

    Arquivos de configurao do apache

    Neste captulo iremos mostrar uma configurao baseada no Debian, mas pode seradaptado facilmente para utilizar em outras distribuies Linux.

    3

  • Fedora

    No Fedora o diretrio onde so armazenadas as pginas fica em /var/www/html e oarquivo de configurao do apache em /etc/httpd/conf/httpd.conf, onde especificado nome do servidor, porta e outras diretivas de configurao.

    Debian

    No Debian o diretrio onde sero armazenadas as pginas fica em /var/www e osarquivos de configurao do apache em /etc/apache2, onde so separados e divididosda seguinte forma:

    apache2.conf arquivo de configurao global do apache. httpd.conf - arquivo onde armazena o nome do host, endereo IP ou endereode loopback (localhost ou 127.0.0.1) do computador onde est executando oapache

    ports.conf arquivo onde armazena a(s) porta(s) do servidor apache.

    J dentro do diretrio /etc/apache2, existem 2 diretrios de domnios virtuais:

    /etc/apache2/sites-available diretrio de sites disponveis, onde ficamarmazenados os sites, mas enquanto no estiverem habilitados, no estarodisponveis.

    /etc/apache2/sites-enabled - diretrio de sites habilitados, onde ficamarmazenados os links simblicos para sites, vale lembrar que no necessriocriar os links simblicos com o comando ln -s, pois no Debian podemos criar linkspara os sites com o comando utilitrio do apache a2ensite, e remover coma2dissite.

    4

  • Veja o exemplo de configurao dos arquivos baseado no Debian:

    httpd.conf

    ServerName localhost

    ports.conf

    Listen 80

    Editando o apache2.conf

    Agora ser mostrado algumas diretivas de configurao do arquivo principal deconfigurao do apache /etc/apache2/apache2.conf (baseado no Debian).

    Exibe informaes sobre o servidor apache, como verso utilizada, sistema operacionale mdulos. Por padro vem configurado como Full (mostra tudo), recomendamosutilizar a opo Prod (mostra apenas a palavra apache).

    ServerTokens Full

    veja a sada do comando telnet aps alterar Full para Prod.

    $ telnet localhost 80

    Trying 127.0.0.1...

    Connected to localhost.

    Escape character is '^]'.

    ^] (Digite o acento circunflexo e o colchete e aperte ENTER)

    Esta linha indica o diretrio de configurao do apache, onde no deve ser adicionadouma barra / no final da linha.

    5

  • ServerRoot "/etc/apache2"

    Este linha indica o diretrio onde sero armazenadas as pginas dos sites, por padroela no vem especificada, portanto voc poder inclu-la no arquivo de configurao doapache.

    DocumentRoot "/var/www"

    Nomes das pginas de iniciais dos sites

    DirectoryIndex index.php index.html index.htm

    Esta linha indica o PID(nmero do processo) do apache

    PidFile /var/run/apache2.pid

    Intervalo de tempo, em segundos, entre uma requisio recebida no servidor e a suaresposta. Caso no responda neste intervalo a conexo ter seu tempo esgotado.

    Timeout 300

    Permite ou no conexes persistentes (mais de uma requisio na mesma conexo).Para desativar configure como Off.

    KeepAlive On

    Nmero mximo de requisies persistentes permitidas em uma nica conexo,conf igurando esse nmero para 0 sero permit idas conexes i l imitadas,recomendamos que configure com um valor maior para performance mxima.

    MaxKeepAliveRequests 100

    Nmero de segundos de espera para a prxima requisio do mesmo cliente na mesmaconexo.

    KeepAliveTimeout 15

    6

  • StartServers 5

    MinSpareServers 5

    MaxSpareServers 10

    MaxClients 150

    MaxRequestsPerChild 0

    StartServers: especifica o nmero de processos do servidor que sero inicializados.

    MinSpareServers: especifica o nmero mnimo de processos do servidor nos quaisso mantidos sobressalentes (mantidos de reserva).

    MaxSpareServers: especifica o nmero mximo de processos do servidor que somantidos sobressalentes.

    MaxClients: especifica o nmero mximo de processos do servidor que seroinicializados.

    MaxRequestsPerChild: especifica o nmero mximo de requisies de um processono servidor.

    Define o usurio dono do apache

    User www-data

    Define o usurio grupo do apache

    Group www-data

    Nome do arquivo para controle de acesso aos diretrios protegidos por senha peloapache

    AccessFileName .htaccess

    7

  • Essa diretiva ativa ou desativa a resoluo de endereos IP(200.xxx.xxx.xxx) ou nomes(www.site1.com) de logs dos clientes, para um melhor desempenho desabilitado aresoluo de nomes Off.

    HostnameLookups Off

    Arquivo de logs do apache

    ErrorLog /var/log/apache2/error.log

    Controla o nvel de mensagens de log, podendo ter os seguintes valores:debug(depurao), info(informao), notice(notificao), warn(aviso), error(erro),crit(crtico), alert(alerta), emerg(emergncia).

    LogLevel warn

    Inclui de mdulos de configurao

    Include /etc/apache2/mods-enabled/*.load

    Include /etc/apache2/mods-enabled/*.conf

    Inclui todas configuraes de usurios

    Include /etc/apache2/httpd.conf

    Inclui as portas que esto escutando conexes

    Include /etc/apache2/ports.conf

    Inclui trechos de declaraes genricas

    Include /etc/apache2/conf.d/

    Inclui as configuraes dos hosts virtuais

    Include /etc/apache2/sites-enabled/

    Comandos do apache

    8

  • Iniciando o apache

    Debian

    # /etc/init.d/apache2 start

    ou

    # apache2ctl start

    Para habi l i tar ou desabi l i tar o apache no Debian, edite o arquivo global/etc/default/apache2, e configure o valor da varivel NO_START=0 para habilitar nainicializao e NO_START=1 para no habilitar.

    # 0 = start on boot; 1 = don't start on boot

    NO_START=0

    Fedora

    # /sbin/service httpd start

    ou

    # apache2ctl start

    Verificando status do apache

    Com o comando netstat, podemos ver a porta e se o servio est ativo.

    9

  • # netstat -nap | grep ":80"

    tcp6 0 0 :::80 :::* OUA 6850/apache2

    Recarregando e verificando configuraes do apache

    Caso voc tenha feito algumas alterao em algum arquivo de configurao do apacheou de hosts virtuais, execute o comando:

    # /etc/init.d/apache2 reload

    Para verificar se a sintaxe do arquivos de configurao esto corretas, execute ocomando:

    # apache2 -t

    Para exibir a configurao de hosts virtuais, execute o comando:

    # apache2 -t -D DUMP_VHOSTS

    ou

    # apache2 -S

    Verificando logs do apache

    Para ver os erros do servio do apache execute o comando:

    # tail -f /var/log/apache2/error.log

    Para ver os acessos do apache execute o comando:

    10

  • # tail -f /var/log/apache2/access.log

    Autenticao de usurios

    Protegendo diretrios com o arquivo .htaccess

    O arquivo .htaccess permite fazer mudanas nas configuraes por-diretrio, onde socolocados em um diretrio especfico e as diretivas de configuraes se aplicam paraaquele diretrio e todos os seu subdiretrios.

    O uso de arquivos .htaccess deve ser evitado quando possvel por questes deperformance e segurana, portanto voc pode usar as configuraes de autenticaode usurio no arquivo de configurao principal do apache, o que a maneira correta eser mostrado logo em seguida na seo Protegendo diretrios sem o arquivo.htaccess.

    Portanto em um ISP(Provedor de hospedagem sites) ou grandes empresas com vriosdepartamentos, adicionar configuraes a usurios ou membros de um site, se tornacomplicado de fazer o gerenciamento para cada usurio novo ter que adicionar aoarquivo de configurao global do apache.

    Neste tipo de caso, usa-se a autenticao de usurios pelo arquivo .htaccess, pois oadministrador do servidor apache, poder permitir que usurios ou membros de gruposfaa suas alteraes de configuraes no arquivo .htaccess sem precisar doadministrador do sistema.

    Para proteger arquivos criados em diretrios, utilizado o recurso de autenticao deusurios e senhas, onde criado um arquivo .htaccess dentro dos diretrios a seremprotegidos.

    11

  • Agora edite o arquivo /etc/apache2/apache2.conf e adicione as seguintes linhas,aps a diretiva AccessFileName .htaccess

    AccessFileName .htaccess

    Options FollowSymLinks Indexes

    AllowOverride AuthConfig

  • # chown -R aluno1.aluno1 /var/www/diretorio_protegido

    A g o r a c r i e o a r q u i v o . h t a c c e s s c o m o u s u r i o n o d i r e t r i o/var/www/diretorio_protegido e insira as seguintes linhas :

    $ cd /var/www/diretorio_protegido

    $ vi .htaccess

    AuthName Acesso Restrito

    AuthType Basic

    AuthUserFile /var/www/diretorio_protegido/.senhas

    require valid-user

    Agora crie o arquivo de usurios e senhas e digite a senha para o usurio aluno1

    # htpasswd -c /var/www/diretorio_protegido/.senhas aluno1

    Onde /var/www/diretorio_protegido/.senhas o arquivo de usurios e senhas queser criado com o comando utilitrio do apache htpasswd. Para criar o arquivo pelaprimeira vez utilize a opo -c, mas na prxima vez que executar o comando para criaro prximo usurio, no necessrio.

    Mude as permisses, dono e grupo para o usurio do apache do arquivo de senhas como comando :

    # chmod 750 /var/www/diretorio_protegido/.senhas

    13

  • # chown www-data.www-data /var/www/diretorio_protegido/.senhas

    Aps as alteraes recarregue as configuraes do apache.

    # /etc/init.d/apache2 reload

    Agora faa o teste digitando no navegador http://localhost/diretorio_protegido

    http://localhost/diretrio_protegido

    Protegendo diretrios sem o arquivo .htaccess

    Voc pode tambm fazer a autenticao de usurios sem o arquivo .htaccess,especificando as diretivas de configurao de um diretrio para um usurio ou grupo,utilizando a diretiva Location.

    Por exemplo, vamos supor de que voc queira permitir o acesso ao diretrio/var/www/diretorio_protegido para um determinado usurio ou grupo.

    Edite o arquivo /etc/apache2/apache2.conf e adicione as seguintes linhas no final dofinal do arquivo.

    Crie um apelido para o diretrio com a diretiva Alias, apontando para o cominhocompleto do diretrio.

    Alias /membros/ "/var/www/diretorio_protegido/

    14

  • Agora use a diretiva Location usada para controle de acesso por URL, especifica oAlias criado acima apontando para o diretrio protegido, onde temos a diretivaAuthName que especifica a mensagem exibida na tela de login, AuthType o tipo deautenticao padro HTTP, onde somente admitida como Basic, AuthUserFile indicao caminho para o arquivo de usurios e senhas e require valid-user indica queapenas usurios vlidos tero permisso de acesso.

    AuthName "Accesso Retrito"

    AuthType Basic

    AuthUserFile /var/www/diretorio_protegido/.membros

    require valid-user

    Agora crie um diretrio no diretrio /var/www para ser protegido e crie o arquivo.htaccess dentro dele.

    # mkdir /var/www/diretorio_protegido

    Agora crie o arquivo de usurios e senhas e digite a senha para o usurio membro1

    # htpasswd -c /var/www/diretorio_protegido/.membros membro1

    Onde /var/www/diretorio_protegido/.membros o arquivo de usurios e senhasque ser criado com o comando utilitrio do apache htpasswd. Para criar o arquivopela primeira vez utilize a opo -c, mas na prxima vez que executar o comando paracriar o prximo usurio, no necessrio.

    15

  • Mude as permisses, dono e grupo para o usurio do apache do arquivo de senhas como comando :

    # chmod 750 /var/www/diretorio_protegido/.membros

    # chown www-data.www-data /var/www/diretorio_protegido/.membros

    Aps as alteraes recarregue as configuraes do apache.

    # /etc/init.d/apache2 reload

    Agora faa o teste digitando no navegador http://localhost/membros/

    *Obs no esquea de colocar a barra / no final, pois foi utilizada no Alias(Alias /membros/ "/var/www/diretorio_protegido/)

    http://localhost/membros/

    Diretrios de pginas pessoais de usurios

    A diretiva UserDir, informa ao apache que os diretrios dos usurios em /home(/home/usuario ou ~/usuario) seja visto pelo servidor apache como o diretrio raizdo seu site pessoal para cada usurio. Isso til quando existe muitos usurios nosistema e em grandes empresas, provedores de hospedagem ou universidades.

    Edite o arquivo /etc/apache2/apache2.conf e adicione a diretiva UserDirpublic_html no final do arquivo.

    16

  • UserDir public_html

    Para utilizar a diretiva UserDir necessrio carregar o mdulo userdir para o diretriode mdulos habilitados /etc/apache2/mods-enabled/, onde voc pode fazer um linksimblico manualmente com o comando ln -s ou utilizar o comando utilitrio do apachea2enmod para criar os links simblicos e a2dismod para exclu-los.

    # cd /etc/apache2/

    # ln -s mods-enabled/userdir.conf mods-available/userdir.conf

    # ln -s mods-enabled/userdir.load mods-available/userdir.load

    Para criar os links simblicos

    # a2enmod userdir

    Para excluir os links simblicos

    # a2dismod userdir

    Isso faz com que o apache enxergue o diretrio das pginas pessoais do usurio~/usuario/public_html pelo navegador.

    Por exemplo:

    http://localhost/~usuario

    Quando acessamos a URL acima pelo navegador web, repare o til (~) antes do nome dou s u r i o i n d i c a n d o p a r a o a p a c h e l e r o d i r e t r i o l o c a l d o u s u r i o(/home/usuario/public_html ou ~/usuario/public_html, repare o diretrio configuradona diretiva UserDir o mesmo utilizado no diretrio local de cada usurio, e o apachedeve ter permisses de leitura e execuo para ler os arquivos e diretrios dentro do

    17

  • diretrio public_html de cada usurio.

    Agora crie o diretrio public_html dentro do diretrio de um usurio e crie um arquivoqualquer.

    $ cd /home/aluno1

    $ mkdir public_html

    $ cd public_html

    $ touch arquivo.txt

    Mude o dono e o grupo do diretrio ~/usuario/public_html recursivamente para todossubdiretrios com o comando abaixo :

    # chown -R aluno1.www-data /home/usuario/public_html

    Repare que o dono do diretrio o usurio local e o grupo o usurio do servidorapache.

    Agora mude as permisses recursivamente no diretrio, onde d permisses total parao usurio local e ao apache e nenhuma permisso para outros (770), e repare que foiativado o bit setgid (2770), isso far com que quando o usurio criar um novo arquivono diretrio ~/usuario/public_html, ser atribudo no grupo o usurio do apacheautomaticamente e fazendo com que o servidor apache acesso o arquivo recm criado.

    Repare no exemplo abaixo que o dono o usurio local (aluno1) e o grupo foi atribudoautomaticamente o usurio do apache (www-data).

    $ cd ~/aluno1/public_html

    $ touch teste.txt

    18

  • $ ls -l

    -rw-r--r-- 1 aluno1 www-data 0 2008-03-25 22:11 teste.txt

    # chmod -R 2770 /home/usuario/public_html

    Agora acesse na URL do diretrio do usurio local aluno1

    http://localhost/~aluno1

    Configurando hosts virtuais

    As duas maneiras de criar hosts virtuais pelo apache so:

    Baseado em nomes: esse mtodo muito comum, onde voc dever apontarvrios nomes de hosts para um nico nome de host no sistema, onde possvelcriar entradas CNAME ou A no DNS (Bind) para apontar para um nico host.Esse mtodo utiliza apenas um endereo IP respondendo por vrios hostsvirtuais na configurao do apache, ficando mais fcil para o gerenciamentocaso voc altere os endereos IP do seu servidor web.

    Baseado em IP: esse mtodo requer vrios endereos IP na configurao doapache, portanto torna-se mais difcil o gerenciamento caso tenha que alterar osendereos IP.

    Resumindo, o mtodo Baseado em nomes requer apenas um endereo IP para responderpor vrios hosts virtuais e Baseado em IP requer vrios endereos IP, onde cada hostvirtual ter que ter um endereo IP como mostra as imagens abaixo:

    19

  • Baseado em nome

    20

  • Baseado em IP

    Primeiramente necessrio configurar o DNS, portanto veja a aula de configurao do

    21

  • Bind (DNS) para mais detalhes.

    Configurao do DNS para hosts virtuais

    Supondo que voc tenha acessado a aula de configurao do DNS Bind e do roteadorNAT (onde mostra o recurso IP Aliasing para atribuir vrios endereos IP nas mesmaplaca de rede e redirecionar conexes externas para um servidor da rede local com ofirewall iptables) e tenha instalado e configurado em um computador de sua rede, crieos arquivos de zonas para os hosts virtuais site1.com.br e site2.com.br.

    Se for utilizado o mtodo de configurao baseado em IP, lembre-se de criar osendereos IP virtuais com IP Aliasing no servidor Web (Apache).

    /sbin/ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0/sbin/ifconfig eth0:1 192.168.1.101 netmask 255.255.255.0

    /sbin/route add -host 192.168.1.100 dev eth0:0/sbin/route add -host 192.168.1.101 dev eth0:1

    No servidor DNS master edite o arquivo /etc/bind/named.conf e adicione a zona parao domnio site1.com.br e site2.com.br

    // aqui criaremos a zona para o domnio principal dominio.com.br

    zone "dominio.com.br" { // dominio principal

    type master; //tipo master

    file "/var/cache/bind/db.dominio.com.br"; // arquivo de zona

    };

    22

  • // aqui criaremos nossa zona para o domnio site1.com.br

    zone "site1.com.br" { //seu dominio

    type master; //tipo master

    file "/var/cache/bind/db.site1.com.br"; // arquivo de zona

    };

    // aqui criaremos nossa zona para o domnio site2.com.br

    zone "site2.com.br" { //seu dominio

    type master; //tipo master

    file "/var/cache/bind/db.site2.com.br"; // arquivo de zona

    };

    // aqui definido o arquivo de zona reversa para os domnios (db.1.168.192)

    zone "db.1.168.192.in-addr.arpa" { //seu IP reverso

    type master; // tipo master

    file "/var/cache/bind/db.1.168.192"; // arquivo de zona reversa

    };

    Crie o arquivo de zona para o domnio principal dominio.com.br.

    /var/cache/bind/db.dominio.com.br

    23

  • $TTL 604800

    @ IN SOA dns1.dominio.com.br. root.dns1.dominio.com.br. (

    1 ; Serial

    604800 ; Refresh

    86400 ; Retry

    2419200 ; Expire

    604800 ) ; Negative Cache TTL

    ;

    @ IN NS dns1.dominio.com.br. // servidor dns primrio

    @ IN NS dns2.dominio.com.br. // servidor dns secundrio

    @ IN MX 5 mx1.dominio.com.br. // servidor de email primrio

    @ IN MX 10 mx2.dominio.com.br. // servidor de email secundrio

    dns1 IN A 192.168.1.30 // servidor dns primrio

    dns2 IN A 192.168.1.20 // servidor dns secundrio

    www.dominio.com.br. IN A 192.168.1.10 // servidor web principal

    ftp.dominio.com.br. IN A 192.168.1.20 // servidor ftp

    mx1.dominio.com.br. IN A 192.168.1.30 // servidor email

    Agora crie o arquivo de zona para o domnio site1.com.br e site2.com.br.

    /var/cache/bind/db.site1.com.br

    $TTL 604800

    24

  • @ IN SOA site1.com.br. root.site1.com.br. (

    1 ; Serial

    604800 ; Refresh

    86400 ; Retry

    2419200 ; Expire

    604800 ) ; Negative Cache TTL

    ;

    @ IN NS dns1.dominio.com.br.

    @ IN NS dns2.dominio.com.br.

    @ IN MX 5 webmail.site1.com.br.

    @ IN MX 10 mx1.dominio.com.br.

    www IN A 192.168.1.100

    ftp IN A 192.168.1.100

    webmail IN A 192.168.1.100

    /var/cache/bind/db.site2.com.br

    $TTL 604800

    @ IN SOA site2.com.br. root.site2.com.br. (

    1 ; Serial

    604800 ; Refresh

    86400 ; Retry

    2419200 ; Expire

    25

  • 604800 ) ; Negative Cache TTL

    ;

    @ IN NS dns1.dominio.com.br.

    @ IN NS dns2.dominio.com.br.

    @ IN MX 5 webmail.site2.com.br.

    @ IN MX 10 mx1.dominio.com.br.

    site2.com.br. IN A 192.168.1.101

    www.site2.com.br. IN A 192.168.1.101

    ftp.site2.com.br. IN A 192.168.1.101

    webmail.site2.com.br. IN A 192.168.1.101

    Adicione uma entrada para os domnios site1.com.br e site2.com.br no arquivo dezona reversa.

    /var/cache/bind/db.db.1.168.192

    ; dominio.com.br

    10 IN PTR dominio.com.br.

    10 IN PTR www.dominio.com.br.

    30 IN PTR webmail.dominio.com.br.

    20 IN PTR ftp.dominio.com.br.

    26

  • ; site1.com.br

    100 IN PTR site1.com.br.

    100 IN PTR www.site1.com.br.

    100 IN PTR webmail.site1.com.br.

    100 IN PTR ftp.site1.com.br.

    ; site2.com.br

    101 IN PTR site2.com.br.

    101 IN PTR www.site2.com.br.

    101 IN PTR webmail.site2.com.br.

    101 IN PTR ftp.site2.com.br.

    No esquea de verificar se o arquivo de resoluo de nomes /etc/resolv.conf estconfigurado com os endereos IP do servidor DNS primrio master (dns1) e secundrioslave (dns2) e verifique tambm se h uma entrada para o servidor web no arquivo/etc/hosts do servidor DNS primrio (dns1).

    /etc/resolv.conf

    nameserver 127.0.0.1

    nameserver 192.168.1.30 # IP do servidor DNS primrio (dns1)

    nameserver 192.168.1.20 # IP do servidor DNS secundrio (dns2)

    /etc/hosts

    127.0.0.1 localhost dns1

    27

  • 192.168.1.30 dns1.dominio.com.br dns1

    192.168.1.20 dns2.dominio.com.br dns2

    192.168.1.10 www.dominio.com.br www

    Hosts virtuais baseados em nomes

    Esse mtodo o recomendado, pois ele requer apenas um nico endereo IP parahospedar centenas de sites virtuais e no precisa de criar vrios endereos IP com IPAliasing.

    Configurao do servidor DNS Bind

    A configurao DNS abaixo indica que uma configurao baseada em nomes, pois aslinhas que contm registros A especificando um endereo IP(baseado em IP) que estoem comentrio, e no criar um registro A apontando para o domnio site1.com.br.

    Usando o registro CNAME (para cria um alias (apelido) para domnios), no necessrio especificar um endereo IP e tem como objetivo apontar o domnio virtualsite1.com.br para o servidor web principal da rede que mantm o domnio principaldominio.com.br que responde pelos domnios virtuais.

    Eis aqui um exemplo onde o novo domnio virtual site1.com.br aponta para o servidorweb principal www.dominio.com.br no computador 192.168.1.10.

    Exemplo do arquivo de zona para o domnio site1.com.br, onde dever ser feito omesmo procedimento para o arquivo de zona do domnio site2.com.br.

    28

  • /var/cache/bind/db.site1.com.br

    $TTL 604800

    @ IN SOA site1.com.br. root.site1.com.br. (

    1 ; Serial

    604800 ; Refresh

    86400 ; Retry

    2419200 ; Expire

    604800 ) ; Negative Cache TTL

    ;

    @ IN NS dns1.dominio.com.br.

    @ IN NS dns2.dominio.com.br.

    @ IN MX 5 webmail.site1.com.br.

    @ IN MX 10 mx1.dominio.com.br.

    ; Exemplo Baseado em IP

    ; Baseado em IP (utilizando endereo IP)

    ;www IN A 192.168.1.100

    ;ftp IN A 192.168.1.100

    ; ou Baseado em IP especificando o dimnio completo com ponto no final .

    29

  • ;www.site1.com.br. IN A 192.168.1.100

    ;ftp.com.br. IN A 192.168.1.100

    ; Exemplo Baseado em nome

    ; Exemplo usando registros CNAME sem utilizar endereo IP

    ; Baseado em nomes (sem utilizar endereo IP)

    www IN CNAME www.dominio.com.br.

    ftp IN CNAME www.dominio.com.br.

    ; ou Baseado em nome especificando o domnio completo com ponto no final.

    www.site1.com.br. IN CNAME www.dominio.com.br.

    ftp.site1.com.br. IN CNAME www.dominio.com.br.

    ; Exemplo usando registros A utilizando um nico endereo IP do servidor web(192.168.1.10)

    ; Baseado em nomes (utilizando um nico endereo IP)

    www IN CNAME 192.168.1.10

    ftp IN CNAME 192.168.1.10

    30

  • ; ou Baseado em nome especificando o domnio completo com ponto no final.

    www.site1.com.br. IN CNAME 192.168.1.10

    ftp.site1.com.br. IN CNAME 192.168.1.10

    Adicione uma entrada para o domnio site1.com.br no arquivo de zona reversa erepare que est apontando para o endereo IP do servidor web principal 192.168.1.10(www.dominio.com.br).

    /var/cache/bind/db.db.1.168.192

    ; site1.com.br

    10 IN PTR site1.com.br.

    10 IN PTR www.site1.com.br.

    10 IN PTR webmail.site1.com.br.

    10 IN PTR ftp.site1.com.br.

    Aps as alteraes recarregue o bind

    # /etc/init.d/bind9 reload

    Agora tes te com o comando p ing , e ve ja quem responde pe los hos t svirtuais(site1.com.br e site2.com.br) o servidor web principal 192.168.1.10(www.dominio.com.br).

    31

  • $ ping www.site1.com.br

    PING www.dominio.com.br (192.168.1.10) 56(84) bytes of data.

    64 bytes from www.dominio.com.br (192.168.1.10): icmp_seq=1 ttl=64 time=2.88 ms

    $ ping www.site2.com.br

    PING www.dominio.com.br (192.168.1.10) 56(84) bytes of data.

    64 bytes from www.dominio.com.br (192.168.1.10): icmp_seq=1 ttl=64 time=2.92 ms

    Configurao do servidor Web Apache

    Por exemplo, para hospedar os sites site1.com.br e site2.com.br no mesmo servidorweb que utiliza o endereo IP 192.168.1.10, siga os seguintes passos :

    Primeiro verifique se o arquivo de resoluo de nomes /etc/resolv.conf estconfigurado com os endereos IP dos servidores DNS primrio (dns1 - 192.168.1.30) esecundrio (dns2 -192.168.1.20) e verifique tambm se h uma entrada para osservidores DNS no arquivo /etc/hosts do servidor web Apache (192.168.1.10).

    /etc/resolv.conf

    nameserver 192.168.1.30 # IP do serividor DNS primrio dns1

    nameserver 192.168.1.20 # IP do serividor DNS secundrio dns2

    /etc/hosts

    32

  • 127.0.0.1 localhost localhost.localdomain

    192.168.1.10 www www.dominio.com.br

    192.168.1.30 dns1 dns1.dominio.com.br

    192.168.1.20 dns2 dns2.dominio.com.br

    1) Crie os registros no servidor DNS como foi mostrado acima, onde aponte os domniosvirtuais site1.com.br e site2.com.br para o servidor web 192.168.1.10.

    2) Crie uma entrada para o host virtual no servidor apache no arquivo htttpd.conf(Red Hat / Fedora) ou no Debian crie os arquivos site1.com.br (para o novo domniovirtual site1.com.br) e site2.com.br (para o domnio virtual site2.com.br), acessando odiretrio /etc/apache2/sites-available/ e crie um link simblico utilizando o comandoa2enmod como mostra o exemplo abaixo:

    # cd /etc/apache2/sites-available/

    # vi site1.com.br

    Acesse o diretrio e crie o arquivo

    # cd /etc/apache2/sites-available/

    # vi site1.com.br

    Para criar hosts virtuais no Debian basta incluir um asterstico * aps a diretivaVirtualHost *, j no Fedora dever especificar o endereo IP do servidor web aps adiretiva NameVirtualHost 192.168.1.10 e VirtualHost 192.168.1.10 como mostrao exemplo abaixo:

    33

  • Fedora

    NameVirtualHost 192.168.1.10

    ServerName www.site1.com.br

    ServerAdmin [email protected]

    DocumentRoot "/var/www/site1/"

    ErrorLog "/var/log/apache2/site1.error_log"

    TransferLog "/var/log/apache2/site1.acccess_log"

    Abaixo exibida a configurao para o domnio site1.com.br e site2.com.br noDebian.

    Debian

    # /etc/apache2/sites-available/site1.com.br

    ServerName www.site1.com.br

    ServerAdmin [email protected]

    DocumentRoot "/var/www/site1/"

    ErrorLog "/var/log/apache2/site1.error_log" # log de erros

    34

  • TransferLog "/var/log/apache2/site1.acccess_log" # log de acesso

    # /etc/apache2/sites-available/site2.com.br

    ServerName www.site2.com.br

    ServerAdmin [email protected]

    DocumentRoot "/var/www/site2/"

    ErrorLog "/var/log/apache2/site2.error_log" # log de erros

    CustomLog "/var/log/apache2/site2.acccess_log" commom # log de acessopersonalizado

    3) Agora habilite o sites criando os links simblicos com o comando a2enmod

    # a2ensite site1.com.br

    # a2ensite site2.com.br

    4) Agora crie e mude as permisses dos usurios site1 e site2 e seus diretrios/var/www/site1 e /var/www/site2.

    # mkdir /var/www/site1# useradd site1 -d /var/www/site1 # passwd site1# chown -R site1.site1 /var/www/site1# chown -R 755 /var/www/site1

    35

  • Logado como usurio (site1 e site2), crie uma pgina inicial de abertura index.html no diretrio do site1 e site2

    $ cd /var/www/site1

    $ vi index.html

    Copie o cdigo HTML e crie a pgina inicial index.html, e faa o mesmo procedimentopara o site2.

    ### Ttulo do Site 1 ###

    Aqui vai o contedo do Site 1

    Reinicie o apache e acesse cada um dos hosts virtuais com o navegador webacessando a URL http://www.site1.com.br e http://www.site2.com.br

    # /etc/apache2/restart

    http://www.site1.com.br

    http://www.site2.com.br

    36

  • Agora verifique os logs de acesso ou erro do virtual host site1 com o comando tail -f, efaa o mesmo para o site2

    $ tail -f /var/log/apache2/site1.acccess_log

    $ tail -f /var/log/apache2/site1.error_log

    Hosts virtuais baseados em IP

    Esse mtodo necessrio que utilize endereos IP para criar os hosts virtuais, ondecada endereo IP dever ser especificado na diretiva . Portanto isso causaproblema de gerenciamento, caso voc altere os endereos IP freqentemente e notem nenhuma vantagem sobre o mtodo baseado em nomes mostrado acima.

    Configurao do servidor DNS Bind

    Neste tipo de configurao baseada em IP necessrio que os endereos IP virtuaisestejam cadastrados no arquivo do DNS Bind em named.conf, e que seja criadasentradas em seus arquivos de zonas e zonas reversas como foi mostrado acima naconfigurao do DNS para hosts virtuais.

    Verifique se o arquivo de resoluo de nomes /etc/resolv.conf est configurado comos endereos IP dos servidores DNS primrio (dns1 - 192.168.1.30) e secundrio(dns2 -192.168.1.20) e verifique tambm se h uma entrada para os servidores DNSno arquivo /etc/hosts do servidor web Apache (192.168.1.10).

    /etc/resolv.conf

    37

  • search dominio.com.br

    nameserver 127.0.0.1

    nameserver 192.168.1.30

    nameserver 192.168.1.20

    /etc/hosts

    127.0.0.1 localhost localhost.localdomain

    192.168.1.30 dns1 dns1.dominio.com.br

    192.168.1.20 dns2 dns2.dominio.com.br

    192.168.1.10 www www.dominio.com.br

    Agora veja exemplos de entradas nos arquivos de configurao do DNS Bind.

    /etc/bind/named.conf

    zone "site1.com.br" { //seu dominio

    type master; //tipo master

    file "/var/cache/bind/db.site1.com.br"; // arquivo de zona

    };

    zone "site2.com.br" { //seu dominio

    type master; //tipo master

    38

  • file "/var/cache/bind/db.site2.com.br"; // arquivo de zona

    };

    /var/cache/bind/db.site1.com.br

    Repare que est apontando para o endereo IP virtual criado com IP Aliasing noservidor web

    site1.com.br. IN A 192.168.1.100

    www.site1.com.br. IN A 192.168.1.100

    ftp.site1.com.br. IN A 192.168.1.100

    /var/cache/bind/db.site2.com.br

    Repare que est apontando para o endereo IP virtual criado com IP Aliasing noservidor web

    www IN A 192.168.1.101

    ftp IN A 192.168.1.101

    webmail IN A 192.168.1.101

    /var/cache/bind/db.db.1.168.192

    Repare que o endereo IP reverso, est apontando para o endereo IP virtual criadocom IP Aliasing no servidor web

    39

  • ; site1.com.br

    100 IN PTR site1.com.br.

    100 IN PTR www.site1.com.br.

    100 IN PTR webmail.site1.com.br.

    100 IN PTR ftp.site1.com.br.

    ; site2.com.br

    101 IN PTR site2.com.br.

    101 IN PTR www.site2.com.br.

    101 IN PTR webmail.site2.com.br.

    101 IN PTR ftp.site2.com.br.

    Para atualizar os dados dos arquivos de zona, no esquea de fazer a transferncia dezona dos hosts virtuais no servidor dns master (dns1) para o servidor slave (dns2),alterando o valor do nmero serial para um nmero maior do que o valor do servidordns slave para cada domnio virtual.

    Por exemplo, para atualizar a zona do domnio virtual site1.com.br alteramos o valordo serial na seguinte linha do arquivo de zona do domnio e faa o mesmo para odomnio virtual site2.com.br

    /var/cache/bind/db.site1.com.br

    1 ; Serial

    altere para o valor no servidor master(dns2) para um valor maior do que o servidor

    40

  • slave(dns2).

    2 ; Serial

    Agora reinicie o bind no servidor master (dns1) e veja que os dados foram atualizadosno servidor slave (dns2)

    Servidor master (dns1)

    # /etc/init.d/bind9 restart

    Servidor slave (dns2)

    # less /var/cache/bind/db.site1.com.br

    Configurao do servidor Web Apache

    Primeiro verifique se o arquivo de resoluo de nomes /etc/resolv.conf estconfigurado com os endereos IP dos servidores DNS primrio (dns1 - 192.168.1.30) esecundrio (dns2 -192.168.1.20) e verifique tambm se h uma entrada para osservidores DNS no arquivo /etc/hosts do servidor web Apache (192.168.1.10).

    /etc/resolv.conf

    nameserver 192.168.1.30 # IP do serividor DNS primrio dns1

    nameserver 192.168.1.20 # IP do serividor DNS secundrio dns2

    /etc/hosts

    41

  • 127.0.0.1 localhost localhost.localdomain

    192.168.1.10 www www.dominio.com.br

    192.168.1.30 dns1 dns1.dominio.com.br

    192.168.1.20 dns2 dns2.dominio.com.br

    O exemplo abaixo mostra dos hosts virtuais baseados em IP, repare que so usadosendereos IP diferentes para cada host virtual

    # /etc/apache2/sites-available/site1.com.br

    ServerName site1.com.br

    ServerAdmin [email protected]

    DocumentRoot "/var/www/site1/"

    ErrorLog "/var/log/apache2/site1.error_log" # log de erros

    TransferLog "/var/log/apache2/site1.acccess_log" # log de acesso

    # /etc/apache2/sites-available/site2.com.br

    ServerName site1.com.br

    ServerAdmin [email protected]

    DocumentRoot "/var/www/site1/"

    ErrorLog "/var/log/apache2/site1.error_log" # log de erros

    42

  • CustomLogLog "/var/log/apache2/site1.acccess_log" combined # log de acessopersonalizado

    A configurao acima exige cada um desses endereos IP vinculados a interface derede no servidor, onde so criados com o recurso IP Aliasing, onde permite atribuirvrios endereos IP na mesma placa de rede.

    Neste exemplo iremos ut i l izar os endereos IP virtuais 192.168.1.100 e192.168.1.101 para os domnios virtuais site1.com.br e site2.com.br, onde devemser criados no servidor Web Apache 192.168.1.10.

    /sbin/ifconfig eth0:0 192.168.1.100 netmask 255.255.255.0/sbin/ifconfig eth0:1 192.168.1.101 netmask 255.255.255.0

    /sbin/route add -host 192.168.1.100 dev eth0:0/sbin/route add -host 192.168.1.101 dev eth0:1

    Agora veja os hosts virtuais criados com o comando abaixo:

    # apache2 -t -D DUMP_VHOSTS

    ou

    # apache2 -S

    Agora habilite o sites criando os links simblicos com o comando a2enmod

    # a2ensite site1.com.br

    # a2ensite site2.com.br

    43

  • Agora crie e mude as permisses dos usurios site1 e site2 e seus diretrios/var/www/site1 e /var/www/site2.

    # mkdir /var/www/site1# useradd site1 -d /var/www/site1 # passwd site1# chown -R site1.site1 /var/www/site1# chown -R 755 /var/www/site1

    Logado como usurio (site1 e site2), crie uma pgina inicial de abertura index.html no diretrio do site1 e site2

    $ cd /var/www/site1

    $ vi index.html

    Copie o cdigo HTML e crie a pgina inicial index.html, e faa o mesmo procedimentopara o site2.

    ### Ttulo do Site 1 ###

    Aqui vai o contedo do Site 1

    44

  • Reinicie o apache e acesse cada um dos hosts virtuais com o navegador webacessando a URL http://www.site1.com.br e http://www.site2.com.br

    # /etc/apache2/restart

    http://www.site1.com.br

    http://www.site2.com.br

    Agora verifique os logs de acesso ou erro do virtual host site1 com o comando tail -f, efaa o mesmo para o site2

    $ tail -f /var/log/apache2/site1.acccess_log

    $ tail -f /var/log/apache2/site1.error_log

    Instalando e configurando o Apache com suporte a SSL, PHP e Virtual Hostno Debian Etch

    Para configurar o apache com suporte a SSL e PHP para gerar certificados e utilizar oprotocolo https:// necessrio instalar os seguintes pacotes:

    Primeiramente instale o servidor apache , caso no esteja instalado

    # apt-get install apache2

    Agora instale o suporte a SSL instalando os pacotes abaixo:

    45

  • # apt-get install openssl ssl-cert

    No esquea de instalar o suporte ao PHP

    # apt-get install libapache2-mod-php5 php5-cli php5-common php5-cgi

    Agora que o servidor apache est instalado voc precisa gerar um certificado parahabilitar e configurar o suporte a SSL.

    Gerando um certificado auto-assinado

    Este captulo mostra como criar um certificado auto-assinado e configurando virtuaishosts usando conexes https na porta 443.

    Antes de seguir em frente vale lembrar que os certificados auto-assinados exibemmensagens quando so acessados via navegador usando https, mas isso no temnenhum problema.

    Os certificados auto-assinados no so comerciais ou pblicos, eles servem paraconexes seguras dos seus clientes pelo navegador para reas de segurana ou deadministrador como cadastrados ou login de autenticao de usurios.

    Se voc no quiser que exiba essas mensagens, ento voc ter que comprar umcertificado em sites especializados em emisso de certificados. Se voc quiser gerarseus prprios certificados SSL com apache2 ento siga os passos abaixo usandoopenssl.

    46

  • Comece criando um diretrio para o certificado

    # mkdir /etc/apache2/ssl

    Na verso anterior ao Debian Etch o Debian Sarge tinha um comando para gerar ocertificado chamado apache2-ssl-certificate, j no Debian Etch necessrio utilizar ocomando openssl abaixo, onde faz uma requisio de um novo certificado (req -new)utilizando o tipo de certificado x590 (-x509) vlido por 365 dias (-days 365), onde no necessrio criar uma senha para o certificado com a opo (-nodes) e nas opes-out e -keyout informa o caminho para o certificado.

    Aps executar o comando abaixo ser feito algumas perguntas sobre :

    Country Name (2 letter code) [AU]: BR - Informe o pas neste caso BR(Brasil)

    State or Province Name (full name) [Some-State]: So Paulo - Informe oseu estado

    Locality Name (eg, city) []: So Paulo - Informe a sua cidade Organization Name (eg, company) [Internet Widgits Pty Ltd]: LinuxBrasil - Informe o nome da sua empresa ou organizao

    Organizational Unit Name (eg, section) []: Linux Avancado - Informe odepartamento da sua empresa ou organizao

    Common Name (eg, YOUR name) []: www.linuxbrasil.org.br - Informe onome do seu site

    Email Address []: [email protected] - Informe o seu email

    # openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem-keyout /etc/apache2/ssl/apache.pem

    Generating a 1024 bit RSA private key

    .........++++++

    .................++++++

    47

  • writing new private key to '/etc/apache2/ssl/apache.pem'

    -----

    You are about to be asked to enter information that will be incorporated

    into your certificate request.

    What you are about to enter is what is called a Distinguished Name or a DN.

    There are quite a few fields but you can leave some blank

    For some fields there will be a default value,

    If you enter '.', the field will be left blank.

    -----

    Country Name (2 letter code) [AU]:BR

    State or Province Name (full name) [Some-State]:So Paulo

    Locality Name (eg, city) []:So Paulo

    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Linux Brasil

    Organizational Unit Name (eg, section) []:Linux Avancado

    Common Name (eg, YOUR name) []:www.linuxbrasil.org.br

    Email Address []:[email protected]

    Agora que o certificado est instalado, voc precisa alterar as permisses do arquivo.pem

    # chmod 600 /etc/apache2/ssl/apache.pem

    Habilitando suporte a SSL

    Por padro o servidor apache responde por conexes na porta 80 e no na porta 443 SSL, ento precisamoshabilitar o suporte a conexes SSL editando o arquivo /etc/apache2/ports.conf e adicionando alinha Listen 443.

    48

  • Listen 80

    Listen 443

    Agora habilite o suporte a SSL ativando o mdulo ssl

    # a2enmod ssl

    Module ssl installed; run /etc/init.d/apache2 force-reload to enable.

    Configurando certificado SSL para Virtuais Hosts

    Primeiro edite a pgina padro do apache

    ######################################################

    ServerName site1.com.br

    ServerAdmin [email protected]

    DocumentRoot "/var/www/site1/"

    ErrorLog "/var/log/apache2/site1.error_log"

    TransferLog "/var/log/apache2/site1.acccess_log"

    SSLEngine on

    SSLCertificateFile /etc/apache2/ssl/apache.pem

    49

  • # /etc/apache2/sites-available/site2.com.br

    ServerName www.site2.com.br

    ServerAdmin [email protected]

    DocumentRoot "/var/www/site2/"

    ErrorLog "/var/log/apache2/site2.error_log"

    CustomLog "/var/log/apache2/site2.acccess_log" commom

    ######################################################

    ServerName www.site2.com.br

    ServerAdmin [email protected]

    DocumentRoot "/var/www/site2/"

    ErrorLog "/var/log/apache2/site2.error_log"

    CustomLog "/var/log/apache2/site2.acccess_log" commom

    SSLEngine on

    SSLCertificateFile /etc/apache2/ssl/apache.pem

    Agora voc precisa reiniciar o apache

    # /etc/init.d/apache2 restart

    50

  • Execute o comando abaixo, e repare que agora os virtuais hosts esto configuradospara aceitar conexes na porta 80 e 443.

    # apache2 -t -D DUMP_VHOSTS

    ou

    # apache2 -S

    VirtualHost configuration:

    192.168.1.100:80 site1.com.br (/etc/apache2/sites-enabled/site1.com.br:1)

    192.168.1.100:443 site1.com.br (/etc/apache2/sites-enabled/site1.com.br:9)

    wildcard NameVirtualHosts and _default_ servers:

    *:443 is a NameVirtualHost

    default server localhost (/etc/apache2/sites-enabled/000-default:57)

    port 443 namevhost localhost (/etc/apache2/sites-enabled/000-default:57)

    port 443 namevhost www.site2.com.br (/etc/apache2/sites-enabled/site2.com.br:9)

    *:80 is a NameVirtualHost

    default server localhost (/etc/apache2/sites-enabled/000-default:4)

    port 80 namevhost localhost (/etc/apache2/sites-enabled/000-default:4)

    port 80 namevhost www.site2.com.br (/etc/apache2/sites-enabled/site2.com.br:1)

    Syntax OK

    Agora acesse o navegador utilizando https e ser exibido o certificado, onde vocpoder exibi-lo e acessar as paginas localhost, site1 e site2 exibindo um cone de umacadeado na barra de endereo e de status do navegador.

    https://localhost/

    51

  • 52

  • 53

  • 54

    Apache