Você está na página 1de 54

Apache

O servidor www um servidor em uma rede TCP/IP onde utiliza o protocolo


HTTP(HyperText Transfer Protocol Protocolo de transferncia de HiperTexto) que so
as 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 em
sistemas Linux / Unix que responde pelas requisies das conexes das pginas.

Nesta captulo ser mostrado o servidor www apache, onde ser instalado e
configurado 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 implementadas
regras de iptables com NAT como mostrado abaixo para redirecionar as requisies
externas da internet para o servidor web (apache) da rede local (Veja a aula do
Roteador 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

Instalao do apache

Para instalar o apache no Debian utilize o comando apt-get e no Fedora yum, ou se


preferir baixar e instalar pelo arquivo fonte (.tar.gz ou .tar.bz2) acesse o site do apache
http://httpd.apache.org/.
Aproveite para instalar o suporte ao PHP no apache para criao de pginas dinmicas
para 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 ser
adaptado facilmente para utilizar em outras distribuies Linux.

Fedora
No Fedora o diretrio onde so armazenadas as pginas fica em /var/www/html e o
arquivo 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 os
arquivos de configurao do apache em /etc/apache2, onde so separados e divididos
da seguinte forma:

apache2.conf arquivo de configurao global do apache.


httpd.conf - arquivo onde armazena o nome do host, endereo IP ou endereo
de loopback (localhost ou 127.0.0.1) do computador onde est executando o
apache
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 ficam


armazenados os sites, mas enquanto no estiverem habilitados, no estaro
disponveis.
/etc/apache2/sites-enabled - diretrio de sites habilitados, onde ficam
armazenados os links simblicos para sites, vale lembrar que no necessrio
criar os links simblicos com o comando ln -s, pois no Debian podemos criar links
para os sites com o comando utilitrio do apache a2ensite, e remover com
a2dissite.

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 de


configurao do apache /etc/apache2/apache2.conf (baseado no Debian).

Exibe informaes sobre o servidor apache, como verso utilizada, sistema operacional
e mdulos. Por padro vem configurado como Full (mostra tudo), recomendamos
utilizar 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 adicionado
uma barra / no final da linha.

ServerRoot "/etc/apache2"

Este linha indica o diretrio onde sero armazenadas as pginas dos sites, por padro
ela no vem especificada, portanto voc poder inclu-la no arquivo de configurao do
apache.
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 sua


resposta. 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,


configurando esse nmero para 0 sero permitidas conexes ilimitadas,
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 mesma


conexo.
KeepAliveTimeout 15

<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>

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


MinSpareServers: especifica o nmero mnimo de processos do servidor nos quais
so mantidos sobressalentes (mantidos de reserva).
MaxSpareServers: especifica o nmero mximo de processos do servidor que so
mantidos sobressalentes.
MaxClients: especifica o nmero mximo de processos do servidor que sero
inicializados.
MaxRequestsPerChild: especifica o nmero mximo de requisies de um processo
no 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 pelo
apache
AccessFileName .htaccess

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 a
resoluo 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

Iniciando o apache

Debian
# /etc/init.d/apache2 start
ou
# apache2ctl start

Para habilitar ou desabilitar o apache no Debian, edite o arquivo global


/etc/default/apache2, e configure o valor da varivel NO_START=0 para habilitar na
inicializao 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.

# 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 apache
ou de hosts virtuais, execute o comando:
# /etc/init.d/apache2 reload

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


comando:
# 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 so


colocados em um diretrio especfico e as diretivas de configuraes se aplicam para
aquele diretrio e todos os seu subdiretrios.

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

Portanto em um ISP(Provedor de hospedagem sites) ou grandes empresas com vrios


departamentos, adicionar configuraes a usurios ou membros de um site, se torna
complicado de fazer o gerenciamento para cada usurio novo ter que adicionar ao
arquivo de configurao global do apache.

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

Para proteger arquivos criados em diretrios, utilizado o recurso de autenticao de


usurios e senhas, onde criado um arquivo .htaccess dentro dos diretrios a serem
protegidos.

11

Agora edite o arquivo /etc/apache2/apache2.conf e adicione as seguintes linhas,


aps a diretiva AccessFileName .htaccess

AccessFileName .htaccess

<Directory /var/www/diretorio_protegido>
Options FollowSymLinks Indexes
AllowOverride AuthConfig
</Directory

Repare que no final da linha que contm no nome do diretrio protegido


/var/www/diretorio_protegido no tem uma barra /.

Acima a diretiva Options(Opes) especifica que permite links simblicos apenas no


diretrio protegido (FollowSymLinks) e que liste o contedo do diretrio (Indexes).

Para permitir o uso de arquivos .htaccess a diretiva AllowOverride deve ser


configurada para AuthConfig, e para desativar None.

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

# mkdir /var/www/diretorio_protegido

Mude o dono e o grupo do diretrio para o usurio aluno1, onde pode ser feito atravs
de qualquer editor de texto.

12

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

Agora crie o arquivo .htaccess como usurio no diretrio


/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 que


ser criado com o comando utilitrio do apache htpasswd. Para criar o arquivo pela
primeira vez utilize a opo -c, mas na prxima vez que executar o comando para criar
o prximo usurio, no necessrio.

Mude as permisses, dono e grupo para o usurio do apache do arquivo de senhas com
o 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 do


final do arquivo.

Crie um apelido para o diretrio com a diretiva Alias, apontando para o cominho
completo do diretrio.
Alias /membros/ "/var/www/diretorio_protegido/

14

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

<Location /membros/>
AuthName "Accesso Retrito"
AuthType Basic
AuthUserFile /var/www/diretorio_protegido/.membros
require valid-user
</Location>

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 senhas


que ser criado com o comando utilitrio do apache htpasswd. Para criar o arquivo
pela primeira vez utilize a opo -c, mas na prxima vez que executar o comando para
criar o prximo usurio, no necessrio.

15

Mude as permisses, dono e grupo para o usurio do apache do arquivo de senhas com
o 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 raiz
do seu site pessoal para cada usurio. Isso til quando existe muitos usurios no
sistema e em grandes empresas, provedores de hospedagem ou universidades.

Edite o arquivo /etc/apache2/apache2.conf e adicione a diretiva UserDir


public_html no final do arquivo.

16

UserDir public_html

Para utilizar a diretiva UserDir necessrio carregar o mdulo userdir para o diretrio
de mdulos habilitados /etc/apache2/mods-enabled/, onde voc pode fazer um link
simblico manualmente com o comando ln -s ou utilizar o comando utilitrio do apache
a2enmod 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 do
usurio indicando para o apache ler o diretrio local do usurio
(/home/usuario/public_html ou ~/usuario/public_html, repare o diretrio configurado
na diretiva UserDir o mesmo utilizado no diretrio local de cada usurio, e o apache
deve 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 arquivo


qualquer.

$ 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 todos


subdiretrios 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 servidor


apache.

Agora mude as permisses recursivamente no diretrio, onde d permisses total para


o usurio local e ao apache e nenhuma permisso para outros (770), e repare que foi
ativado o bit setgid (2770), isso far com que quando o usurio criar um novo arquivo
no diretrio ~/usuario/public_html, ser atribudo no grupo o usurio do apache
automaticamente 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 atribudo
automaticamente 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 apontar
vrios nomes de hosts para um nico nome de host no sistema, onde possvel
criar entradas CNAME ou A no DNS (Bind) para apontar para um nico host.
Esse mtodo utiliza apenas um endereo IP respondendo por vrios hosts
virtuais na configurao do apache, ficando mais fcil para o gerenciamento
caso voc altere os endereos IP do seu servidor web.

Baseado em IP: esse mtodo requer vrios endereos IP na configurao do


apache, portanto torna-se mais difcil o gerenciamento caso tenha que alterar os
endereos IP.

Resumindo, o mtodo Baseado em nomes requer apenas um endereo IP para responder


por vrios hosts virtuais e Baseado em IP requer vrios endereos IP, onde cada host
virtual 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 roteador
NAT (onde mostra o recurso IP Aliasing para atribuir vrios endereos IP nas mesma
placa de rede e redirecionar conexes externas para um servidor da rede local com o
firewall iptables) e tenha instalado e configurado em um computador de sua rede, crie
os 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 os


endereos 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 para


o 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 de


zona 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 est


configurado com os endereos IP do servidor DNS primrio master (dns1) e secundrio
slave (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 para
hospedar centenas de sites virtuais e no precisa de criar vrios endereos IP com IP
Aliasing.

Configurao do servidor DNS Bind

A configurao DNS abaixo indica que uma configurao baseada em nomes, pois as
linhas que contm registros A especificando um endereo IP(baseado em IP) que esto
em 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 virtual
site1.com.br para o servidor web principal da rede que mantm o domnio principal
dominio.com.br que responde pelos domnios virtuais.

Eis aqui um exemplo onde o novo domnio virtual site1.com.br aponta para o servidor
web 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 o
mesmo 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 e


repare 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 teste com o comando ping, e veja quem responde pelos hosts
virtuais(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 servidor


web 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 est


configurado com os 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 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 domnios
virtuais 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 domnio
virtual site1.com.br) e site2.com.br (para o domnio virtual site2.com.br), acessando o
diretrio /etc/apache2/sites-available/ e crie um link simblico utilizando o comando
a2enmod 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 diretiva
VirtualHost *, j no Fedora dever especificar o endereo IP do servidor web aps a
diretiva NameVirtualHost 192.168.1.10 e VirtualHost 192.168.1.10 como mostra
o exemplo abaixo:

33

Fedora
NameVirtualHost 192.168.1.10

<VirtualHost 192.168.1.10>
ServerName www.site1.com.br
ServerAdmin root@site1.com.br
DocumentRoot "/var/www/site1/"
ErrorLog "/var/log/apache2/site1.error_log"
TransferLog "/var/log/apache2/site1.acccess_log"
</VirtualHost>

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


Debian.

Debian

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

<VirtualHost *>
ServerName www.site1.com.br
ServerAdmin root@site1.com.br
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


</VirtualHost>

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

<VirtualHost *>
ServerName www.site2.com.br
ServerAdmin root@site2.com.br
DocumentRoot "/var/www/site2/"
ErrorLog "/var/log/apache2/site2.error_log" # log de erros
CustomLog "/var/log/apache2/site2.acccess_log" commom # log de acesso
personalizado
</VirtualHost>

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 procedimento
para o site2.

<html>
<head>
<title> ### Ttulo do Site 1 ### </title>
<body>
<center><h1>Aqui vai o contedo do Site 1 </h1></center>
</body>
</html>

Reinicie o apache e acesse cada um dos hosts virtuais com o navegador web
acessando 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, e
faa 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, onde
cada endereo IP dever ser especificado na diretiva <VirtualHost>. Portanto isso causa
problema de gerenciamento, caso voc altere os endereos IP freqentemente e no
tem 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 virtuais


estejam cadastrados no arquivo do DNS Bind em named.conf, e que seja criadas
entradas em seus arquivos de zonas e zonas reversas como foi mostrado acima na
configurao do DNS para hosts virtuais.

Verifique se o arquivo de resoluo de nomes /etc/resolv.conf est configurado com


os 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 DNS
no 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 no
servidor 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 no
servidor 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 criado
com 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 de


zona 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 servidor
dns slave para cada domnio virtual.

Por exemplo, para atualizar a zona do domnio virtual site1.com.br alteramos o valor
do serial na seguinte linha do arquivo de zona do domnio e faa o mesmo para o
domnio 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 atualizados
no 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 est


configurado com os 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 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 usados
endereos IP diferentes para cada host virtual

# /etc/apache2/sites-available/site1.com.br
<VirtualHost 192.168.1.100>
ServerName site1.com.br
ServerAdmin root@site1.com.br
DocumentRoot "/var/www/site1/"
ErrorLog "/var/log/apache2/site1.error_log" # log de erros
TransferLog "/var/log/apache2/site1.acccess_log" # log de acesso
</VirtualHost>

# /etc/apache2/sites-available/site2.com.br
<VirtualHost 192.168.1.101>
ServerName site1.com.br
ServerAdmin root@site1.com.br
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 acesso


personalizado
</VirtualHost>

A configurao acima exige cada um desses endereos IP vinculados a interface de


rede no servidor, onde so criados com o recurso IP Aliasing, onde permite atribuir
vrios endereos IP na mesma placa de rede.

Neste exemplo iremos utilizar os endereos IP virtuais 192.168.1.100 e


192.168.1.101 para os domnios virtuais site1.com.br e site2.com.br, onde devem
ser 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 procedimento
para o site2.

<html>
<head>

<title> ### Ttulo do Site 1 ### </title>


<body>
<center><h1>Aqui vai o contedo do Site 1 </h1></center>
</body>
</html>

44

Reinicie o apache e acesse cada um dos hosts virtuais com o navegador web
acessando 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, e
faa 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 Host


no Debian Etch

Para configurar o apache com suporte a SSL e PHP para gerar certificados e utilizar o
protocolo 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 para
habilitar e configurar o suporte a SSL.

Gerando um certificado auto-assinado

Este captulo mostra como criar um certificado auto-assinado e configurando virtuais


hosts usando conexes https na porta 443.

Antes de seguir em frente vale lembrar que os certificados auto-assinados exibem


mensagens quando so acessados via navegador usando https, mas isso no tem
nenhum problema.

Os certificados auto-assinados no so comerciais ou pblicos, eles servem para


conexes seguras dos seus clientes pelo navegador para reas de segurana ou de
administrador como cadastrados ou login de autenticao de usurios.

Se voc no quiser que exiba essas mensagens, ento voc ter que comprar um
certificado em sites especializados em emisso de certificados. Se voc quiser gerar
seus prprios certificados SSL com apache2 ento siga os passos abaixo usando
openssl.

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 o
certificado chamado apache2-ssl-certificate, j no Debian Etch necessrio utilizar o
comando 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 o
seu estado
Locality Name (eg, city) []: So Paulo - Informe a sua cidade
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Linux
Brasil - Informe o nome da sua empresa ou organizao
Organizational Unit Name (eg, section) []: Linux Avancado - Informe o
departamento da sua empresa ou organizao
Common Name (eg, YOUR name) []: www.linuxbrasil.org.br - Informe o
nome do seu site
Email Address []: contato@linuxbrasil.org.br - 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 []:contato@linuxbrasil.org.br

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 precisamos
habilitar o suporte a conexes SSL editando o arquivo /etc/apache2/ports.conf e adicionando a
linha 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


</VirtualHost>
######################################################
<VirtualHost 192.168.1.100:443>
ServerName site1.com.br
ServerAdmin root@site1.com.br
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
</VirtualHost>

49

# /etc/apache2/sites-available/site2.com.br
<VirtualHost *:80>
ServerName www.site2.com.br
ServerAdmin root@site2.com.br
DocumentRoot "/var/www/site2/"
ErrorLog "/var/log/apache2/site2.error_log"
CustomLog "/var/log/apache2/site2.acccess_log" commom
</VirtualHost>

######################################################
<VirtualHost *:443>
ServerName www.site2.com.br
ServerAdmin root@site2.com.br
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
</VirtualHost>

Agora voc precisa reiniciar o apache

# /etc/init.d/apache2 restart

50

Execute o comando abaixo, e repare que agora os virtuais hosts esto configurados
para 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 voc
poder exibi-lo e acessar as paginas localhost, site1 e site2 exibindo um cone de uma
cadeado na barra de endereo e de status do navegador.

https://localhost/

51

52

53

54