Integrando ModSecurity ao NGINX e Apache

Vamos aprender a integrar o mod_security ao Apache e ao NGINX. O que fizemos anteriormente foi apenas instalar o mod_security, mas ainda não se encontra ativo no sistema.

[ Hits: 8.609 ]

Por: Júnior Carreiro em 19/09/2014 | Blog: http://webdefense.blogspot.com.br/


Introdução



Bem, vamos aprender a integrar o mod_security ao NGINX e Apache.

O que fizemos em Introdução ao ModSecurity, foi apenas instalar o mod_security, mas ele ainda não se encontra ativo no sistema.

Integrando o ModSecurity ao Apache

O comando make install apenas adiciona os módulos que o mod_security precisa, ao Apache, mas não os habilita. Veremos mais à frente como habilitá-los.

Nós fizemos uma instalação padrão, mas caso queira personalizar a instalação, o mod_security possui um help bem completo:

./configure --help

Como um pequeno exemplo temos as seguintes features (o comando acima nos mostra muito mais que isso):

Optional Features:

 --disable-option-checking ignore unrecognized --enable/--with options
 --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
 --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
 --enable-silent-rules less verbose build output (undo: "make V=1")
 --disable-silent-rules verbose build output (undo: "make V=0")
 --enable-dependency-tracking
     do not reject slow dependency extractors
 --disable-dependency-tracking
     speeds up one-time build
 --enable-shared[=PKGS] build shared libraries [default=yes]
 --enable-static[=PKGS] build static libraries [default=yes]
 --enable-fast-install[=PKGS]
     optimize for fast installation [default=yes]
 --disable-libtool-lock avoid locking (might break parallel builds)
 --disable-apache2-module
     Disable building Apache2 module.


Quando terminar a instalação, o mod_security cria, por padrão, o diretório com a seguinte estrutura (/usr/local/modsecurity/):

├── bin
│ ├── mlogc
│ ├── mlogc-batch-load.pl
│ └── rules-updater.pl
└── lib
└── mod_security2.so

Execute o comando abaixo para verificar se a lib mod_security2.so já se encontra no diretório /etc/httpd/modules/:

ls -l /etc/httpd/modules/ | grep mod_sec

Caso a lib não esteja no diretório, pode copiá-la com o comando abaixo:

# cp /usr/local/modsecurity/lib/mod_security2.so /etc/httpd/modules/

Se estiver usando uma versão 6.x ou anterior do Red Hat, vamos editar o /etc/httpd/conf/httpd.conf:

# vim /etc/httpd/conf/httpd.conf

Se já estiver usando um derivado do Red Hat 7.x, vamos editar o /etc/httpd/conf.modules.d/00-base.conf:

# vim /etc/httpd/conf.modules.d/00-base.conf

E vamos adicionar as seguinte linhas, ao arquivo:

32 bits:

LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua-5.1.so

64 bits:

LoadFile /usr/lib64/libxml2.so
LoadFile /usr/lib64/liblua-5.1.so
LoadModule security2_module modules/mod_security2.so

Agora, é reiniciar o Apache.

Caso se depare com o erro abaixo:

  AH00526: Syntax error on line 218 of /etc/httpd/conf.d/modsecurity.conf:

  Could not open unicode map file "/etc/httpd/conf.d/unicode.mapping": No such file or directory


...basta voltar ao diretório onde se encontram os fontes do mod_security e copiar o arquivo unicode.mapping:

# cp unicode.mapping /etc/httpd/conf.d/

Agora o mod_security já se encontra ativo.

A seguir, veremos como habilitar o mod_security no NGINX.

Integrando o ModSecurity ao NGINX

Se tiver feito a instalação do NGINX usando o repositório, pode verificar se o módulo para o mod_security está habilitado, com o comando:

# strings /usr/sbin/nginx | grep -i sec # Coloque a pasta onde se encontra o binário do NGINX (/usr/sbin/nginx no exemplo)

Se não tiver retorno, será necessário recompilar o NGINX, caso já esteja instalado, ou fazer uma instalação usando os fontes.

No momento dessa matéria, a versão abaixo era a recente.

wget http://nginx.org/download/nginx-1.6.0.tar.gz

