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: