CRITICAL INFRA
Loading critical CVEs…
ALL EXPLOITED
Loading…

Studiu de caz: nginx reverse proxy + Suricata + CrowdSec

Dupa ce am curatat un server compromis printr-un web-shell, pasul urmator a fost sa nu se mai repete. Am pus in fata aplicatiilor un nginx reverse proxy cu TLS si hardening, un Suricata care vede tot traficul si un CrowdSec care citeste logurile si blocheaza automat sursele ostile. Trei straturi care se acopera reciproc.

Cerinta: aparare in adancime, nu un singur zid

Un singur strat de aparare cedeaza la prima greseala. Voiam trei: proxy care ascunde si filtreaza aplicatia, un IDS care vede atacurile la nivel de retea si un motor care invata din loguri si blocheaza automat. Daca unul rateaza, celalalt prinde.

Pe scurt: acelasi atacator e vazut de proxy, de IDS si de motorul de reputatie; il blocam o data, automat, inainte sa faca pagube.

Arhitectura

Internetul intra prin nginx (reverse proxy + TLS), care trimite catre aplicatiile PHP din spate. Suricata inspecteaza tot traficul (IDS), iar CrowdSec citeste logurile nginx, aplica scenarii si pune IP-urile rele intr-un bouncer la firewall.

Internettrafic + atacuringinxreverse proxy + TLSaplicatii PHPbackendSuricataIDS pe traficCrowdSec -> bouncer

nginx: reverse proxy, TLS si hardening

nginx ascunde aplicatia, termina TLS-ul si pune limitele de baza (rate-limit, headere de securitate). Aplicatia PHP nu mai e expusa direct.

# /etc/nginx/sites-available/app
limit_req_zone $binary_remote_addr zone=app:10m rate=10r/s;
server {
  listen 443 ssl http2;
  server_name app.example.com;
  ssl_certificate     /etc/letsencrypt/live/app.example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
  add_header X-Content-Type-Options nosniff;
  add_header X-Frame-Options SAMEORIGIN;
  location / {
    limit_req zone=app burst=20 nodelay;
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header X-Real-IP $remote_addr;
  }
}
nginx -t && systemctl reload nginx

Suricata: IDS pe tot traficul

Suricata vede pachetele si ridica alerte pe semnaturi (scanari, exploit-uri, web-shell-uri). Il pui pe interfata si ii incarci regulile Emerging Threats.

apt -y install suricata
# interfata pe care asculta (af-packet):
suricata-update            # descarca regulile ET open
sed -i 's/^  - interface: eth0/  - interface: eth0/' /etc/suricata/suricata.yaml
systemctl enable --now suricata
# verifici alertele:
tail -f /var/log/suricata/fast.log

Pe scurt: Suricata nu blocheaza singur aici (e IDS), dar da ochii pe retea: vezi scanarea sau exploit-ul cand se intampla.

CrowdSec: citeste logurile si blocheaza

CrowdSec citeste logurile nginx (si, optional, eve.json de la Suricata), recunoaste tiparele de atac si pune IP-ul rau intr-un bouncer la firewall. Plus reputatia comunitara.

curl -s https://install.crowdsec.net | sudo sh
apt -y install crowdsec
cscli collections install crowdsecurity/nginx crowdsecurity/base-http-scenarios
# bouncer la firewall (nftables) -> dropa IP-urile
apt -y install crowdsec-firewall-bouncer-nftables
# ce colecteaza + ce a blocat
cscli metrics
cscli decisions list
cscli alerts list --since 24h
cscli console enroll <KEY>   # dashboard + blocklists CTI

Rezultat

Aplicatia PHP nu mai e expusa direct: nginx filtreaza si limiteaza, Suricata da vizibilitate pe atacuri, iar CrowdSec blocheaza automat sursele ostile inainte sa insiste. Un scanner care cauta web-shell-uri e prins si blocat la firewall in secunde, iar reputatia comunitara opreste multe atacuri inainte sa inceapa. Totul intra in monitorizarea 24/7.

Discutam despre proiectul tau →