Pesquisa de site

Como configurar o servidor Apache autônomo com hospedagem virtual baseada em nome com certificado SSL - Parte 4


Um LFCE (abreviação de Linux Foundation Certified Engineer) é um profissional treinado que tem experiência para instalar, gerenciar e solucionar problemas de serviços de rede em sistemas Linux e é responsável por o design, implementação e manutenção contínua da arquitetura do sistema.

Neste artigo, mostraremos como configurar o Apache para servir conteúdo da web e como configurar hosts virtuais baseados em nome e SSL, incluindo um certificado autoassinado.

Apresentando o Programa de Certificação Linux Foundation (LFCE).

Nota: Este artigo não pretende ser um guia completo sobre Apache, mas sim um ponto de partida para o auto-estudo sobre este tópico para o LFCE exame. Por esse motivo, também não abordaremos o balanceamento de carga com Apache neste tutorial.

Você já deve conhecer outras maneiras de realizar as mesmas tarefas, o que é OK, considerando que a Certificação Linux Foundation é estritamente baseada em desempenho. Assim, contanto que você ‘faça o trabalho’, você terá boas chances de passar no exame.

Requisitos

Consulte a Parte 1 da série atual (“Instalando serviços de rede e configurando a inicialização automática na inicialização”) para obter instruções sobre como instalar e iniciar o Apache.

Agora você deve ter o servidor web Apache instalado e em execução. Você pode verificar isso com o seguinte comando.

ps -ef | grep -Ei '(apache|httpd)' | grep -v grep

Nota: O comando acima verifica a presença de apache ou httpd (os nomes mais comuns para o daemon da web) na lista de processos em execução. Se o Apache estiver em execução, você obterá uma saída semelhante à seguinte.

O método definitivo para testar a instalação do Apache e verificar se ele está funcionando é iniciar um navegador da web e apontar para o IP do servidor. Deveremos receber a seguinte tela ou pelo menos uma mensagem confirmando que o Apache está funcionando.

Configurando o Apache

O arquivo de configuração principal do Apache pode estar localizado em diretórios diferentes dependendo da sua distribuição.

/etc/apache2/apache2.conf 		[For Ubuntu]
/etc/httpd/conf/httpd.conf		[For CentOS]
/etc/apache2/httpd.conf 		[For openSUSE]

Felizmente para nós, as diretivas de configuração estão extremamente bem documentadas no site do projeto Apache. Iremos nos referir a alguns deles ao longo deste artigo.

Servindo páginas em um servidor independente com Apache

O uso mais básico do Apache é servir páginas da web em um servidor independente onde nenhum host virtual foi configurado ainda. A diretiva DocumentRoot especifica o diretório a partir do qual o Apache servirá documentos de páginas da web.

Observe que, por padrão, todas as solicitações são obtidas deste diretório, mas você também pode usar links simbólicos e/ou aliases para apontar para outros locais também.

A menos que corresponda à diretiva Alias (que permite que os documentos sejam armazenados no sistema de arquivos local em vez de no diretório especificado por DocumentRoot), o servidor anexa o caminho da URL solicitada à raiz do documento para criar o caminho para o documento.

Por exemplo, dado o seguinte DocumentRoot:

Quando o navegador da web aponta para [IP do servidor ou nome do host]/lfce/tecmint.html, o servidor abrirá /var/ www/html/lfce/tecmint.html (assumindo que tal arquivo exista) e salve o evento em seu log de acesso com uma resposta 200 (OK).

O log de acesso normalmente é encontrado em /var/log sob um nome representativo, como access.log ou access_log. Você pode até encontrar esse log (e também o log de erros) dentro de um subdiretório (por exemplo, /var/log/httpd no CentOS). Caso contrário, o evento com falha ainda será registrado no log de acesso, mas com uma resposta 404 (Não Encontrado).

Além disso, os eventos com falha serão registrados no log de erros:

O formato do log de acesso pode ser personalizado de acordo com suas necessidades usando a diretiva LogFormat no arquivo de configuração principal, enquanto você não pode fazer o mesmo com o log de erros .

O formato padrão do log de acesso é o seguinte:

LogFormat "%h %l %u %t \"%r\" %>s %b" [nickname]

Onde cada uma das letras precedidas por um sinal de porcentagem indica o servidor para registrar uma determinada informação:

String

Descrição

 %h

 Nome de host remoto ou endereço IP

 %l

 Nome do registro remoto

 %u

 Usuário remoto se a solicitação for autenticada

 %t

 Data e hora em que a solicitação foi recebida

 %r

 Primeira linha de solicitação ao servidor

 %>s

 Status final da solicitação

 %b

 Tamanho da resposta [bytes]

