<Directory /var/www/zeldani/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>E mude para:
<Directory /var/www/zeldani/> Options -Indexes Options -FollowSymLinks AllowOverride None Require all granted </Directory>Depois reinicie o Apache: $ sudo service apache2 restart
- Escondendo a versão do Apache e OS:
Quando instalamos o Apache, ele mostra a versão do servidor, sistema operacional e informações sobre os módulos nas páginas de Erro. Para esconder esses detalhes, edite o arquivo de configuração:
$ sudo vim /etc/apache2/apache2.conf
Adicione as linhas:
$ sudo vim /etc/apache2/apache2.conf
ServerSignature Off ServerTokens ProdE reinicie o Apache.
- Personalizando Páginas de Erro:
No diretório do site, vamos criar os arquivos erro_404.html, erro_403.html e erro_50x.html:
$ echo "<h1 style='color:purple'>404 Página não encontrada (∩︵∩)</h1>" | sudo tee /var/www/html/zeldani/erro_404.html
$ echo "<h1 style='color:purple'>403 Acesso Negado</h1>" | sudo tee /var/www/html/zeldani/erro_403.html<
$ echo "<h1 style='color:purple'> Ooops! Alguma coisa deu errado... :-(</h1>" | sudo tee /var/www/html/zeldani/erro_50x.html
$ sudo vim /etc/apache2/sites-enabled/zeldani/zeldani.conf
Adicionar o diretivo ErrorDocument para associar os erros com as páginas de erro e o bloco Files para o Apache responder com as páginas de erro:
<VirtualHost *:80> . . . ErrorDocument 404 /erro_404.html ErrorDocument 403 /erro_403.html ErrorDocument 500 /erro_50x.html ErrorDocument 502 /erro_50x.html ErrorDocument 503 /erro_50x.html ErrorDocument 504 /erro_50x.html <Files "erro_404.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/erro_404.html$ </If> </Files> <Files "erro_403.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/erro_403.html$ </If> </Files> <Files "erro_50x.html"> <If "-z %{ENV:REDIRECT_STATUS}"> RedirectMatch 404 ^/erro_50x.html$ </If> </Files> </VirtualHost>Testando a sintaxe: $ sudo apache2ctl configtest
Não encontrando erro, reinicie o apache.
- Limitando Requisições:
<Directory /var/www/zeldani/>
Options -Indexes
AllowOverride None
LimitRequestBody 1048576
Require all granted
</Directory>
- Desabilitando Módulos:
Para melhor segurança e perfomance de memória, é recomendado desabilitar os módulos que não estão sendo usados. Para listar os módulos usados:
$ sudo ls /etc/apache2/mods-enabled/
ou
$ sudo apache2ctl -M
ou
$ sudo apache2ctl -M
Para desabilitar: $ sudo a2dismod nome-modulo
Os módulos: mpm_prefork, autoindex, env, negotiation, reqtimeout podem ser removidos na maioria dos ambientes. Depois de fazer as alterações, é so reiniciar o apache.
- Habilitando o ModSecurity:
O Mod security é um IDS (sistema de proteção contra intrusões) baseado em regras, que funciona com o Apache, Nginx e IIS. Usado para monitorar o trafico http em tempo real, logging e controle de acesso, prevenindo ataques como sqli, xss, bots, etc.
Instalando o Mod Security: $ sudo apt-get install libapache2-modsecurity
Para habilitar o modulo: $ sudo a2enmod security2
Para desabilitar: $ sudo a2dismod security2
Para habilitar o modulo: $ sudo a2enmod security2
Para desabilitar: $ sudo a2dismod security2
Para ver se está rodando: $ sudo apachectl -M | grep --color security
O retorno security2_module (shared) mostra que o módulo está carregado.
Renomeie o arquivo de configuração:
$ sudo mv /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Depois reinicie o Apache.
Edite o arquivo modsecurity.conf:
$ sudo vim /etc/modsecurity/modsecurity.conf
Vamos configurar o mecanismo de regras para processar e interceptar as transações mudando a linha SecRuleEngine DetectionOnly para SecRuleEngine On, e a diretiva ResponseBodyAccess On para SecResponseBodyAccess Off, para desativar as respostas armazenadas em buffer, diminuindo o arquivo de log.
Regras personalizadas podem ser adicionadas a qualquer arquivo de configuração ou colocados nos diretorios do modsecurity. Vamos criar um novo arquivo:
Regras personalizadas podem ser adicionadas a qualquer arquivo de configuração ou colocados nos diretorios do modsecurity. Vamos criar um novo arquivo:
$ sudo vim /etc/modsecurity/modsecurity_zeldani_rules.conf
Exemplos de Regras:
A regra a seguir verifica se existe o parâmetro <script> na requisição e header:
Para bloquear uma url especifica:
Exemplos de Regras:
A regra a seguir verifica se existe o parâmetro <script> na requisição e header:
SecRule ARGS|REQUEST_HEADERS "@rx <script>" \ "id:9990101,msg: 'Ataque XSS',severity:ERROR,deny,status:404"ARGS – parâmetros requisitados, REQUEST_HEADERS – todos os headers, “@rx <script>” – expressão regular para encontrar o <script>, ID - pode ser qualquer número desde que seja único, msg - mensagem a ser exibida nos logs, severity - gravidades da regra: EMERGENCY (0), ALERT (1), CRITICAL (2), ERROR (3),WARNING (4), NOTICE (5), INFO (6) e DEBUG (7), deny - intercepta a transação, status - especifica o status da resposta.
Para bloquear uma url especifica:
SecRule REQUEST_URI "login.php" \ "id:'9990102',severity:'3',deny,msg:'Pagina proibida - login.php',status:403"Verifica se o parâmetro usuario é admin, redirecionando a página:
SecRule ARGS_GET:usuario "@contains admin" \ "id:9990103,phase:1,t:lowercase,deny,redirect:https://www.facebook.com"
O ModSecurity analiza os dados http(s) por 5 fases - REQUEST_HEADERS, REQUEST_BODY, RESPONSE_HEADERS, RESPONSE_BODY e LOGGING. No phase:1 ele faz uma requisição do header. As variáveis ARGS_GET é uma coleção que age como {"chave":"valor"}, quando requisitamos uma variável o ModSecurity vai iterar em cada valor verificando e transformando cada operador.
Para bloquear spams, podemos usar o operador @pmFromFile para ler um arquivo com uma lista de palavras a serem bloqueadas:
Para bloquear spams, podemos usar o operador @pmFromFile para ler um arquivo com uma lista de palavras a serem bloqueadas:
SecRule ARGS "@pmFromFile /usr/local/lista_spam.txt" \ "id:9990104,t:lowercase,deny,msg:'Lovely Spam! Wonderful Spam!'"Para permitir um IP:
SecRule REMOTE_ADDR "@ipMatch 74.125.226.180" \ id:999105,phase:1,t:none,nolog,pass,ctl:ruleEngine=off
SecRuleRemoveById 999105
- Logs de Erro:
$ sudo tail -f /var/log/apache2/error.log | grep ModSec
Para facilitar a visualização das regras usadas:
$ sudo grep ModSecurity /var/log/apache2/error.log | sed -e 's#^.*\[id "\([0-9]*\).*hostname "\([a-z0-9\-\_\.]*\)"\].*uri "#\1 \2 #' | cut -d\" -f1 | sort -n | uniq -c | sort -n
- Instalando o mod_evasive:
Para instalar: $ sudo apt-get install libapache2-mod-evasive
Para habilitar: $ sudo a2enmod evasive
Para desabilitar: $ sudo a2dismod evasive
Depois reinicie o apache.
Para configurar, adicione as seguintes linhas no arquivo /etc/apache2/apache.conf:
<IfModule evasive_module> DOSHashTableSize 2048 DOSPageCount 5 DOSSiteCount 100 DOSPageInterval 1 DOSSiteInterval 2 DOSBlockingPeriod 10 DOSEmailNotify zeldani@zeldani.com #DOSSystemCommand "su - zeldani -c '/sbin/... %s ...'" DOSLogDir "/var/log/mod_evasive" </IfModule>
O mod_evasive não cria o diretorio de log, então temos que criar ele:
$ sudo mkdir /var/log/mod_evasive
$ sudo chown :www-data /var/log/mod_evasive
$ sudo chmod 771 /var/log/mod_evasive
$ sudo mkdir /var/log/mod_evasive
$ sudo chown :www-data /var/log/mod_evasive
$ sudo chmod 771 /var/log/mod_evasive
Para testar vamos usar o ApacheBench, enviando 100 requisições em 10 requisições simultâneas, causando um DoS:
$ sudo ab -n 100 -c 10 http://74.125.226.180/
Podemos ver nos logs de acesso que as conexões do ApacheBench foram negadas com o 403: $ sudo tail /var/log/apache2/access.log
74.125.226.180 - - [26/Dec/2018:09:44:21 -0500] "GET / HTTP/1.0" 403 346 "-" "ApacheBench/2.3"
https://www.techrepublic.com/article/how-to-secure-your-apache-2-server-in-four-steps/
https://www.digitalocean.com/community/tutorials/how-to-set-up-mod_security-with-apache-on-debian-ubuntu
https://haydenjames.io/strip-apache-improve-performance-memory-efficiency/
https://nature.berkeley.edu/~casterln/modsecurity/html-multipage/03-configuration-directives.html
https://www.success.grownupgeek.com/index.php/2013/04/07/use-mod_security-to-block-ip-addresses/
https://www.nuharborsecurity.com/securing-apache-ubuntudebian/
https://www.unixmen.com/protecting-apache-server-denial-service-dos-attack/
https://support.kemptechnologies.com/hc/en-us/articles/209635223-How-to-write-a-WAF-rule-Modsecurity-Rule-Writing
https://hub.packtpub.com/blocking-common-attacks-using-modsecurity-25-part-3/
https://www.modsecurity.org/CRS/Documentation/making.html
https://malware.expert/modsecurity/processing-phases-modsecurity/
0 comentários:
Postar um comentário