Atualização: A resposta atual está completamente atualizada.
De acordo com esta discussão eu criei um GitHub repositório chamado Assistente de Segurança da WWW . Existe um ramo, chamado
ask_ubuntu
, dedicado a esta resposta. Todas as referências, anteriormente disponíveis aqui , foram removidas devido ao limite de caracteres - elas estão disponíveis no GitHub.
Aqui estão algumas formas pouco exploradas, envolvidas em um mecanismo completo, como aumentar a segurança do Apache2 no Ubuntu 16.04.
Tabela de conteúdo:
- Script do assistente de segurança da WWW (WSAS) ► Iptables
- Iptables - Configuração básica - Salvar e restaurar
- ModEvasive para Apache2
- ModEvasive ► WSAS ► Iptables
- ModSecurity 2.9 para Apache2
- Conjunto de regras principais do OWASP do ModSecurity 3.x
- ModSecurity Rules Whitelisting
- Regras do ModSecurity ► WSAS ► Iptables
- ModSecurity e arquivos de log do Apache
- Arquivos de log do ModSecurity ► Fail2Ban ► Iptables
- GuardianLog do ModSecurity ► HTTPD Guardian ► WSAS ► Iptables
- ModSecurity GuardianLog ► Análise personalizada de HTTPD ► WSAS ► Iptables
Além disso, vamos sempre dizer que é bom usar HTTPS:
Script do Assistente de Segurança da WWW ► Iptables
Aqui é apresentado o script www-security-assistant.bash
. Pode ajudá-lo com o tratamento dos endereços IP maliciosos. O script tem dois modos.
Modo automático
Quando um programa externo, como mod_security
do Apache, fornece um endereço $IP
malicioso. Nesse caso, a sintaxe que chama o script deve ser:
www-security-assistant.bash <ip-address> Guardian
www-security-assistant.bash <ip-address> ModSecurity
www-security-assistant.bash <ip-address> ModEvasive
www-security-assistant.bash <ip-address> a2Analyst
Neste modo, o script fornece dois estágios de ação e, para cada ação, ele envia um email para o (s) administrador (es).
-
Primeiro estágio: para as primeiras 'transgressões' a fonte
$IP
será banida por um período de tempo igual ao valor de$BAN_TIME
. Este modo usa o comandoat
. -
Segundo estágio: quando o número de transgressões de determinado
$IP
for igual ao valor de$LIMIT
, esse endereço$IP
será banido permanentemente por meio de Iptables e será ser adicionado ao$BAN_LIST
.
Modo manual
Este modo aceita as seguintes opções:
-
www-security-assistant.bash <ip-address>
--DROP "log notes"
Cria uma entrada no arquivo
/var/www-security-assistant/iptables-DROP.list
e gera uma regra como:iptables -A GUARDIAN -s $IP -j DROP
-
www-security-assistant.bash <ip-address>
--DROP-CLEAR "log notes"
Cria uma entrada no arquivo
/var/www-security-assistant/iptables-DROP-CLEAR.list
, remove a regra Iptables, remove o$IP
do histórico e do$BAN_LIST
:iptables -D GUARDIAN -s $IP -j DROP
-
www-security-assistant.bash <ip-address>
--ACCEPT "log notes"
Cria apenas uma entrada no arquivo
/var/www-security-assistant/iptables-ACCEPT.list
. -
www-security-assistant.bash <ip-address>
--ACCEPT-CHAIN "log notes"
Cria uma entrada no arquivo
/var/www-security-assistant/iptables-ACCEPT.list
e gera uma regra como:iptables -A GUARDIAN -s $IP -j ACCEPT
Dependências
O script usa iptables-save.sh
e iptables
chain GUARDIAN
, explicados na próxima seção. Ele criará e manterá alguns arquivos dentro do $WORK_DIR
:
-
www-security-assistant.history
- contém os dados das transgressões do IP anterior. -
www-security-assistant.mail
- o conteúdo do último e-mail enviado pelo script. -
%código%;
iptables-ACCEPT.list
eiptables-DROP.list
.
O script precisa de uma configuração mínima para enviar e-mails:
sudo apt install s-nail mutt mailutils postfix
sudo dpkg-reconfigure postfix # For General type: Internet Site
echo 'Test passed.' | mail -s Test-Email [email protected]
Se houver algum serviço HTTPS configurado, seu certificado TLS poderá ser usado no serviço Postfix.
Além disso, o script usa iptables-DROP-CLEAR.list
: at
.
Instalação
-
Crie um diretório de trabalho, vamos chamá-lo de
sudo apt install at
. Faça o download de/var/www-security-assistant
e torne-o executável:sudo mkdir /var/www-security-assistant sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/www-security-assistant.bash -O /var/www-security-assistant/www-security-assistant.bash sudo chmod +x /var/www-security-assistant/www-security-assistant.bash
-
Disponibilize
www-security-assistant.bash
como comando personalizado:sudo ln -s /var/www-security-assistant/www-security-assistant.bash /usr/local/bin/
-
Conceda permissão a
www-security-assistant.bash
para executarwww-data
sem senha viawww-security-assistant.bash
. Use o seguinte comando para create e edite com segurança um novo arquivo com uma regra adicional 'sudo
':sudo visudo -f /etc/sudoers.d/www-security-assistant
Adicione a seguinte linha dentro do arquivo - salve o arquivo e saia:
www-data ALL=(ALL) NOPASSWD: /var/www-security-assistant/www-security-assistant.bash
-
Ajuste
sudoers
. Altere pelo menos o valor da variávelwww-security-assistant.bash
.
Check-up
-
Represente-se como
$EMAIL_TO
e verifique se o modo automático funciona corretamente:www-security-assistant.bash 192.168.1.177 Guardian
Em seguida, verifique seu e-mail, digite
$AGENT
, revise os arquivosiptables -L GUARDIAN -n
ewww-security-assistant.history
. Execute o comando acima 5 vezes e revise os arquivoswww-security-assistant.mail
eiptables-DROP.list
. -
Verifique se o Manual MODE funciona corretamente - adicione seu localhost à Lista Branca:
www-security-assistant.bash 127.0.0.1 --ACCEPT "Server's localhost IP"
Em seguida, verifique o arquivo
iptables-CURRENT.conf
.
A parte restante deste tutorial é como integrar o
iptables-ACCEPT.list
ao seu sistema.
Iptables - Configuração básica - Salvar e restaurar
Configuração básica
Por favor, leia este manual antes de adicionar as seguintes regras.
sudo iptables -F
sudo iptables -I INPUT 1 -i lo -j ACCEPT
sudo iptables -I INPUT 2 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# This rule may lock you out of the system!
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT ACCEPT
Antes de realizar as próximas ações, abra uma nova conexão SSH e tente fazer login no sistema para verificar se tudo está funcionando bem.
Salvar e restaurar
Isso pode ser feito por meio de scripts personalizados, que salvam e restauram o www-security-assistant
coning durante o processo de início de parada (ou reinicialização) do sistema. (Se estivermos usando o UFW para configurar as regras do Iptables, essa etapa não será necessária.)
printf '#!/bin/sh\n/sbin/iptables-save > /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-save.sh
printf '#!/bin/sh\n/sbin/iptables-restore < /var/www-security-assistant/iptables-CURRENT.conf\nexit 0\n' | sudo tee /var/www-security-assistant/iptables-restore.sh
sudo chmod +x /var/www-security-assistant/iptables-restore.sh /var/www-security-assistant/iptables-save.sh
sudo ln -s /var/www-security-assistant/iptables-save.sh /etc/network/if-post-down.d/iptables-save
sudo ln -s /var/www-security-assistant/iptables-restore.sh /etc/network/if-pre-up.d/iptables-restore
Criar nova cadeia
Crie uma nova cadeia, chamada iptables
e insira-a como número 3 na cadeia GUARDIAN
:
sudo iptables -N GUARDIAN
sudo iptables -I INPUT 3 -j GUARDIAN
Check-up
Reinicialize o sistema e verifique a configuração. Por favor use INPUT
(não use a opção de força sudo systemctl reboot
). Quando o sistema está on-line novamente, podemos verificar se a cadeia recém-criada existe:
sudo iptables -L GUARDIAN -n
ModEvasive para Apache2
ModEvasive é um módulo de manobras evasivas para o Apache fornecer ação evasiva no caso de um ataque HTTP DoS ou DDoS ou brute ataque de força. Leia mais ...
Instalação
-
Instale e ative o módulo:
sudo apt install libapache2-mod-evasive sudo a2enmod evasive
-
Crie o diretório de registro e torne-o acessível para
reboot -f
:sudo mkdir -p /var/log/apache2_mod_evasive sudo chown www-data /var/log/apache2_mod_evasive
-
Ajuste a configuração básica - descomente e edite certas diretivas no arquivo de configuração:
/etc/apache2/mods-enabled/evasive.conf
-
Reinicie o Apache:
www-data
.
Check-up
- Abra uma página da web no servidor e atualize a janela do navegador algumas vezes intensivamente (pressione
sudo systemctl restart apache2.service
) - você deve receber a mensagem de erro 403 Forbidden . No diretório de log, será gerado um novo arquivo de bloqueio. Este arquivo deve ser excluído para posterior detecção de transgressões a partir deste endereço IP.
ModEvasive ► WSAS ► Iptables
Aqui, configuraremos F5
para falar com mod_evasive
por meio do iptables
, criado na seção acima.
-
Edite
www-security-assistant.bash
desta forma:<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 9 DOSSiteCount 70 DOSPageInterval 2 DOSSiteInterval 2 DOSBlockingPeriod 10 #DOSEmailNotify [email protected] DOSLogDir "/var/log/apache2_mod_evasive" DOSSystemCommand "sudo /var/www-security-assistant/www-security-assistant.bash %s 'ModEvasive' 'AutoMode' >> /var/www-security-assistant/www-security-assistant.execlog 2>&1" </IfModule>
-
Crie um arquivo de log e reinicie o Apache:
sudo touch /var/www-security-assistant/www-security-assistant.execlog && sudo chown www-data /var/www-security-assistant/www-security-assistant.execlog
Para testar essa configuração, podemos simular o ataque DDOS por meio do método /etc/apache2/mods-available/evasive.conf
, mencionado acima, ou podemos usar comandos como F5
, ab
, etc.
Atenção: Tenha cuidado porque a regra hping3
, usada no WSAS, DROPARÁ todas as conexões novas da origem iptables
, incluindo suas conexões SSH. É bom ter uma maneira de backup para se conectar ao servidor durante os testes. Você pode alterar essa regra para funcionar apenas com as portas HTTP / HTTPS.
ModSecurity 2.9 para Apache2
ModSecurity é um mecanismo de firewall de aplicativos da Web que oferece pouca proteção por conta própria. Para se tornar útil, o ModSecurity deve ser configurado com regras. Para permitir que os usuários aproveitem Vantagem do ModSecurity, o Spider Labs da Trustwave é fornecendo um conjunto de regras certificadas grátis ... Leia mais ...
Instalação
-
Instale e ative o módulo:
sudo apt install libapache2-mod-security2 sudo a2enmod security2
-
Criar arquivo de configuração:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Leia e edite
$IP
cuidadosamente! Adicione ou altere pelo menos as seguintes diretivas:# -- Rule engine initialization ---------------------------------------------- SecRuleEngine On # -- Debug log configuration ------------------------------------------------- SecDebugLogLevel 2 SecDebugLog "/var/log/apache2_mod_security/modsec_debug.log" # -- Audit log configuration ------------------------------------------------- SecAuditLog "/var/log/apache2_mod_security/modsec_audit.log" # -- Guardian log configuration ------------------------------------------------- SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
-
O arquivo
/etc/modsecurity/modsecurity.conf
envolve/etc/apache2/mods-enabled/security2.conf
na configuração do Apache. Neste estágio,/etc/modsecurity/modsecurity.conf
deve ser assim:<IfModule security2_module> SecDataDir /var/cache/modsecurity IncludeOptional /etc/modsecurity/*.conf </IfModule>
-
Criar diretório de registro:
sudo mkdir -p /var/log/apache2_mod_security
-
Rotação do log de configuração. Primeiro crie o arquivo de configuração:
sudo cp /etc/logrotate.d/apache2 /etc/logrotate.d/apache2-modsec
Em seguida, edite o novo arquivo desta maneira:
/var/log/apache2_mod_security/*.log { … }
-
Reinicie o Apache.
Check-up
-
Crie um arquivo de configuração adicional em
security2.conf
, chame-o por exemplo/etc/modsecurity
e adicione a seguinte regra como seu conteúdo:# Directory traversal attacks SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109"
Reinicie o servidor:
z-customrules.conf
. Abra seu navegador e digitesudo systemctl restart apache2.service
. O resultado será: 403 Proibido . Verifique os arquivos de log emhttps://example.com/?abc=../
para mais detalhes. -
Para tornar as coisas mais divertidas , coloque o script
/var/log/apache2_mod_security
em um local apropriado dentro do seuissues.php
(aqui eu estou assumindo que este lugar éDocumentRoot
):sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/appendix/var/www/html/issues.php -O /var/www/html/issues.php
Em seguida, modifique a regra acima da seguinte maneira:
# Directory traversal attacks with redirection (or use URL instead of URI: redirect:'https://example.com/issues.php') SecRule REQUEST_URI "../" "t:urlDecodeUni, deny, log, id:109, redirect:'/issues.php'"
Reinicie o Apache, abra seu navegador e digite
/var/www/html
;-) A ideia é emprestada do script do SEhttps://example.com/?abc=../
. -
Edite
BotLovin.cs
novamente e comente (desative) a regra - este foi apenas um exemplo de teste e é coberto pelo OWASP CRS, descrito na próxima seção. -
Este é outro exemplo em que redirecionaremos todas as solicitações de páginas
/etc/modsecurity/z-customrules.conf
, mas exceto essas de determinados endereços IP (observe owp-admin
):# Block wp-admin access SecRule REQUEST_URI "^/wp-admin" "id:108, log, deny, status:403, t:lowercase, chain, redirect:'/issues.php'" SecRule REMOTE_ADDR "!@ipMatch 192.168.1.11,99.77.66.12"
Aqui temos duas ações disruptivas: (1)
chain
e (2)deny, status:403
. Na verdade, não precisamos da açãoredirect:'/issues.php'
porque ela será substituída pela açãodeny
.
Conjunto de Regras Principais do ModSecurity OWASP 3.x
No Ubuntu 16.04 você pode instalar o CSR 2.x: redirect
. Aqui vamos instalar o CSR 3.x , instruções detalhadas são fornecidas dentro do Manual de instalação ( apt install modsecurity-crs
é obrigatório).
Instalação
-
Clone o CSR na pasta
git
:sudo git clone https://github.com/SpiderLabs/owasp-modsecurity-crs /usr/share/modsecurity-crs.3
-
Atualize e renove automaticamente o banco de dados GeoIP. (O banco de dados GeoIP não está mais incluído no CRS. Em vez disso, é recomendável fazer o download regularmente.) O script
/usr/share/modsecurity-crs.3
traz essa funcionalidade. Você pode usá-lo da seguinte forma no cron -util/upgrade.py
:0 2 * * * /usr/share/modsecurity-crs.3/util/upgrade.py --geoip --crs --cron >> /var/log/apache2_mod_security/owasp-crs-upgrade.log 2>&1
-
Crie arquivos de configuração:
sudo cp /usr/share/modsecurity-crs.3/crs-setup.conf{.example,} sudo cp /usr/share/modsecurity-crs.3/rules/REQUEST-900-EXCLUSION-RULES-BEFORE-CRS.conf{.example,} sudo cp /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf{.example,}
Leia e edite esses arquivos com cuidado! Descomente pelo menos
sudo crontab -e
directive:SecGeoLookupDB util/geo-location/GeoIP.dat
-
Aplique a configuração do Apache. Edite
SecGeoLookupDB
desta forma:<IfModule security2_module> SecDataDir /var/cache/modsecurity IncludeOptional /etc/modsecurity/*.conf IncludeOptional /usr/share/modsecurity-crs.3/crs-setup.conf IncludeOptional /usr/share/modsecurity-crs.3/rules/*.conf </IfModule>
Salve o arquivo e reinicie o Apache.
Regras de segurança do Mod Whitelisting
A lista branca de regras do ModSecurity pode ser feita através das seguintes diretivas do ModSec, que podem ser usadas em todo o sistema ou na configuração do host virtual, também globalmente, para diretórios específicos ou correspondências de localização:
SecRuleRemoveById
SecRuleRemoveByMsg
SecRuleRemoveByTag
SecRuleUpdateTargetById
SecRuleUpdateTargetByMsg
SecRuleUpdateTargetByTag
SecRuleUpdateActionById
Desative /etc/apache2/mods-available/security2.conf
para o PhpMyAdmin. Altere mod_security2
desta forma:
<Directory /usr/share/phpmyadmin>
<IfModule security2_module>
SecRuleEngine Off
</IfModule>
</Directory>
Desativar regras específicas para determinado diretório:
<Directory /var/www/html>
<IfModule security2_module>
SecRuleRemoveById 973301
</IfModule>
</Directory>
Desative as regras globalmente. Para isso, devemos adicionar nossas diretivas em algum lugar nos arquivos de configuração do Apache: /etc/phpmyadmin/apache.conf
é um bom lugar.
-
Desabilite as regras em toda a configuração do Apache:
SecRuleRemoveById 973301 950907
-
Coloque na lista de permissões um endereço IP para poder passar pelo ModSecurity:
SecRule REMOTE_ADDR "@ipMatch 192.168.110.1" "phase:1,nolog,allow,ctl:ruleEngine=Off,ctl:auditEngine=Off"
-
Desativar regras na correspondência de diretório:
<Directory /var/www/mediawiki/core> SecRuleRemoveById 973301 950907 </Directory>
-
Atualize a ação da regra por seu ID na correspondência de local:
<LocationMatch "/index.php.*"> SecRuleUpdateActionById 973301 "pass" SecRuleUpdateActionById 950907 "pass" </LocationMatch>
Nos exemplos acima, assumimos que /etc/modsecurity/z-customrules.conf
e 973301
são IDs de regra que obstruem o trabalho normal de nossos aplicativos da web. Podemos encontrar regras como essas por meio de uma análise de 950907
.
Regras do ModSecurity ► WSAS ► Iptables
Aqui são dados mais alguns exemplos de como criar SecRules personalizados, e também como podemos chamar WSAS (Security Assistant Script) da WWW através deles.
Configuração inicial
Precisamos de um script de inicialização adicional - modsec_audit.log
. A razão é que, a ação modsecurity-assistant.sh
do ModSecurity tem uma sintaxe muito simples e limitada.
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/modsecurity-assistant.sh -O /var/www-security-assistant/modsecurity-assistant.sh
sudo chmod +x /var/www-security-assistant/modsecurity-assistant.sh
Se você olhar dentro do script, verá algumas variáveis que são exportadas pelo ModSecurity. São eles: exec
, $REQUEST_URI
, $ARGS
, $SERVER_NAME
, $REMOTE_ADDR
e $REMOTE_HOST
. As outras variáveis são explicadas dentro do script.
Crie uma regra personalizada e chame nossos scripts por ela
Primeiro, vamos criar uma regra que execute $UNIQUE_ID
(e chame modsecurity-assistant.sh
) quando o URI de solicitação contiver uma palavra incluída em nossa lista negra. Abra www-security-assistant.bash
e adicione as seguintes linhas ao final:
# REQUEST_URI words blacklist
#
SecRule REQUEST_URI "@pmFromFile /var/www-security-assistant/modsecurity-uri-black.list" \
"id:150, log, t:lowercase, chain, \
drop, deny, status:403, redirect:'/issues.php'"
SecRule REMOTE_ADDR "!@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"setenv:REMOTE_HOST=%{REMOTE_HOST}, \
setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
-
/etc/modsecurity/z-customrules.conf
- esta variável contém o URI completo da solicitação atual. A regra pode ser mais ampla:REQUEST_URI
-
SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
lerá o arquivo@pmFromFile
que contém a lista de frases, em que cada frase ou palavra específica é colocada em uma nova linha. Você pode coletar palavras e frases interessantes dos arquivos de log. Se houver uma correspondência específica entremodsecurity-uri-black.list
e nossa lista de padrões, a regra será aplicada. O arquivo pode estar vazio, mas você deve criar (REQUEST_URI
). -
A ação
touch
criará entradas de log nos arquivos de log dessa regra comlog
.
As ações -
id:150
,drop
(comdeny
) estatus
pertencem ao grupo de ações disruptivo , elas devem estar no início da regraredirect
(se houver uma cadeia).A segunda ação substituirá a primeira e a terceira substituirá a segunda, portanto você deve coice que deseja executar e pode excluir as outras. -
chain
action chamará a próxima regra da cadeia, observe que a segunda regra, dosnt, temchain
. -
id
contém o endereço IP da solicitação. -
REMOTE_ADDR
será o arquivo@ipMatchFromFile
que contém a lista branca de endereços IP, separados em novas linhas. Entradas CIDR também são aceitáveis. Como a ação disruptiva está sempre localizada na regra principal da cadeia, ela será aplicada, mas quando determinado IP estiver nessa lista, a açãomodsecurity-ip-white.list
não será aplicada. O arquivo pode estar vazio, mas você deve criar (exec
). -
touch
action chamará nosso script externo. Esta ação não é disruptiva e será executada quando a regra atual retornar true. Quando esta ação é aplicada, o IP remoto será processado por nossos scripts. -
exec
esta ação exportará determinadas variáveis internassetenv
como envvars, os nomes exportados podem ser diferentes dos internos. Algumas variáveis devem ser exportadas manualmente, outras exportadas automaticamente - provavelmente é um pequeno bug (em alguns casos, a exportação manual com os mesmos nomes, por exemplo=%{...}
, causará um valor em branco da variável exportada).
Check-up
Vamos supor que você não tenha o Joomla em seu servidor, edite o arquivo setenv:REQUEST_URI=%{REQUEST_URI}
e adicione uma linha com o conteúdo modsecurity-uri-black.list
. Em seguida, digite seu navegador /joomla
. Você deve ser redirecionado e bloqueado através do Iptables. Limpe os registros https://exemple.com/joomla
, adicione seu IP em sudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
e faça o exercício novamente. Agora você deve ser redirecionado, mas não bloqueado.
Conecte nossos scripts com o Conjunto de Regras Principais do OWASP 3.x
Para fazer isso, atualizaremos a ação padrão das Regras do modo de anomalia (949110 e 959100). Para isso, edite o arquivo modsecurity-ip-white.list
e adicione as próximas linhas ao final:
# -- Anomaly Mode - Update actions by ID -----
#
SecRuleUpdateActionById 949110 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
SecRuleUpdateActionById 959100 "t:none, drop, deny, status:403, redirect:'/issues.php', \
setenv:REMOTE_HOST=%{REMOTE_HOST}, setenv:ARGS=%{ARGS}, \
exec:/var/www-security-assistant/modsecurity-assistant.sh"
# -- Anomaly Mode - Whitelist some URI and IP addresses -----
#
SecRule REQUEST_URI "^/wp-admin/admin-ajax.php*|^/index\.php\?title=.*&action=(submit|raw&ctype=text/javascript|raw&ctype=text/css)$" \
"id:'999010', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
SecRule REMOTE_ADDR "@ipMatchFromFile /var/www-security-assistant/modsecurity-ip-white.list" \
"id:'999020', t:none, phase:1, pass, \
ctl:ruleRemoveById=949110, \
ctl:ruleRemoveById=959100"
Check-up
Não se esqueça de reiniciar (ou recarregar) o Apache para aplicar as alterações de configuração. Não se esqueça de limpar os registros periodicamente durante os testes, caso contrário você pode ser bloqueado permanentemente: -)
Simular ataque de travessia de diretório:
https://example.com/?abc=../../../ # This should be redirected and blocked
https://example.com/wp-admin/admin-ajax.php?abc=../../../ # This should pass because of the whitelist rule
Simular ataque de injeção de SQL:
https://example.com/?username=1'%20or%20'1'%20=%20'1&password=1'%20or%20'1'%20=%20'1
https://example.com/index.php?username=1'%20or%20'1'%20=%20'1'))/*&password=foo
ModSecurity e arquivos de log do Apache
OO servidor web Apache pode ser configurado para fornecer o servidor administrador informações importantes sobre como ele está funcionando ... A principal avenida para fornecer feedback ao administrador é por meio de o uso de arquivos de log. Leia mais ...
ModSecurity possui um poderoso mecanismo de registro. Pela diretiva /usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
Ele fornece um feed de log especialmente projetado para trabalhar com scripts externos.
Atualmente, a única ferramenta conhecida para trabalhar com registro de guardiões é
SecGuardianLog
, que faz parte das ferramentas httpd do Apache projeto . A ferramentahttpd-guardian
foi projetada para se defender contra ataques de negação de serviço. Usa ohttpd-guardian
para interagem com um firewall baseado no iptables, dinamicamente na lista negra os endereços IP ofensivos. Leia mais ...
Arquivos de log do ModSecurity ► Fail2Ban ► Iptables
É possível configurar o Fail2Ban para análise de dados dos arquivos de log do Apache. blacklist tool
é provavelmente a melhor escolha, mas veja também as seções sobre as quais falamos de modsec_audit.log
.
Tome cuidado de que SecGuardianLog
in SecAuditLogRelevantStatus
seja comentado. Caso contrário, todos que receberem uma página de erro 404 serão bloqueados pelo fail2ban.
SecAuditEngine RelevantOnly
#SecAuditLogRelevantStatus "^(?:5|4(?!04))"
Atualmente o Fail2Ban não está implementado de nenhuma forma neste projeto.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
/etc/modsecurity/modsecurity.conf
- detecta ataques de DoS monitorando solicitações Segurança do Apache, Copyright (C) 2005 Ivan Ristic - foi projetado para monitorar todas as solicitações do servidor da web por meio do mecanismo de log de tubulação. Ele acompanha o número de solicitações enviadas de cada endereço IP ... O httpd-guardian pode emitir um aviso ou executar um script para bloquear o endereço IP ...Esse script pode ser usado com o mecanismo de registro do Apache2 ou com ModSecurity (melhor).
Instalação e Configuração nas Circunstâncias Atuais
Faça o download httpd-guardian
e torne-o executável:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-guardian.pl -O /var/www-security-assistant/httpd-guardian.pl
sudo chmod +x /var/www-security-assistant/httpd-guardian.pl
Leia as linhas httpd-guardian
para ver como o script está conectado ao nosso script WSAS.
Aplique a seguinte alteração na configuração do Apache ( 98-119
) e, em seguida, reinicie-a:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
Check-up
Para testar o script, desative o ModEvasive ( /etc/modsecurity/modsecurity.conf
, não esqueça de habilitá-lo mais tarde) e reinicie o Apache. Então sudo a2dismod evasive
o log de exec:
tail -F /var/www-security-assistant/www-security-assistant.execlog
E a partir de outra instância, execute um ataque DoS, por exemplo, use tail
desta forma:
for i in {1..20}; do (ab -n 200 -c 10 https://example.com/ &); done
ModSecGuardianLog ► Análise personalizada ► WSAS ► Iptables
Aqui é apresentado um script simples, chamado ab
, isso não é algo especial, mas poderia ser um bom exemplo. Suas características são descritas no corpo do script.
Instalação e configuração
Faça o download httpd-custom-analyze.bash
e torne-o executável:
sudo wget https://raw.githubusercontent.com/pa4080/www-security-assistant/ask_ubuntu/httpd-custom-analyze.bash -O /var/www-security-assistant/httpd-custom-analyze.bash
sudo chmod +x /var/www-security-assistant/httpd-custom-analyze.bash
Aplique a seguinte alteração na configuração do Apache ( httpd-custom-analyze.bash
) e reinicie-a:
#SecGuardianLog /var/log/apache2_mod_security/modsec_guardian.log
#SecGuardianLog "|/var/www-security-assistant/httpd-guardian.pl"
SecGuardianLog "|/var/www-security-assistant/httpd-custom-analyze.bash"
-
O script chamará o WSAS quando o limite for atingido - leia a linha
/etc/modsecurity/modsecurity.conf
e86
. -
Para que os dois scripts
35
funcionem simultaneamente, editehttpd-
e canalizarmodsecurity.conf
para ambos. -
Para realizar um teste, siga as dicas da seção acima.