e apelido é um alias opcional que pode ser usado para personalizar outros logs sem a necessidade de inserir toda a cadeia de configuração novamente.

Você pode consultar a diretiva LogFormat [seção de formatos de log personalizados] na documentação do Apache para obter mais opções.

Ambos os arquivos de log (acesso e erro) representam um ótimo recurso para analisar rapidamente o que está acontecendo no servidor Apache. Escusado será dizer que eles são a primeira ferramenta que um administrador de sistema usa para solucionar problemas.

Finalmente, outra diretiva importante é Listen, que diz ao servidor para aceitar solicitações recebidas na porta especificada ou na combinação endereço/porta:

Se apenas um número de porta for definido, o apache escutará a porta especificada em todas as interfaces de rede (o sinal curinga * é usado para indicar ‘todas as interfaces de rede’).

Se o endereço IP e a porta forem especificados, o Apache escutará a combinação de determinada porta e interface de rede.

Observe (como você verá nos exemplos abaixo) que várias diretivas Listen podem ser usadas ao mesmo tempo para especificar vários endereços e portas para escutar. Esta opção instrui o servidor a responder às solicitações de qualquer um dos endereços e portas listados.

Configurando hosts virtuais baseados em nomes

O conceito de host virtual define um site (ou domínio) individual que é servido pela mesma máquina física. Na verdade, vários sites/domínios podem ser servidos em um único servidor “real” como host virtual. Este processo é transparente para o usuário final, para quem parece que os diferentes sites estão sendo servidos por servidores web distintos.

A hospedagem virtual baseada em nome permite que o servidor confie no cliente para relatar o nome do host como parte dos cabeçalhos HTTP. Assim, utilizando esta técnica, muitos hosts diferentes podem compartilhar o mesmo endereço IP.

Cada host virtual é configurado em um diretório dentro de DocumentRoot. Para o nosso caso, usaremos os seguintes domínios fictícios para a configuração de teste, cada um localizado no diretório correspondente:

  1. ilovelinux.com – /var/www/html/ilovelinux.com/public_html
  2. linuxrocks.org – /var/www/html/linuxrocks.org/public_html

Para que as páginas sejam exibidas corretamente, iremos chmod o diretório de cada VirtualHost para 755:

chmod -R 755 /var/www/html/ilovelinux.com/public_html
chmod -R 755 /var/www/html/linuxrocks.org/public_html

Em seguida, crie um arquivo index.html de amostra dentro de cada diretório public_html:

<html>
  <head>
    <title>www.ilovelinux.com</title>
  </head>
  <body>
    <h1>This is the main page of www.ilovelinux.com</h1>
  </body>
</html>

Finalmente, no CentOS e no openSUSE adicione a seguinte seção na parte inferior de /etc/httpd/conf/httpd.conf ou / etc/apache2/httpd.conf, respectivamente, ou apenas modifique-o se já estiver lá.


<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/ilovelinux.com/public_html
     ServerName www.ilovelinux.com
     ServerAlias www.ilovelinux.com ilovelinux.com
     ErrorLog /var/www/html/ilovelinux.com/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/ilovelinux.com/access.log	myvhost
