O termo WAF vem de Web Application Firewall – ou firewall de aplicação web.
Um firewall tradicional atua principalmente na camada de rede, filtrando pacotes com base em informações como IP de origem, IP de destino, porta de origem, porta de destino e protocolo (TCP/UDP/ICMP). Ou seja, ele garante que apenas conexões autorizadas cheguem ao servidor, mas não entende o conteúdo do tráfego.
Já o WAF vai além: ele é projetado especificamente para proteger aplicações web. Em vez de analisar só endereços e portas, o WAF inspeciona o conteúdo das requisições HTTP/HTTPS. Isso permite identificar e bloquear acessos maliciosos que passam despercebidos por um firewall comum.
Em outras palavras, o WAF funciona como um escudo entre a internet e sua aplicação web, bloqueando ameaças antes que causem impacto.
O CrowdSec é o WAF que usamos aqui na Gole.
Ele é uma solução open-source, colaborativa e moderna, que além de proteger sua aplicação em tempo real, também aprende com ataques sofridos em outros lugares do mundo.
Ou seja: quando um IP malicioso é detectado em um ambiente, toda a comunidade CrowdSec pode se beneficiar e bloquear esse mesmo IP.
O funcionamento é simples de entender:
helm repo add crowdsec https://crowdsecurity.github.io/helm-charts
helm repo update
helm show values crowdsec/crowdsec > crowdsec-default-values.yaml
crowdsec-default-values.yaml
agent:
acquisition:
- namespace: traefik
podName: traefik-*
program: traefik
lapi:
env:
- name: ENROLL_KEY
value: "SEU_ENROLL_KEY"
- name: ENROLL_INSTANCE_NAME
value: "meu-cluster-k8s"
- name: ENROLL_TAGS
value: "k8s linux producao"
persistentVolume:
data:
enabled: true
storageClassName: "you-storage-class-name"
size: 1Gi
config:
enabled: true
storageClassName: "you-storage-class-name"
size: 100Mi
kubectl create ns crowdsec
helm install crowdsec crowdsec/crowdsec -n crowdsec -f crowdsec-default-values.yaml
kubectl -n crowdsec exec -it crowdsec-lapi-* -- sh
cscli bouncers add traefik
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
name: bouncer
namespace: traefik
spec:
plugin:
bouncer:
CrowdsecLapiKey: <SUA_API_KEY>
crowdsecLapiHost: "crowdsec-service.crowdsec.svc.cluster.local"
crowdsecLapiPort: "8080"
crowdsecAppsecHost: "crowdsec-appsec-service.crowdsec.svc.cluster.local"
crowdsecAppsecPort: "7422"
crowdsecAppsecScheme: http
Enabled: true
logLevel: DEBUG
crowdsecMode: appsec
controller:
extraInitContainers:
- name: init-clone-crowdsec-bouncer
image: crowdsecurity/lua-bouncer-plugin
env:
- name: API_URL
value: "http://crowdsec-service.crowdsec.svc.cluster.local:8080"
- name: API_KEY
value: "<API KEY>"
- name: BOUNCER_CONFIG
value: "/crowdsec/crowdsec-bouncer.conf"
appsec:
enabled: true
acquisitions:
- source: appsec
listen_addr: "0.0.0.0:7422"
path: /
appsec_config: crowdsecurity/crs-vpatch
labels:
type: appsec
env:
- name: COLLECTIONS
value: "crowdsecurity/appsec-wordpress"
O console do CrowdSec possui um limite de 500 alertas, o que pode restringir a visualização de eventos em ambientes com tráfego intenso. Para um monitoramento completo e detalhado, criamos um dashboard no Grafana que permite observar bloqueios de IP, ataques e decisões de segurança em tempo real.
Este dashboard inclui:
Acesse o dashboard: Monitoramento CrowdSec no Grafana
Este recurso é essencial para equipes de segurança que precisam monitorar, analisar e responder rapidamente a ameaças na infraestrutura.
Com essas configurações, o CrowdSec está integrado ao seu cluster Kubernetes, monitorando logs, registrando instâncias e protegendo suas aplicações com Traefik, Nginx e WAF AppSec.
Acesse o console: https://app.crowdsec.net/security-engines