13 dicas de segurança para o Apache [Artigo]
Neste artigo irei discutir algumas dicas de segurança que podem ser aplicadas em diversos servidores web com o Apache, utilizando uma instalação do Ubuntu Server 20.04 LTS.
[ Hits: 7.408 ]
Por: Diego Mendes Rodrigues em 03/09/2020 | Blog: https://www.linkedin.com/in/diegomendesrodrigues/
Neste artigo irei discutir algumas dicas de segurança que você pode aplicar em seu servidor web, o Apache, numa instalação em um Ubuntu Server 20.04 LTS. Antes de iniciar este material você precisa ter algumas noções básicas relativas ao servidor Apache:
Diretório root: /var/www/html
Arquivo principal de configurações: /etc/apache2/apache2.conf
Porta padrão HTTP: 80 TCP
Porta padrão HTTPS: 443 TCP
Como testar seus arquivos de configuração: httpd -t
Arquivos de log de acesso do servidor web: /var/log/http/access_log
Arquivos de log de erros do servidor web: /var/log/http/error_log
Como esconder a versão do Apache e o sistema operacional nas páginas de erro
Quando você instala o Apache utilizando o código fonte, ou o gerenciador de pacotes apt, ele exibe a versão do Apache, além do sistema operacional quando uma página de erro é retornada ao usuário final. Outras informações que também podem ser exibidas, são as relativas aos módulos instalados em seu servidor.
Na imagem acima, você pode ver que o Apache está exibindo a versão dele, além de qual o sistema operacional utilizado no servidor. Esta pode ser uma falha de segurança na sua infraestrutura e no seu servidor, disponibilizando informações para quem deseja conseguir um acesso indevido ao equipamento. Para prevenir o Apache de mostrar essas informações, devemos realizar algumas configurações nos arquivos de configurações.
Abra seu arquivo de configurações utilizando o editor de textos preferido e procure por ServerSignature, sendo que ele está definido por padrão com On. Defina como "Off" essa configuração, além disso, a próxima linha ServerTokens Prod diz para o Apache retornar como um produto apenas no cabeçalho de resposta ao servidor, omitindo assim a exibição do sistema operacional e suas versões.
Desabilitar a listagem de diretórios
Por padrão o Apache lista todo o conteúdo dos diretórios que não possuam um arquivo de índice, como o index.html, index.htm, index.php, dentre outros. Observe a listagem na próxima imagem.
Podemos desabilitar essa listagem utilizando a diretiva Options no arquivo de configuração para um diretório especifico que desejarmos. Para isso, devemos alterar o arquivo apache2.conf da seguinte forma:
Continue atualizando seu Apache regularmente
A comunidade do Apache trabalha continuamente nos problemas de segurança, disponibilizando atualizações e novas versões, possuindo elas novas opções de segurança. Portanto, é altamente recomendado que seja utilizada a última versão do Apache no seu servidor.
Para checar a versão do seu apache, utilize:
Para atualizar, use o comando apt.
Não esqueça de atualizar também seu Kernel e sua distribuição Linux, com as últimas versões estáveis, a não ser que você esteja executando uma aplicação que precise de uma versão especifica do Kernel.
Desabilite os módulos desnecessários
É sempre bom minimizar as chances de ser vítima de qualquer ataque na web. Então é recomendado que sejam desabilitados todos os módulos que não estejam sendo realmente utilizados.
Para listar todos os módulos compilados no seu servidor web, utilize o seguinte comando:
Na lista acima de módulos do meu servidor web que estão ativos por padrão, mas não são necessários, são: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Para desabilitá-los, devo inserir o caractere # no início de cada linha, e depois, reiniciar o serviço do Apache.
Execute o Apache em um Usuário e um Grupo separado
Na instalação padrão o processo do Apache é executado com o usuário nobody ou daemon. Por razões de segurança, recomenda-se que ele seja executado em uma conta própria sem privilégios, como por exemplo: http-web.
Nos próximos comandos, iremos criar um novo usuário e um novo grupo no servidor.
Agora que o usuário foi criado, você precisa informar ao Apache que ele deve ser executado com ele. Para isso, precisa alterar o arquivo /etc/httpd/conf/httpd.conf, e depois reiniciar o serviço do Apache.
Abra o arquivo /etc/httpd/conf/httpd.conf com seu editor de textos e procure pelas palavras "User" e "Group", onde você precisa agora especificar os novos username e groupname.
Utilize Allow e Deny para restringir o acesso aos diretórios
Podemos restringir o acesso aos diretórios com as opções "Allow" e "Deny" no arquivo de configuração httpd.conf. No exemplo abaixo, estamos atribuindo segurança no diretório raiz, definindo as seguintes configurações no httpd.conf:
Options None: esta opção desabilita os usuários de ativar configurações adicionais.
Order deny, allow: nesta ordem, as diretivas Deny e Allow serão processadas. Portanto, primeiro a negação (deny) e depois a permissão (allow).
Deny from all: aqui negamos o acesso ao diretório raiz da aplicação para todos, ou seja, nenhum usuário poderá acessar esse diretório.
Utilize os módulos mod_security e mod_evasive na segurança do Apache
Estes dos módulos, mod_security e mod_evasive, são muito populares em termos de segurança para o Apache.
O mod_security atua como um firewall para suas aplicações web e viabiliza que você monitore o tráfego em tempo real. Estas funcionalidades permitem que você possa proteger seus websites, ou seu servidor web, de atraques de força bruta (brute force attacks). Você pode simplesmente instalar o mod_security com os gerenciadores de pacotes, como o apt no Ubuntu.
O mod_evasive funciona de forma muito eficiente, trabalhando nas requisições que são enviadas para o servidor web. Ele previne que ataques DDOS consigam causar muitos danos na conexão do servidor, além de cuidar de ataques como HTTP brute force e DOS.
A instalação pode ser realizada através do seu código fonte. Caso você tenha interesse no processo de instalação, segue o material que recomendo a leitura: Protect Apache Against Brute Force or DDoS Attacks Using Mod_Security and Mod_evasive Modules
Desabilitar que o Apache siga os links simbólicos
Por padrão, o Apache segue os links simbólicos (symlinks), mas podemos desabilitar essa configuração com opção FollowSymLinks na diretiva Options. Para isso, devemos realizar essa alteração no arquivo de configuração principal do Apache.
Caso um usuário, ou website, precise utilizar os links simbólicos, você pode escrever uma regra no arquivo .htaccess deste site.
Para habilitar as regras de reescrita no .htaccess, devemos ter AllowOverride All no arquivo de configuração global.
Desabilitar a execução de CGI e Server Side Includes
Podemos desabilitar a execução de server side includes (mod_include) e de CGIs, caso não sejam necessários no seu servidor web, através de uma pequena alteração no arquivo de configuração do Apache.
Caso você queira desabilitar apenas em um determinado diretório, como /var/www/html/web1, esta configuração também pode ser feita, da seguinte forma:
Seguem alguns valores que podem ser utilizados, para habilitar ou desabilitar, na diretiva Options:
Options All: para habilitar todas as opções de uma única vez. Esse é o valor padrão, caso você não deseje especificar algum valor especifico no arquivo de configuração ou no .htaccess.
Options IncludesNOEXEC: esta opção habilita os server side includes, porém inviabilizando a execução dos arquivos CGI.
Options MultiViews: permite a negociação do conteúdo multiviews com o módulo mod_negotiation.
Options SymLinksIfOwnerMatch: é similar ao FollowSymLinks, embora neste caso, o link será seguido apenas se o dono dele for, o mesmo do link e do diretório original.
Limite o tamanho da requisição Request
Por padrão, o Apache não possui um limite no tamanho total da requisição HTTP Request, ou seja, o tamanho é ilimitado! Esta configuração é perigosa, pois permite que sejam realizadas requisições muito grandes e você seja vitima de um ataque Denial of service. Podemos limitar esse tamanho utilizando a diretiva do Apache LimitRequestBody na configuração de diretórios.
Nessa configuração, podemos definir um valor em bytes de 0 (ilimitado) até 2147483647 (2GB), que será permitido em uma requisição de request. Você pode limitar esse valor de acordo com as necessidades de seu site, como por exemplo, imagine que você liberou o upload de arquivos no seu site, mas deseja definir o tamanho máximo desses arquivos.
Neste exemplo, configuro que os arquivos que serão enviados pelos usuários finais, no diretório user_uploads, possuem um limite de 500K.
Proteção de ataques DDOS
Não podemos realmente proteger completamente seu website de um ataque DDOS, mas temos várias diretivas de configuração do Apache que podem te ajudar a controlar esse tipo de situação.
TimeOut: essa diretiva permite que você defina o limite de tempo que o servidor irá esperar para que certos eventos aconteçam, antes de falar. O valor padrão é de 300 segundos, embora seja bom manter esse valor mais baixo para prevenir ataques DDOS. Este valor depende muito do tipo de requisição que será executada em seu site.
MaxClients: define o limite de conexões que serão disponibilizadas simultaneamente. Toda nova conexão será empilhada e ficará aguardando, após esse limite ser atingido. Essa diretiva está disponível nas MPMs Prefork e Worker, sendo o valor padrão de 256.
KeepAliveTimeout: quantidade de tempo que o servidor irá aguardar por uma próxima requisição, antes de fechar a conexão atual. O valor padrão é de 5 segundos.
LimitRequestFields: nos ajuda a definir o limite no número de requisições HTTP que serão aceitas dos clientes. Por padrão esse valor é 100, sendo recomendado diminuir para um valor aceitável ao seu website, caso ataques DDOS estejam acontecendo como o resultado de muitas conexões HTTP.
LimitRequestFieldSize: define o tamanho máximo dos cabeçalhos das requisições HTTP.
Habilitar o logging do Apache
O Apache habilita que você crie logs independentes ao do sistema operacional. É aconselhável habilitar o logging do Apache, pois ele provê mais informações, como por exemplo, os comandos utilizados pelos usuários que interagiram com seu servidor web.
Para realizar essa configuração você deve incluir o módulo mod_log_config, sendo que, existem três principais diretivas de logging utilizadas pelo Apache.
TransferLog: criar arquivos de log.
LogFormat: especificar um formato diferente.
CustomLog: criar e formatar um arquivo de log.
Você pode também utilizar as configurações de log para um website especifico, quando está utilizando o Virtual hosting. No exemplo abaixo, mostro como configurar os logs para um site específico.
Segurança do Apache com certificados SSL
Por último, mas não menos importante, iremos falar dos certificados SSL. Eles viabilizam a comunicação segura e criptografada do seu website! Suponhamos que você possua um site que possui um formulário de login, onde o usuário final precisa digitar as credenciais (usuário/senha) para acessá-lo, ou que você possua um e-commerce, onde devemos prover informações muito sensíveis, como dados bancários ou detalhes do cartão de crédito. Caso o servidor web trabalhe na forma padrão, todas essas informações serão enviadas como um texto puro através da internet! Ao utilizar um certificado SSL e o protocolo HTTPS, o Apache envia toda a informação de forma segura, através de um texto criptografado.
Você pode comprar certificados SSL de diferentes provedores, como Comodo, NameCheap, DigiCert, dentre outros. Caso esteja disponibilizando um servidor empresarial pequeno e não queira investir em um certificado SSL, pode criar um certificado auto assinado para seu website. Outra opção também é utilizar um certificado Let´s Encrypt, que é gratuito e vale por 90 dias, podendo ser renovado quantas vezes forem necessárias. Caso tenha interesse em utilizar o Let´s Encrypt, busque informações adicionais na internet, pois o processo de criação e instalação dele é muito simples.
Espero que as informações apresentadas nesse material te ajudem a deixar seu servidor web mais seguro! Você usa esse tipo de configuração em seu servidor? Ou utiliza outra configuração?
1. 13 dicas de segurança para o Apache
[1] Comentário enviado por mauricio123 em 03/09/2020 - 13:33h
São boas dicas. Muito bom.
São boas dicas. Muito bom. ___________________________________________________________ [code]Conhecimento não se Leva para o Túmulo. https://github.com/MauricioFerrari-NovaTrento [/code]