</VirtualHost>
<VirtualHost *:80>
     ServerAdmin [email  
     DocumentRoot /var/www/html/linuxrocks.org/public_html
     ServerName www.linuxrocks.org
     ServerAlias www.linuxrocks.org linuxrocks.org
     ErrorLog /var/www/html/linuxrocks.org/error.log
     LogFormat "%v %l %u %t \"%r\" %>s %b" myvhost
     CustomLog /var/www/html/linuxrocks.org/access.log	myvhost
</VirtualHost>

Observe que você também pode adicionar cada definição de host virtual em arquivos separados dentro do diretório /etc/httpd/conf.d. Se você optar por fazer isso, cada arquivo de configuração deverá ser nomeado da seguinte forma:

/etc/httpd/conf.d/ilovelinux.com.conf
/etc/httpd/conf.d/linuxrocks.org.conf

Em outras palavras, você precisa adicionar .conf ao site ou nome de domínio.

No Ubuntu, cada arquivo de configuração individual é denominado /etc/apache2/sites-available/[nome do site].conf. Cada site é então ativado ou desativado com os comandos a2ensite ou a2dissite, respectivamente, como segue.

a2ensite /etc/apache2/sites-available/ilovelinux.com.conf
a2dissite /etc/apache2/sites-available/ilovelinux.com.conf
a2ensite /etc/apache2/sites-available/linuxrocks.org.conf
a2dissite /etc/apache2/sites-available/linuxrocks.org.conf

Os comandos a2ensite e a2dissite criam links para o arquivo de configuração do host virtual e os colocam (ou removem) no arquivo /etc/apache2/sites-enabled diretório.

Para poder navegar em ambos os sites a partir de outra máquina Linux, você precisará adicionar as seguintes linhas no arquivo /etc/hosts dessa máquina para redirecionar as solicitações desses domínios para um IP específico endereço.


[IP address of your web server]	www.ilovelinux.com
[IP address of your web server]	www.linuxrocks.org 

Como medida de segurança, o SELinux não permitirá que o Apache grave logs em um diretório diferente do padrão /var/log/httpd.

Você pode desabilitar o SELinux ou definir o contexto de segurança correto:


chcon system_u:object_r:httpd_log_t:s0 /var/www/html/xxxxxx/error.log

onde xxxxxx é o diretório dentro de /var/www/html onde você definiu seus Hosts Virtuais.

Após reiniciar o Apache, você deverá ver a seguinte página nos endereços acima:

Instalando e configurando SSL com Apache

Finalmente, criaremos e instalaremos um certificado autoassinado para usar com o Apache. Este tipo de configuração é aceitável em ambientes pequenos, como uma LAN privada.

No entanto, se o seu servidor expor conteúdo ao mundo exterior através da Internet, você desejará instalar um certificado assinado por terceiros para corroborar sua autenticidade. De qualquer forma, um certificado permitirá criptografar as informações transmitidas para, de ou dentro do seu site.

No CentOS e no openSUSE, você precisa instalar o pacote mod_ssl.

yum update && yum install mod_ssl 		[On CentOS]
zypper refresh && zypper install mod_ssl	[On openSUSE]

Já no Ubuntu você terá que habilitar o módulo SSL para Apache.

a2enmod ssl

Os passos a seguir são explicados usando um servidor de testes CentOS, mas sua configuração deve ser quase idêntica nas outras distribuições (se você tiver algum tipo de problema, não hesite em deixar suas dúvidas usando os comentários forma).

Etapa 1 [Opcional]: Crie um diretório para armazenar seus certificados.

mkdir /etc/httpd/ssl-certs

Etapa 2: Gere seu certificado autoassinado e a chave que irá protegê-lo.

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/ssl-certs/apache.key -out /etc/httpd/ssl-certs/apache.crt

Uma breve explicação das opções listadas acima:

  1. req -X509 indica que estamos criando um certificado x509.
  2. -nodes (NO DES) significa “não criptografar a chave”.
  3. -dias 365 é o número de dias durante os quais o certificado será válido.
  4. -newkey rsa:2048 cria uma chave RSA de 2048 bits.
  5. -keyout /etc/httpd/ssl-certs/apache.key é o caminho absoluto da chave RSA.
  6. -out /etc/httpd/ssl-certs/apache.crt é o caminho absoluto do certificado.

Etapa 3: Abra o arquivo de configuração do host virtual escolhido (ou sua seção correspondente em /etc/httpd/conf/httpd.conf conforme explicado anteriormente) e adicione as seguintes linhas ao uma declaração de host virtual escutando na porta 443.

SSLEngine on
SSLCertificateFile /etc/httpd/ssl-certs/apache.crt
SSLCertificateKeyFile /etc/httpd/ssl-certs/apache.key

Observe que você precisa adicionar.

NameVirtualHost *:443

no topo, logo abaixo

NameVirtualHost *:80

Ambas as diretivas instruem o Apache a escutar nas portas 443 e 80 de todas as interfaces de rede.

O exemplo a seguir foi retirado de /etc/httpd/conf/httpd.conf:

Em seguida, reinicie o Apache,

service apache2 restart 			[sysvinit and upstart based systems]
systemctl restart httpd.service 		[systemd-based systems]

E direcione seu navegador para https://www.ilovelinux.com. Você verá a seguinte tela.

Vá em frente e clique em “Eu entendo os riscos” e “Adicionar exceção”.

Por fim, marque “Armazenar esta exceção permanentemente” e clique em “Confirmar exceção de segurança”.

E você será redirecionado para sua página inicial usando https.

Resumo

Neste post mostramos como configurar o Apache e a hospedagem virtual baseada em nome com SSL para proteger a transmissão de dados. Se por algum motivo você tiver algum problema, sinta-se à vontade para nos informar usando o formulário de comentários abaixo. Teremos o maior prazer em ajudá-lo a realizar uma configuração bem-sucedida.

Leia também

  1. Hospedagem virtual baseada em Apache IP e baseada em nome
  2. Criando hosts virtuais Apache com opções de ativação/desativação de Vhosts
  3. Monitore o “Servidor Web Apache” usando a ferramenta “Apache GUI”