em Sem categoria

Tutorial Avançado de Apache

Introdução

Nessa artigo descreverei como instalar e configurar um servidor apache, instalar e ativar o suporte a PHP e monitora-lo, ou seja, veremos um passo a passo dos processos que regem a configuração de um servidor WEB.
[editar]
Pacotes

Veremos agora os pacotes que são necessários para instalação

Apache – http://www.apache.org

Awstats ” http://awstats.sourceforge.net

Nikto – http://www.cirt.net/code/index.shtml

php ” http://www.php.net

ssl- http://www.openssl.org

MySql ” http://mysql.com
[editar]
Observação

A distro usada nesse artigo é o Debian, devendo os passos serem adaptados a distribuição que o usuário estiver usando

[editar]
Instalando os Pacotes

Como vamos instalar nosso servidor Apache com suporte a php e ssl primeiro vamos instalar esses pacotes, o ssl em algumas distribuições Linux já vem por padrão instalado. Se estiver usando o Debian para instalar o ssl basta:

apt-get install openssl

ou após fazer o downloads do pacote no site www.openssl.org

cd
tar ”zxvf openssl-X.X.X (onde o X corresponde a versão do openssl)
./config
make
make teste
make install

apt-get install mysql-server-4.1

[editar]
Compilando o Apache

A instalação do apache e bem simples de se fazer, basta baixar o httpd (nome do servidor apache) descompactar

tar -zxvf httpf-x.x.xx.tar.gz

O x corresponde a versão do apache que ate o momento em que escrevia esse artivo e a 2.0.53. Vamos compilar o apache com suporte a ssl (Security soquet layer), para tal basta no prompt digitarmos a seginte sintaxe:

./configure –prefix=/usr/local/apache2 –enable-module=so –enable-ssl

Agora vamos compila -lo e instala ” lo para tal basta usar os comandos:

make
make install

Após compilado terá que ser criado um link para que o apache se inicializa junto com o sistema, como mandamos que o apache fosse instalado no /usr/apache2053, o arquivo que faz o servidor carregar chama-se apachectl arquivo este que se encontra dentro de apasta bin.

ln -s /usr/apache2053/bin/apachectl /etc/init.d/apache2

[editar]
Compilando o PHP

Crie no diretório raiz a pasta php

mkdir php

Baixe o binário do php para a pasta que acabou de criar. Descompacte o binário que se encontra dentro da pasta:

tar -jxvf php-X.X.X.tar.bz2

(note que o X representa a versão do php, até quando escrevia essa artivo a versão mais nova do php e 5.0.3)

Primeiramente vamos compilar o PHP adicionando ele ao nosso servdor apache para isso

./configure ”with -apxs2=/usr/apache2053/bin/apxs ”with-gettext ”with-mysql

[editar]
Configuração do Servidor Apache

O arquivo de configuração do Apache chama-se httpd.conf, ( /etc/apache/httpd.conf) com o seu editor de texto favorito (vi, vim, joe e etc). Primeira coisa a ser feita e procurar pela string NameVirtualHost, e com essa string que daremos o endereço local do nosso servidor, ou seja, o endereço de Ip da maquina.

Ex.: 192.168.1.2

Logo abaixo veremos a seguinte diretiva

É através dessa diretiva que será configurado os sites do nosso servidor, para cada site hospedado , terá obrigatoriamente de haver uma diretiva como a acima devidamente configurada.
[editar]
1° Passo

Descomentar toda a diretiva

#
ServerAdmin [email protected]_domain.com
DocumentRoot /www/docs/host.some_domain.com
ServerName host.some_domain.com
ErrorLog logs/host.some_domain.com-error.log
CustomLog logs/host.some_domain.com-access.log common

[editar]
2° Passo

Configurar o endereço do servidor

Substituir toda string _default_:*>#
ServerAdmin [email protected]_domain.com
DocumentRoot /www/docs/host.some_domain.com
ServerName host.some_domain.com
ErrorLog logs/host.some_domain.com-error.log
CustomLog logs/host.some_domain.com-access.log common

[editar]
3° Passo

Configurar um email do administrador, para isso so ir na diretiva ServerAdmin e colocar o email do administrador


ServerAdmin [email protected]
DocumentRoot /www/docs/host.some_domain.com
ServerName host.some_domain.com
ErrorLog logs/host.some_domain.com-error.log
CustomLog logs/host.some_domain.com-access.log common

[editar]
4° Passo

Definiremos agora aonde os arquivos da paginas hospedadas no servidor, se encontrarão. Por padrão o apache usa o diretório www, mas você pode perfeitamente mudar esse diretório basta configurar a diretiva corretamente. Para definirmos onde as paginas se encontrarão configuraremos a diretiva DocumentRoot. Lembre-se que os exemplos contidos nesse texto são meramente ilustrativo.


ServerAdmin [email protected]
DocumentRoot /var/www/mario
ServerName host.some_domain.com
ErrorLog logs/host.some_domain.com-error.log
CustomLog logs/host.some_domain.com-access.log common

[editar]
5° Passo

Definiremos agora o nome do site a ser hospedado, para isso basta alterar a diretiva ServerName.


ServerAdmin [email protected]
DocumentRoot /var/www/mario
ServerName www.mario.com.br
ErrorLog logs/host.some_domain.com-error.log
CustomLog logs/host.some_domain.com-access.log common

[editar]
6° Passo

Configuraremos agora onde se encontrará o log de erro do Apache, isto se torna necessário para que o administrador possa ter uma maior controle sobre os tipos e a freqüência os erros ocorrem no servidor. A diretiva ErrorLog e que se incumbirá de armazenar o log de erro onde nos desejarmos.


ServerAdmin [email protected]
DocumentRoot /var/www/mario
ServerName www.mario.com.br
ErrorLog /var/log/apache/error_mario.log
CustomLog logs/host.some_domain.com-access.log common

No exemplo acima, o nosso ErrorLog foi configurado pra salvar um arquivo de log com o nome do site, isso é muito importante para podermos diferenciar os logs de erro, então todo site deverá ter um ErrorLog “personalizado”, colocando ainda por cima o log de erro dentro do diretório de log do sistema /var/log.
[editar]
7° Passo

Agora configuraremos a diretiva que irá determinar os acessos ao site hospedado em nosso servidor, isso e importante pra podermos gerar estatística de acesso dos sites. A diretiva chama- ser CustomLog. Direcionaremos ela da mesma forma que fizemos com a diretiva ErrorLog, ou seja, pra dentro do diretório de log do sistema e com o nome do nosso site.


ServerAdmin [email protected]
DocumentRoot /var/www/mario
ServerName www.mario.com.br
ErrorLog /var/log/apache/error_mario.log
CustomLog /var/log/apache/access_mario.log

A essa diretiva temos ainda a possibilidade de adicionar duas opções:

Commom: so registra que há o acesso.

Combined: faz registro detalhado de acesso do Servidor


ServerAdmin [email protected]
DocumentRoot /var/www/mario
ServerName www.mario.com.br
ErrorLog /var/log/apache/error_mario.log
CustomLog /var/log/apache/access_mario.log combined

Nesse caso geraremos uma arquivo de log bem detalhado.

Veja como ficou a configuração da nossa diretiva


ServerAdmin [email protected]
DocumentRoot /var/www/leandro
ServerName www.mario.com.br
ErrorLog /var/log/apache/error_mario.log
CustomLog /var/log/apache/access_mario.log combined

Agora e hora de salvarmos as alterações e reiniciar o apache. A forma de reiniciar o serviço do apache varia de acordo com a distribuição, no meu caso eu uso o Debian para reinicia-lo basta digitar no prompt a seguinte linha de comando /etc/init.d/apache restart

Após reiniciado vamos fazer um teste com nosso servidor, para isso vamos criar uma arquivo de texto dentro da pasta /var/www/mario/index.html. Colocando qualquer coisa dentro do mesmo, lembre- se esse arquivo e so um teste para ver se nosso servidor esta funcionando. Após criar o arquivo vá no seu browser favorito e digite o endereço lacalhost, no meu caso 192.168.1.2

Agora veremos a estatística de aceso do nosso servidor, para isso basta usar o comando tail (devo ressaltar que este comando server para ver qualquer tipo de log do sistema)

tail -f /var/log/apache/access_mario.log

[editar]
Ativando Suporte a PHP

Para Configurarmos o PHP, editaremos o arquivo de configuração do Apache: httpd.conf localziando e alterando as seguintes strings:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Procure a diretiva abaixo e adicione a seguinte string na frete dela: index.php
DirectoryIndex index.html

[editar]
Monitorando e criando estatísca do servidor

Para fazermos a análise do nosso servidor usaremos o Awstats, programa esse que serve para analisar log de servidores Web e FTP dentre outros. Descompacte o programa no diretório /usr/local , entre no diretório onde o mesmo foi descompactado e acesse a pasta tools. Nesta pasta existe uma arquivo em perl chamado awstats_configure.pl. Agora veremos as etapas de configuração do Awstats:

1° No prompt digite: # perl awstats_configure.pl
2° Ele vai perguntar se quer seguir, responda sim
3° Você terá de indicar onde se encontra o httpd.conf (/etc/apache/httpd.conf)
4º Será criado o arquivo de configuração do awstats
5° Colocar o domínio que se deseja (www.mario.com.br)
6° Usar default para o diretório em que o arquivo de configuração do awstats se encontrará (/etc)
7° Em seguida ele criara os arquivos e pedirá que pressione enter finalizando assim a instalação.

Agora que o awstats já esta instalado, vamos editar o seu arquivo de configuração. Vamos para o diretório /etc/awstats/awstats.www.mario.com.br.conf, para adicionarmos novos sites basta copiar este arquivo de configuração apenas renomeando-o e fazendo as devidas modificações. Já dentro do arquivo de configuração procurar as seguintes diretivas:

LogFile coloque o caminho para o arquivo de log que foi criado anteriromente (/var/log/apache/access_mario.log). Muito importante ressaltar que o caminho se encontra e deve ficar entre aspas.

Site Domain é o domínio do site (www.mario.com.br)

DirData ” Diretório onde serão armazenadas as informações de processamento do log /var/www/mario/relatório, pode reparar que o diretório relatório não existe, devendo ser criado na respectiva pasta.

Agora para finalizar basta procurar a diretiva lang e altera -la para:

lang = “br”, caso salguem esteja usando o Debian por padrão ele vem como auto, não se esqueça de
colocar tudo com letra minúscula e dentro das aspas.

Agora e so salvar o as alterações.

Gerando o relatório: /usr/cgi-bin

./awstats.pl -config=domínio_do_site -update -output > /var/www/leandro/relatorio/index.html

Após este comando restart o servidor Apache

Obs.:

1) No Débian basta usar o seguinte comando para instalar o awstats:

apt-get install ”fu awstats

Para criar o arquivo de configuração basta usar o comando cp (cópia) renomeando o arquivo awstats.conf para o nome do seu site respectivamente. Exemplo:

cp /etc/awstats/awstats.conf/ /etc/awstats/awstats.www.mario.com.br.conf

E configura-lo conforme indicado acima.

2) Não esquecer do sinal de igual quando for gerar o relatório

Para fazer a estatística atualizar autimaticamente basta adicionar no crontab as seguintes linhas:

01 * * * * root /usr/lib/cgi-bin/awstats.pl -config=nomedomeiodoarquivo -update

Exemplo: 01 * * * * root /usr/lib/cgi-bin/awstats.pl -config=www.site.com.br -u pdate

No meu caso as estatísticas são atualizadas de hora em hora usando como arquivo de configuração awstats.www.site.com.br.conf.
[editar]
Análise de Vulnerabilidades do Servidor Apache

Agora vamos descompactar e instalar o Nikto (veremos sua utilidade mais a frente) Vá ao diretório onde ser encontra o binário do Nikto e descompacte com a seguinte sintaxe:

tar -zxvf nikto-1.34.tar.gz

Para configurar

/nikto.pl -update (isso irá atualizar a base de dados pra quando for sanear o servidor)

Para scanear uma maquina:

./nikto.pl ”allcgi ”h localhost

onde:

allcgi = usa todos os scripts CGI da base de dados pra scanear -h = define um host a ser scaneado localhost = nome do host
[editar]
Corrigindo as vulnerabilidades

1° passo: editar o arquivo httpd.conf dentro do mesmo procure a diretiva icons na diretiva options remover a diretiva index procurar a diretiva manual e substituir a diretiva Allow from all por Deny from all

após alteradas as diretivas acima salvar o arquivo e restartar o apache.
[editar]
Criando Autenticação no servidor Apache

Para criar um processo de autenticação do servidor apache, devemos criar dentro do diretório que se quer proteger (/var/www/Mario/relatório) um arquivo com o nome de .htacces

vi /var/www/Mario/relatório/.htacces

(lembre- se que isso e somente um exemplo, na hora devendo ser adaptado ao diretório que html que esta usando)

Devemos então colocar dentro desse arquivo o seguinte conteúdo:

AuthType Basic
AuthName “Área Restrita”
AuthUserFile /var/www/Mario/usuario ( caminho completo do arquivo de usuário e senha)
Require valid-user (faz com que seja pedido usário e senha)

Depois de digitar o conteúdo acima, salve e saia do arquivo. Agora criaremos o arquivo de usuário:

htpasswd ”c /var/www/usuario admin

Onde usuário é o arquivo de usuário e admin e o nome do usuário

Esse usuário que criamos é o administrador, para criarmos usuários posteriormente basta digitarmos a linha acima, uma vez que todos os usuários ficam no mesmo arquivo, somente retira ”se o ”c e no lugar de admin o nome do usuário que se deseja adicionar.

Para finalizar temos que configurar o Apache para proteger o diretório, logo abaixo da string do site criar a seguinte diretiva:

vi /etc/apache/httpd.conf

(lembre-se o caminho é entre aspas)
AllowOverride AuthConfig
Order Allow,Deny
Allow from all