apache.pdf
TRANSCRIPT
-
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