O conector ModSecurity-nginx é o ponto de conexão entre nginx e libmodsecurity (ModSecurity v3). Dito de outra forma, este projeto fornece um canal de comunicação entre nginx e libmodsecurity. Este conector é necessário para usar LibModSecurity com nginx.
O conector ModSecurity-nginx assume a forma de um módulo nginx. O módulo serve simplesmente como uma camada de comunicação entre o nginx e o ModSecurity.
Observe que este projeto depende do libmodsecurity em vez do ModSecurity (versão 2.9 ou inferior).
A versão antiga usa o ModSecurity autônomo, que é um wrapper para os componentes internos do Apache vincularem o ModSecurity ao nginx. Esta versão atual está mais próxima do nginx, consumindo o novo libmodsecurity que não depende mais do Apache. Como resultado, esta versão atual tem menos dependências, menos bugs e é mais rápida. Além disso, algumas novas funcionalidades também são fornecidas - como a possibilidade de utilização de configuração de regras globais com personalizações por diretório/local (por exemplo, SecRuleRemoveById).
Antes de compilar este software, certifique-se de ter o libmodsecurity instalado. Você pode baixá-lo do repositório git ModSecurity. Para informações relativas à compilação e instalação do libmodsecurity consulte a documentação fornecida junto com ele.
Com o libmodsecurity instalado, você pode prosseguir com a instalação do conector ModSecurity-nginx, que segue o procedimento de instalação do módulo de terceiros nginx. No diretório de origem nginx:
./configure --add-module=/path/to/ModSecurity-nginx
Ou, para construir um módulo dinâmico:
./configure --add-dynamic-module=/path/to/ModSecurity-nginx --with-compat
Observe que ao construir um módulo dinâmico, sua versão de origem do nginx precisa corresponder à versão do nginx para a qual você está compilando.
Mais informações sobre o suporte a complementos de terceiros do nginx estão disponíveis aqui: http://wiki.nginx.org/3rdPartyModules
ModSecurity para nginx estende suas diretivas de configuração do nginx. Acrescenta quatro novas diretivas e são elas:
sintaxe: modsecurity ativado | desligado
contexto: http, servidor, localização
padrão: desligado
Ativa ou desativa a funcionalidade ModSecurity. Observe que esta diretiva de configuração não está mais relacionada ao estado SecRule. Em vez disso, agora serve apenas como um sinalizador nginx para ativar ou desativar o módulo.
sintaxe: modsecurity_rules_file
contexto: http, servidor, localização
padrão: não
Especifica a localização do arquivo de configuração modsecurity, por exemplo:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
}
sintaxe: modsecurity_rules_remote
contexto: http, servidor, localização
padrão: não
Especifica de onde (na internet) um arquivo de configuração do modsecurity será baixado. Ele também especifica a chave que será usada para autenticação nesse servidor:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_remote my-server-key https://my-own-server/rules/download;
}
}
sintaxe: modsecurity_rules
contexto: http, servidor, localização
padrão: não
Permite a inclusão direta de uma regra ModSecurity na configuração do nginx. O exemplo a seguir carrega regras de um arquivo e injeta configurações específicas por diretório/alias:
server {
modsecurity on;
location / {
root /var/www/html;
modsecurity_rules_file /etc/my_modsecurity_rules.conf;
}
location /ops {
root /var/www/html/opts;
modsecurity_rules '
SecRuleEngine On
SecDebugLog /tmp/modsec_debug.log
SecDebugLogLevel 9
SecRuleRemoveById 10
' ;
}
}
sintaxe: string modsecurity_transaction_id
contexto: http, servidor, localização
padrão: não
Permite passar o ID da transação do nginx em vez de gerá-lo na biblioteca. Isto pode ser útil para fins de rastreamento, por exemplo, considere esta configuração:
log_format extended ' $remote_addr - $remote_user [ $time_local ] '
'" $request " $status $body_bytes_sent '
'" $http_referer " " $http_user_agent " $request_id ' ;
server {
server_name host1;
modsecurity on;
modsecurity_transaction_id "host1- $request_id " ;
access_log logs/host1-access.log extended;
error_log logs/host1-error.log;
location / {
...
}
}
server {
server_name host2;
modsecurity on;
modsecurity_transaction_id "host2- $request_id " ;
access_log logs/host2-access.log extended;
error_log logs/host2-error.log;
location / {
...
}
}
Usando uma combinação de log_format e modsecurity_transaction_id você poderá encontrar correlações entre o log de acesso e as entradas do log de erros usando o mesmo identificador exclusivo.
String pode conter variáveis.
Como um projeto de código aberto, convidamos (e encorajamos) qualquer pessoa da comunidade a contribuir com o nosso projeto. Isso pode assumir a forma de: novas funcionalidades, correções de bugs, relatórios de bugs, suporte a usuários iniciantes e qualquer outra coisa em que você esteja disposto a ajudar. Obrigado.
Preferimos ter seu patch dentro da infraestrutura do GitHub para facilitar nosso trabalho de revisão e nossa integração de controle de qualidade. GitHub fornece uma excelente documentação sobre como realizar “Pull Requests”. Mais informações disponíveis aqui: https://help.github.com/articles/using-pull-requests/
Por favor, respeite o estilo de codificação em uso. As solicitações pull podem incluir vários commits, portanto, forneça uma correção ou uma funcionalidade por commit. Não altere nada fora do escopo do seu trabalho alvo (por exemplo, estilo de codificação em uma função pela qual você passou).
Dentro do nosso código existem vários itens marcados como TODO ou FIXME que podem precisar de sua atenção. Verifique a lista de itens executando um grep:
$ cd /path/to/modsecurity-nginx
$ egrep -Rin "TODO|FIXME" -R *
Você também pode dar uma olhada nos relatórios de bugs recentes e nos problemas em aberto para ter uma ideia do tipo de ajuda que estamos procurando.
Junto com o teste manual, recomendamos fortemente que você use o utilitário de teste nginx para garantir que o patch não afete negativamente o comportamento ou o desempenho do nginx.
Os testes nginx estão disponíveis em: http://hg.nginx.org/nginx-tests/
Para usar esses testes, certifique-se de ter o utilitário Perl prove (parte do Perl 5) e prossiga com os seguintes comandos:
$ cp /path/to/ModSecurity-nginx/tests/* /path/to/nginx/test/repository
$ cd /path/to/nginx/test/repository
$ TEST_NGINX_BINARY=/path/to/your/nginx prove .
Se você estiver enfrentando problemas para fazer com que sua funcionalidade adicional passe em todos os testes do nginx, sinta-se à vontade para entrar em contato conosco ou com a lista de discussão do nginx em: http://nginx.org/en/support.html
Respeitamos o esquema de depuração nginx. Ao usar a opção de configuração "--with-debug" durante a configuração do nginx você também habilitará as mensagens de depuração do conector. Espera-se que core dumps e travamentos sejam depurados da mesma maneira que é usado para depurar o nginx. Para obter mais informações, verifique as informações de depuração do nginx: http://wiki.nginx.org/Debugging
Se você estiver enfrentando um problema de configuração ou se algo não estiver funcionando como esperado, use a lista de discussão de usuários do ModSecurity. Problemas no GitHub também são bem-vindos, mas preferimos que os usuários questionem primeiro na lista de discussão, onde você pode alcançar uma comunidade inteira. Também não se esqueça de procurar um problema existente antes de abrir um novo.
Por último, se você está planejando abrir um problema no GitHub, não se esqueça de nos informar a versão do seu libmodsecurity e a versão do conector nginx que você está executando.
Por favor, não relate publicamente qualquer problema de segurança. Em vez disso, entre em contato conosco em: [email protected] para relatar o problema. Assim que o problema for resolvido, forneceremos crédito pela descoberta.
Adoraríamos discutir quaisquer ideias que você possa ter para um novo recurso. Tenha em mente que este é um projeto conduzido pela comunidade, portanto, entre em contato com a comunidade através da lista de e-mails para obter feedback primeiro. Alternativamente, sinta-se à vontade para abrir problemas do GitHub solicitando novos recursos. Antes de abrir um novo problema, verifique se existe uma solicitação de recurso para a funcionalidade desejada.
Ter nossos pacotes em distros dentro do prazo é algo que desejamos muito. Informe-nos se houver algo que possamos fazer para facilitar seu trabalho como empacotador.