Eu largo todo o tráfego nas portas, exceto na 80 para o meu servidor web.
Eu tenho algumas regras como esta no iptables:
iptables -A INPUT -p tcp -m tcp --dport 80 -m string --string "cgi" --algo bm --to 1000 -j DROP
Alguém que tem mais pode compartilhar? Eu sei sempre que os hackers ruins ainda estão atualizando, mas alguns sempre começam com o mesmo código. Preciso interromper a conexão com base em alguns critérios. Aqui estão alguns logs do Apache (eu removo ips, mas cada ataque vem do mesmo):
Ataque 1: Isso eu não sei o que está tentando fazer, mas faça 50 vezes do mesmo ip
GET / HTTP/1.1 301 224 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
GET / HTTP/1.1 302 3387 - Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.152 Safari/537.22
Ataque 2: esta tentativa de obter informações apenas sobre o servidor.
GET / HTTP/1.1 301 224 http://myip:80/ Go-http-client/1.1
GET / HTTP/1.1 302 3228 http mywebsite Go-http-client/1.1
GET /es/ HTTP/1.1 200 40947 https mywebsite Go-http-client/1.1
Ataque 3: eles tentam obter acesso a uma vulnerabilidade da página de login
GET /userlogin/login.aspx HTTP/1.1 302 186 - -
Ataque 4: esta tentativa de acessar um cgi na primeira solicitação (veja minha primeira regra do iptables para largar isso)
GET /hndUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
GET /tmUnblock.cgi HTTP/1.0 302 186 - Wget(linux)
Eu sou muito novo com o servidor, esses 4 ataques são apenas das últimas 12 horas ... Tem milhares por semana.
Respostas:
A seguir, são exibidas algumas maneiras, envolvidas em um mecanismo completo, de como aumentar a segurança do Apache2 no Ubuntu 16.04.
Tabela de conteúdo:
Além disso, digamos que é sempre bom usar HTTPS:
Script do Assistente de Segurança da WWW ► Iptables
Aqui é apresentado o script
www-security-assistant.bash
. Isso pode ajudá-lo no manuseio de endereços IP maliciosos. O script tem dois modos.Modo automático
Quando um programa externo, como o Apache
mod_security
, fornece um$IP
endereço malicioso . Nesse caso, a sintaxe que chama o script deve ser:Nesse modo, o script fornece dois estágios de ação e, para cada ação, envia um email ao (s) administrador (es).
Primeira etapa: nas primeiras 'transgressões', a fonte
$IP
será banida por um período igual ao valor de$BAN_TIME
. Este modo usa o comandoat
.Segunda etapa: quando o número de transgressões de certas
$IP
se tornar igual ao valor de$LIMIT
, esse$IP
endereço será banido permanentemente através do Iptables e 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: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 de Iptables, remove$IP
o histórico e$BAN_LIST
: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:Dependências
O script usa
iptables-save.sh
e aiptables
cadeiaGUARDIAN
, explicada na próxima seção. Ele criará e manterá alguns arquivos dentro do$WORK_DIR
:www-security-assistant.history
- contém os dados para as transgressões do IP anterior.www-security-assistant.mail
- o conteúdo do último email enviado pelo script.iptables-ACCEPT.list
;iptables-DROP.list
eiptables-DROP-CLEAR.list
.O script precisa de uma configuração mínima para enviar emails:
Se houver algum serviço HTTPS configurado, seu certificado TLS poderá ser usado no serviço Postfix.
Além disso, o script usa
at
:sudo apt install at
.Instalação
Crie um diretório de trabalho, vamos chamá-lo
/var/www-security-assistant
. Faça o downloadwww-security-assistant.bash
e torne-o executável:Disponibilize
www-security-assistant.bash
como comando personalizado:Conceda permissão para
www-data
executarwww-security-assistant.bash
sem senha viasudo
. Use o seguinte comando para criar e editar com segurança um novo arquivo com umasudoers
regra adicional ' ':Adicione a seguinte linha dentro do arquivo - salve o arquivo e saia:
Tweak
www-security-assistant.bash
. Mude pelo menos o valor da variável$EMAIL_TO
.Checar
Represente-se
$AGENT
e verifique se o MODO Automático funciona corretamente:Em seguida, verifique seu e-mail, digite
iptables -L GUARDIAN -n
, revise os arquivoswww-security-assistant.history
ewww-security-assistant.mail
. Execute o comando acima 5 vezes e revise os arquivosiptables-DROP.list
eiptables-CURRENT.conf
.Verifique se o MODO Manual funciona corretamente - adicione seu host local à Lista Branca:
Em seguida, verifique o arquivo
iptables-ACCEPT.list
.Iptables - Configuração básica - Salvar e restaurar
Configuração básica
Por favor, leia este manual antes de adicionar as seguintes regras.
Antes de executar as próximas ações, abra uma nova conexão SSH e tente fazer login no seu sistema para verificar se tudo está funcionando bem!
Salvar e restaurar
Isso pode ser conseguido por meio de scripts personalizados, que salvarão e restaurarão o
iptables
cone durante o processo de parada-partida (ou reinicialização) do sistema. (Se usarmos o UFW para configurar as regras do Iptables, essa etapa não será necessária.)Criar nova cadeia
Crie uma nova cadeia, chamada
GUARDIAN
e insira-a como número 3 naINPUT
cadeia:Checar
Reinicie o sistema e verifique a configuração. Por favor, use
sudo systemctl reboot
(não use a opção forçarreboot -f
). Quando o sistema está on-line novamente, podemos verificar se a cadeia recém-criada existe:ModEvasive for Apache2
Instalação
Instale e ative o módulo:
Crie o Diretório de Log e torne-o acessível para
www-data
:Ajuste a configuração básica - remova o comentário e edite determinadas diretivas no arquivo de configuração:
Reinicie o Apache:
sudo systemctl restart apache2.service
.Checar
F5
) - você deve receber a mensagem de erro 403 Proibida . No diretório de log, será gerado um novo arquivo de bloqueio. Este arquivo deve ser excluído para detecção adicional de transgressões deste endereço IP.ModEvasive ► WSAS ► Iptables
Aqui vamos configurar
mod_evasive
para conversariptables
através dowww-security-assistant.bash
, criado na seção acima.Edite
/etc/apache2/mods-available/evasive.conf
desta maneira:Crie um arquivo de log e reinicie o Apache:
Para testar esta configuração podemos simular ataque DDOS através do
F5
método, acima referido, ou se pode usar um comandos comoab
,hping3
etc.Atenção: Tenha cuidado porque a
iptables
regra, usada no WSAS, derrubará todas as novas conexões da fonte$IP
, incluindo as conexões SSH. É bom ter uma maneira de backup para conectar-se ao servidor durante os testes. Você pode alterar esta regra para funcionar apenas com as portas HTTP / HTTPS.ModSecurity 2.9 para Apache2
Instalação
Instale e ative o módulo:
Crie um arquivo de configuração:
sudo cp /etc/modsecurity/modsecurity.conf-recommended /etc/modsecurity/modsecurity.conf
Leia e edite com
/etc/modsecurity/modsecurity.conf
cuidado! Adicione ou altere pelo menos as seguintes diretivas:O arquivo
/etc/apache2/mods-enabled/security2.conf
envolve/etc/modsecurity/modsecurity.conf
a configuração do Apache. Nesta fase,security2.conf
deve ter a seguinte aparência:Criar diretório de log:
Configurar rotação do log. Primeiro crie o arquivo de configuração:
Em seguida, edite o novo arquivo desta maneira:
Reinicie o Apache.
Checar
Crie um arquivo de configuração adicional
/etc/modsecurity
, chame-o, por exemploz-customrules.conf
, e adicione a seguinte regra como conteúdo:Reinicie o servidor:
sudo systemctl restart apache2.service
. Abra seu navegador e digitehttps://example.com/?abc=../
. O resultado será: 403 Proibido . Verifique os arquivos de log/var/log/apache2_mod_security
para obter mais detalhes.Para tornar as coisas mais divertidas, coloque o script
issues.php
em um local apropriado dentro do seuDocumentRoot
(aqui estou assumindo que este lugar seja/var/www/html
):Modifique a regra acima da seguinte maneira:
Reinicie o Apache, abra o navegador e digite
https://example.com/?abc=../
;-) A idéia é emprestada do script do SEBotLovin.cs
.Edite
/etc/modsecurity/z-customrules.conf
mais uma vez e comente (desative) a regra - este foi apenas um exemplo de teste e é coberto pelo OWASP CRS, descrito na próxima seção.Aqui está outro exemplo em que redirecionaremos todas as
wp-admin
solicitações de página, mas exceto essas de determinados endereços IP (observe ochain
):Aqui temos duas ações disruptivas: (1)
deny, status:403
e (2)redirect:'/issues.php'
. Na verdade, não precisamos dadeny
ação, porque ela será substituída pelaredirect
ação.Conjunto de regras principais do ModSecurity OWASP 3.x
No Ubuntu 16.04 você pode instalar 2.x CSR:
apt install modsecurity-crs
. Aqui instalaremos o CSR 3.x , são fornecidas instruções detalhadas no manual de instalação (git
é necessário).Instalação
Clone o CSR na pasta
/usr/share/modsecurity-crs.3
:Atualize e renove automaticamente o banco de dados GeoIP. (O banco de dados do GeoIP não está mais incluído no CRS. Em vez disso, é recomendável fazer o download regularmente.) O script
util/upgrade.py
traz essa funcionalidade. Você pode usá-lo da seguinte maneira no cron -sudo crontab -e
:Crie arquivos de configuração:
Leia e edite esses arquivos com cuidado! Remova o comentário pelo menos
SecGeoLookupDB
diretiva:Aplique a configuração do Apache. Edite
/etc/apache2/mods-available/security2.conf
desta maneira:Salve o arquivo e reinicie o Apache.
Lista de permissões de regras do ModSecurity
A lista de permissões das 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 local:
Desative
mod_security2
para PhpMyAdmin. Mude/etc/phpmyadmin/apache.conf
desta maneira:Desative regras específicas para determinado diretório:
Desative regras globalmente. Para esse fim, precisamos adicionar nossas diretivas em algum lugar nos arquivos de configuração do Apache:
/etc/modsecurity/z-customrules.conf
é um bom lugar.Desative regras dentro de toda a configuração do Apache:
Coloque um endereço IP na lista de permissões para que ele possa passar pelo ModSecurity:
Desabilite as regras na correspondência do Diretório:
Atualize a ação da regra pelo seu ID na correspondência Local:
Nos exemplos acima, assumimos que
973301
e950907
são IDs de regra que obstruem o trabalho normal de nossos aplicativos da web. Podemos encontrar regras como essas analisandomodsec_audit.log
.Regras do ModSecurity ► WSAS ► Iptables
Aqui estão mais alguns exemplos de como criar SecRules personalizados, e também como podemos chamar o WSAS (Security Assistant Script) através deles.
Configuração inicial
Precisamos de um script de inicialização adicional -
modsecurity-assistant.sh
. A razão é que, aexec
ação do ModSecurity tem sintaxe muito simples e limitada.Se você olhar dentro do script, verá algumas variáveis exportadas pelo ModSecurity. Estes são:
$REQUEST_URI
,$ARGS
,$SERVER_NAME
,$REMOTE_ADDR
,$REMOTE_HOST
e$UNIQUE_ID
. 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 será executada
modsecurity-assistant.sh
(e chamadawww-security-assistant.bash
) quando o URI da solicitação contiver uma palavra incluída em nossa lista negra. Abra/etc/modsecurity/z-customrules.conf
e adicione as seguintes linhas na parte inferior:REQUEST_URI
- essa variável contém o URI completo da solicitação atual. A regra é mais ampla:SecRule REQUEST_URI|ARGS|REQUEST_BODY ...
@pmFromFile
lerá o arquivomodsecurity-uri-black.list
que contém a lista de frases, onde 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 entreREQUEST_URI
e nossa lista de padrões, a regra será aplicada. O arquivo pode estar vazio, mas você deve criá-touch
lo ( ).A
log
ação criará entradas de log nos arquivos de log para esta regra comid:150
.drop
,deny
(withstatus
) eredirect
ações pertencem ao grupo disruptivo de ações, elas devem estar no início da regrachain
(se houver uma cadeia). A segunda ação substituirá a primeira e a terceira substituirá a segunda; portanto, você deve escolher qual deseja executar e pode excluir as outras.chain
ação chamará a próxima regra da cadeia, observe que a segunda regra não possuiid
.REMOTE_ADDR
contém o endereço IP da solicitação.@ipMatchFromFile
irá o arquivomodsecurity-ip-white.list
que contém uma lista branca de endereços IP, separados em novas linhas. As entradas do 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 branca, aexec
ação não será aplicada. O arquivo pode estar vazio, mas você deve criá-touch
lo ( ).exec
ação chamará nosso script externo. Essa ação não é perturbadora e será executada quando a regra atual retornar verdadeira. Quando essa ação é aplicada, o IP remoto será processado por meio de nossos scripts.setenv
Essa ação exportará determinadas variáveis internas=%{...}
como envvars; os nomes exportados podem ser diferentes dos internos. Algumas variáveis devem ser exportadas manualmente, outras são exportadas automaticamente - provavelmente é um pequeno erro (em alguns casos, a exportação manual com os mesmos nomes, por exemplosetenv:REQUEST_URI=%{REQUEST_URI}
, causará um valor em branco da variável exportada).Checar
Vamos supor que você não tenha o Joomla no seu servidor, edite o arquivo
modsecurity-uri-black.list
e adicione uma linha com o conteúdo/joomla
. Em seguida, digite seu navegadorhttps://exemple.com/joomla
. Você deve ser redirecionado e bloqueado através de Iptables. Limpe os registrossudo www-security-assistant.bash <your-ip> --DROP-CLEAR 'some note'
, adicione seu IPmodsecurity-ip-white.list
e faça o exercício novamente. Agora você deve ser redirecionado, mas não bloqueado.Conecte nossos scripts ao OWASP Core Rule Set 3.x
Para isso, atualizaremos a ação padrão das Regras do modo de anomalia (949110 e 959100). Para esse fim, edite o arquivo
/usr/share/modsecurity-crs.3/rules/RESPONSE-999-EXCLUSION-RULES-AFTER-CRS.conf
e adicione as próximas linhas na parte inferior:Checar
Não se esqueça de reiniciar (ou recarregar) o Apache para aplicar as alterações na configuração. Não se esqueça de limpar os registros periodicamente durante os testes, caso contrário, você poderá ser bloqueado permanentemente :-)
Simule o ataque de travessia de diretório:
Simule o ataque de injeção SQL:
Arquivos de log ModSecurity e Apache
O ModSecurity possui um poderoso mecanismo de registro. Pela diretiva,
SecGuardianLog
ele fornece um feed de log especialmente projetado para funcionar com scripts externos.Arquivos de log do ModSecurity ► Fail2Ban ► Iptables
É possível configurar o Fail2Ban para análise de dados dos arquivos de log do Apache.
modsec_audit.log
é provavelmente a melhor escolha, mas veja também as seções sobre as quais falamosSecGuardianLog
.Tome cuidado para que
SecAuditLogRelevantStatus
no/etc/modsecurity/modsecurity.conf
é comentado. Caso contrário, todos que receberem uma página de erro 404 serão bloqueados pelo fail2ban.Atualmente, o Fail2Ban não é implementado de forma alguma neste projeto.
ModSecGuardianLog ► HTTPD-Guardian ► WSAS ► Iptables
Instalação e configuração dentro das circunstâncias atuais
Faça o download
httpd-guardian
e torne-o executável:Leia as linhas
98-119
para ver como o script está conectado ao nosso script WSAS.Aplique a seguinte alteração na configuração do Apache (
/etc/modsecurity/modsecurity.conf
) e reinicie-a:Checar
Para testar o script, desative o ModEvasive (
sudo a2dismod evasive
não esqueça de habilitá-lo mais tarde) e reinicie o Apache. Em seguida,tail
o log de exec:E a partir de outra instância, execute um ataque de DoS, por exemplo, use
ab
desta maneira:ModSecGuardianLog ► Análise personalizada ► WSAS ► Iptables
Aqui é apresentado um script simples, chamado
httpd-custom-analyze.bash
, que não é algo especial, mas pode ser um bom exemplo. Seus recursos são descritos no corpo do script.Instalação e Configuração
Faça o download
httpd-custom-analyze.bash
e torne-o executável:Aplique a seguinte alteração na configuração do Apache (
/etc/modsecurity/modsecurity.conf
) e reinicie-a:O script chamará o WSAS quando o limite for atingido - leia a linha
86
e35
.Para que os dois
httpd-
scripts funcionem simultaneamente, editemodsecurity.conf
e direcioneSecGuardianLog
para ambos.Para executar um teste, siga as dicas da seção acima.
fonte
Percebo que o pa4080 deu uma resposta detalhada e provavelmente muito útil para cuidar disso tudo sozinho. Embora cuidar de problemas por conta própria possa se sentir bem, isso também pode levar muito tempo .
fonte