Obs.: será abordada a instalação do NGINX apenas de maneira superficial, pois não é o nosso objetivo.

Instalação do ModSecurity

*A instalação é baseada em derivados Red Hat.

Primeiro, vamos instalar todas as dependências:

# yum install gcc make libxml2 libxml2-devel httpd-dev pcre-devel curl-devel

Para a instalação do mod_security, vamos usar o Git (yum install git), e baixar a versão recente do projeto:

git clone git://github.com/SpiderLabs/ModSecurity.git
cd ModSecurity
./autogen.sh
./configure --enable-standalone-module --disable-mlogc
make
# make install

Em caso de duvidas durante a instalação, favor voltar em nosso primeiro artigo.

Sendo bem-sucedida a nossa instalação, vamos instalar ou recompilar o NGINX:

tar zxvf nginx-1.6.0.tar.gz
cd nginx-1.6.0/
./configure --add-module=../ModSecurity/nginx/modsecurity
# make && make install

Agora, se executarmos o comando abaixo, nós temos um retorno:

# strings /usr/local/nginx/sbin/nginx | grep -i modsec

As configurações do mod_security são definidas dentro de nginx.conf.

Adicione as seguintes linhas dentro da diretiva location /:
  • ModSecurityEnabled on;
  • ModSecurityConfig modsecurity.conf;

Exemplo:

location / {
ModSecurityEnabled on;
ModSecurityConfig modsecurity.conf;
root html;
index index.html index.htm;
}

Bom, agora que já temos o mod_sec compilado e pronto para rodar no WEB Server de nossa preferência, vamos começar a olhar as configurações do mod_security.

Nesse primeiro momento, vou apenas mostrar algumas das principais seções do arquivo de configuração e a partir do próximo artigo, já ir explicando de uma maneira um pouco mais detalhada.

É importante dizer que é bom passarmos por todas as configurações, porque, mesmo que não vá usar nesse momento, você pode vir a precisar e é bom sabermos o que temos à disposição.

* Volto a dizer que: o objetivo destes artigos é explicar como o mod_security funciona e como é sua estrutura, para que não fiquemos reféns de regras alheias, tendo em vista que cada um tem a sua necessidade.

Abaixo, temos uma visão geral das diretivas padrões do mod_security:
  • SecArgumentSeparator ---------- Sets the application/x-www-form-urlencoded parameter separator
  • SecCookieFormat ---------- Sets the cookie parser version
  • SecDataDir ---------- Sets the folder for persistent storage
  • SecRequestBodyAccess ---------- Controls request body buffering
  • SecRequestBodyInMemoryLimit ---------- Sets the size of the per-request memory buffer
  • SecRequestBodyLimit ---------- Sets the maximum request body size ModSecurity will accept
  • SecRequestBodyLimitAction ---------- Controls what happens once the request body limit is reached
  • SecRequestBodyNoFilesLimit ---------- Sets the maximum request body size, excluding uploaded files
  • SecResponseBodyAccess ---------- Controls response body buffering
  • SecResponseBodyLimit ---------- Specifies the response body buffering limit
  • SecResponseBodyLimitAction ---------- Controls what happens once the response body limit is reached
  • SecResponseBodyMimeType ---------- Specifies a list of response body MIME types to inspect
  • SecResponseBodyMimeTypesClear ---------- Clears the list of response body MIME types
  • SecRuleEngine ---------- Controls the operation of the rule engine
  • SecTmpDir ---------- Sets the folder for temporary files

Conclusão

No próximo artigo, vamos continuar a ver a estrutura do mod_security e detalhar um pouco mais.

É muito importante vermos esses conceitos, para entendermos como o mod_security funciona.

Referências:
   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Nmap do início ao fim (parte 1)

Introdução ao ModSecurity

Arquivo de configuração do mod_security

Leitura recomendada

AUDIT: Auditoria de arquivos no Linux para conhecer quem fez alterações em arquivos

Encriptando suas senhas de forma (mais) segura no Pidgin

Instalando Apache, MariaDB e PHP com HTTPS no Arch Linux

Monitorando redes utilizando Ntop

As melhores ferramentas de segurança pra Linux

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts