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.914 ]

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

Código Aberto já não é uma questão de gosto

Certificação CISSP

Alta disponibilidade com CARP

Knockd (bate, bate, bate na porta do céu)

13 dicas de segurança para o Apache

  
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