Introdução :
O ModSecurity (https://www.modsecurity.org) é um firewall de aplicação que é executado como um módulo do servidor Web Apache. O WAF (Web Application Firewall), ou firewall de aplicação, tem por objetivo bloquear diversos tipos de ataques, como o Cross-Site Scripting (XSS), SQL Injection, Command Injection, ASP e PHP Injection, Trojans & Backdoors Detection, dentre outros, que variam de acordo com as regras existentes. Instale o ModSecurity:
Convenções utilizadas neste artigo: o símbolo “#” significa que o comando deve ser executado como root.
Primeiro instalaremos pacotes básicos do apache 2 e php5 com o seguinte comando:
root@server:~# aptitude install php5 libapache2-mod-php5
Reiniciar o servidor apache2:
root@server:~# /etc/init.d/apache2 restart
Verificação
Para verificar a instalação do suporte php, basta criar uma página Internet que mostre as características da instalação php. Neste caso, iremos criar uma página em /var/www/phpinfo.php:
<?php
phpinfo();
?>
Em seguida, tentar aceder à página, utilizando um browser e inserindo o endereço https://seuendereçoweb/phpinfo.php:
Poderá também ser testado o acesso seguro via protocolo https da mesma maneira, utilizando o endereço https://seuenderecoweb/phpinfo.php.
Uma vez testado o funcionamento, deverá ser apagada a página de testes, dado que as informações nela contidas poderiam comprometer a segurança do servidor:
root@server:~# rm /var/www/phpinfo.php
E finalmente instalando mod_security.
O primeiro é preciso baixar a última versão. Na época do presente documento é versão 2.6.3. Você pode verificar a última versão no site https://www.modsecurity.org/download/
# cd /usr/src/
# wget "https://ufpr.dl.sourceforge.net/project/mod-security/modsecurity-apache/2.6.3/modsecurity-apache_2.6.3.tar.gz"
# tar zxvf modsecurity-apache_2.6.3.tar.gz
Nós instalaremos um par de ferramentas e bibliotecas que iremos precisar…
# apt-get install libxml2-dev liblua5.1-0 lua5.1 apache2-threaded-dev build-essential libxml2 libxml2-dev libcurl3 libcurl3-dev
Compilamos modsecurity e instalamos… ( verificar com “apt-get install make” para ver se “make esteja instalado)
# cd modsecurity-apache_2.6.3
# ./configure
# make
# make install
Agora devemos criar o arquivo /etc/apache2/mods-available/mod_security2.load com o seguinte conteúdo:
LoadFile /usr/lib/libxml2.so
LoadFile /usr/lib/liblua5.1.so.0
LoadModule security2_module /usr/lib/apache2/modules/mod_security2.so
Com isto, habilitaremos os seguintes módulos que usaremos.
# a2enmod mod_security2
# a2enmod unique_id
Configuramos com o minimo necessário para correr o mod-security
# cp modsecurity.conf-recommended /etc/apache2/conf.d/modsecurity.conf
Agora baixe o pacote de regras mais atuais e instalaremos (neste caso, ao montar esse tutorial foi o ModSecurity-crs_2.2.3, mas olhar para este site https://sourceforge.net/projects/mod-security/files/modsecurity-crs/0-CURRENT/ (última versão do pacote CRS))
# cd /etc/apache2/
# wget -O modsecurity-crs.tar.gz "https://ufpr.dl.sourceforge.net/project/mod-security/modsecurity-crs/0-CURRENT/modsecurity-crs_2.2.3.tar.gz"
# tar xzvf modsecurity-crs_2.2.3.tar.gz
# mv modsecurity-crs_2.2.3 /etc/apache2/modsecurity_crs
# rm -fr modsecurity-crs.tar.gz
# chown root.root /etc/apache2/modsecurity_crs/ -R
# cd /etc/apache2/modsecurity_crs
# mv modsecurity_crs_10_config.conf.example modsecurity_crs_10_config.conf
Agora ajustaremos as configurações do mod-security para apontar os arquivos de log onde queremos, e incluem apenas o pacote de regras que acabamos de baixar.
Para fazer isso, edite o arquivo de configuração:
# nano /etc/apache2/conf.d/modsecurity.conf
Buscaremos seguintes linhas:
# SecDebugLog /opt/modsecu
# SecDebugLogLevel 3
Descomentamos elas e deixamos da seguinte forma:
SecDebugLog /var/log/apache2/modsec_debug.log
SecDebugLogLevel 3
logo buscamos essas linhas;
# SecAuditLogType Serial
# SecAuditLog /var/log/modsec_audit.log
Descomentamos elas e deixamos da seguinte forma:
SecAuditLogType Serial
SecAuditLog /var/log/apache2/modsec_audit.log
No final do arquivo, adicione as seguintes linhas, que serão utilizados para carregar todas as regras do pacote que baixamos:
Include /etc/apache2/modsecurity_crs/*.conf
Include /etc/apache2/modsecurity_crs/base_rules/*.conf
Salvamos o arquivo e sairmos.
Abaixo prepararemos os logs que vamos usar e vamos definir as permissões necessárias:
# touch /var/log/apache2/modsec_debug.log
# touch /var/log/apache2/modsec_audit.log
# chown root.root /var/log/apache2/modsec_*
# chmod 660 /var/log/apache2/modsec_*
É isso, agora podemos confirmar no Apache para verificar se está tudo OK na config:
# apache2ctl configtest
Se estiver OK, vamos ver:
Syntax OK
Agora, se .. se tudo estiver OK, podemos reiniciar o Apache2:
# /etc/init.d/apache2 restart
Depois de reiniciar, podemos olhar para o log de erros do Apache para ver se de fato carregou o módulo ModSecurity.
# tail /var/log/apache2/error.log
E deveríamos ver algo similar a …
[Wed Jan 15 19:15:59 2011] [notice] ModSecurity for Apache/2.6.3 (https://www.modsecurity.org/) configured.
[Wed Jan 15 19:16:00 2011] [notice] ModSecurity: APR compiled version="1.4.2"; loaded version="1.4.2"
[Wed Jan 15 19:16:00 2011] [notice] ModSecurity: PCRE compiled version="8.2"; loaded version="8.02 2010-03-19"
[Wed Jan 15 19:16:00 2011] [notice] ModSecurity: LIBXML compiled version="2.7.8"
[Wed Jan 15 19:16:01 2011] [notice] Apache/2.2.9 (Debian) PHP/5.3.3-7+squeeze3 with Suhosin-Patch configured -- resuming normal operations
É isso aí! Em funcionamento modsecurity em nosso Apache!.
Refênciais
Wikipedia: php (https://pt.wikipedia.org/wiki/Php)
PHP: Hypertext Preprocessor (https://www.php.net)
https://www.modsecurity.org/
https://www.thebitsource.com/infrastructure-operations/web-application/securing-apache-web-servers-modsecurity/
https://imasters.com.br/artigo/21948/redes-e-servidores/instalando-o-modsecurity-no-debian–apache2
Texto de Edson Dias Pereira Junior <edson.junior14 at fatec.sp.gov.br>, estudante do 5º ciclo de Segurança da Informação na Fatec Ourinhos-SP