sexta-feira, agosto 10, 2012

ModSecurity Series 2 - Instalando o ModSecurity 2.6.7 + CRS 2.2.5 no Debian Wheezy

   Como não consegui postar na semana passada, essa semana terá 2 posts sobre o ModSecurity. Esse será sobre a instalação do ModSecurity 2.6.7 + o Core Rule Set 2.2.5 no Debian Wheezy (atualmente testing). A versão antiga desse post, voltado para o CentOS, está aqui: Installing ModSecurity 2.6.1-rc1 + CRS (Core Rule Set) 2.2.0 on CentOS 5.6


- Instalar as dependências: 

apt-get install build-essential apache2-threaded-dev apache2 libpcre3-dev libpcre3 libxml2 libxml2-dev lua5.1 liblua5.1-dev libcurl3-dev


  - Realizar o download do código fonte do ModSecurity:

cd /usr/local/src
wget http://www.modsecurity.org/download/modsecurity-apache_2.6.7.tar.gz
wget "http://downloads.sourceforge.net/project/mod-security/modsecurity-apache/2.6.7/modsecurity-apache_2.6.7.tar.gz.asc"


- Baixar o Core Rule Set:

wget "http://downloads.sourceforge.net/project/mod-security/modsecurity-crs/0-CURRENT/modsecurity-crs_2.2.5.zip"
wget "http://downloads.sourceforge.net/project/mod-security/modsecurity-crs/0-CURRENT/modsecurity-crs_2.2.5.zip.sig"


- Importar as chaves de assinatura em seu arquivo de chaves PGP:


# gpg --recv-keys 9624FCD2
gpg: porta-chaves `/root/.gnupg/secring.gpg' criado
gpg: requesting key 9624FCD2 from hkp server keys.gnupg.net
gpg: /root/.gnupg/trustdb.gpg: banco de dados de confiabilidade criado
gpg: key 9624FCD2: public key "Ryan Barnett (OWASP Core Rule Set Project Leader) " imported
gpg: Número total processado: 1
gpg:               importados: 1  (RSA: 1)

# gpg --recv-keys 6980F8B0
gpg: requesting key 6980F8B0 from hkp server keys.gnupg.net
gpg: key 6980F8B0: public key "Breno Silva Pinto " imported
gpg: Número total processado: 1
gpg:               importados: 1  (RSA: 1)




- Verificar a integridade dos arquivos: 


# gpg --verify modsecurity-apache_2.6.7.tar.gz.asc
gpg: Signature made Qui 02 Ago 2012 19:49:04 BRT using RSA key ID 6980F8B0
gpg: Good signature from "Breno Silva Pinto "
gpg: AVISO: Esta chave não está certificada com uma assinatura confiável!
gpg:        Não há indicação de que a assinatura pertence ao dono.
Impressão da chave primária: AB36 0F15 ACF8 D30F 806E  41D2 8050 C35A 6980 F8B0

# gpg --verify modsecurity-crs_2.2.5.zip.sig
gpg: Signature made Qui 14 Jun 2012 13:48:52 BRT using RSA key ID 9624FCD2
gpg: Good signature from "Ryan Barnett (OWASP Core Rule Set Project Leader) "
gpg: AVISO: Esta chave não está certificada com uma assinatura confiável!
gpg:        Não há indicação de que a assinatura pertence ao dono.
Impressão da chave primária: D5B2 7FC9 BFD2 5BDD 57DB  7291 C976 607D 9624 FCD2




- Descompactar:

tar xvfz modsecurity-apache_2.6.7.tar.gz 
unzip -x modsecurity-crs_2.2.5.zip 



- Compilar o módulo do apache:


cd modsecurity-apache_2.6.7/
./configure
make
make install
# O módulo é instalado em /usr/lib/apache2/modules/mod_security2.so e ferramentas em /usr/local/modsecurity/bin




- Instalar a estrutura de regras do CRS:


mkdir -p /etc/apache2/modsecurity/crs
touch /etc/apache2/modsecurity/whitelist.conf
cp /usr/local/src/modsecurity-apache_2.6.7/modsecurity.conf-recommended /etc/apache2/modsecurity/modsecurity.conf
cp -a /usr/local/src/modsecurity-crs_2.2.5/* /etc/apache2/modsecurity/crs

cd /etc/apache2/modsecurity/crs
cp modsecurity_crs_10_setup.conf.example modsecurity_crs_10_setup.conf
for f in `ls base_rules/` ; do ln -s ../base_rules/$f activated_rules/$f ; done
for f in `ls experimental_rules/` ; do ln -s ../experimental_rules/$f activated_rules/$f ; done


# Se forem habilitadas as "experimental rules, alguns arquivos precisam ser configurados e personalizados: modsecurity_crs_11_proxy_abuse.conf, modsecurity_crs_16_scanner_integration.conf,modsecurity_crs_40_appsensor_detection_point_2.1_request_exception.conf, modsecurity_crs_42_csp_enforcement.conf, modsecurity_crs_55_response_profiling.conf, modsecurity_crs_56_pvi_checks.conf, modsecurity_crs_61_ip_forensics.conf 



Habilitar o mod_unique_id no apache:

# a2enmod unique_id


- Criar o arquivo /etc/apache2/mods-available/modsecurity.load com o seguinte conteúdo :


LoadFile /usr/lib/x86_64-linux-gnu/libxml2.so
LoadFile /usr/lib/x86_64-linux-gnu/liblua5.1.so
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so



- Criar o arquivo /etc/apache2/mods-available/modsecurity.conf com o seguinte conteúdo:


<IfModule security2_module>
  Include modsecurity/modsecurity.conf
  Include modsecurity/whitelist.conf
  Include modsecurity/crs/modsecurity_crs_10_setup.conf
  Include modsecurity/crs/activated_rules/*.conf
</IfModule>



- Habilitar o módulo modsecurity no apache:

# a2enmod modsecurity

- Testar a configuração:

# apache2ctl -t
Syntax OK

- Se tudo estiver ok, basta reiniciar o apache.No log do apache irá aparecer o seguinte:


[Fri Aug 10 14:02:44 2012] [notice] ModSecurity for Apache/2.6.7 (http://www.modsecurity.org/) configured.
[Fri Aug 10 14:02:44 2012] [notice] ModSecurity: APR compiled version="1.4.6"; loaded version="1.4.6"
[Fri Aug 10 14:02:44 2012] [notice] ModSecurity: PCRE compiled version="8.30 "; loaded version="8.30 2012-02-04"
[Fri Aug 10 14:02:44 2012] [notice] ModSecurity: LUA compiled version="Lua 5.1"
[Fri Aug 10 14:02:44 2012] [notice] ModSecurity: LIBXML compiled version="2.8.0"
[Fri Aug 10 14:02:45 2012] [notice] Apache/2.2.22 (Debian) configured -- resuming normal operations




O ModSecurity está instalado por padrão no modo de detecção, o que será explicado no próximo post. Até lá.

2 comentários:

Anônimo disse...

Vlw man!

Salvou uma alma.

Abs,

Alexos

Anônimo disse...

Valeu pelo post Zucco.

A sacada do "for" foi muito boa!

So tem que ajustar a parte do unzip pq desse jeito pra funcionar teria que criar o diretorio modsecurity-crs_2.2.5, mover o zip pra la e deixar o unzip agir la dentro.

Muito bom post mesmo, parabens e nao pare de postar que to acompanhando.

abc!

@julioboris