Napadi na mašinu: šta mi radimo i šta ti možeš
Kako izgleda napad na kanal i na aplikaciju, kako se razlikuju, šta možeš da podesiš na svojoj strani i kako da shvatiš da uopšte nije napad.
Ažurirano 23. avgust 2026.
Reč „napad“ zvuči isto u dve potpuno različite situacije: kada ti je kanal preplavljen smeće saobraćajem i kada nekoliko stotina zahteva u sekundi obori tvoju aplikaciju. Tretiraju se drugačije, a prvo što treba da uradiš je da utvrdiš sa kojom se suočavaš.
Kako da razlikuješ jedno od drugog
| Znak | Kanal zasićen | Aplikacija preopterećena |
|---|---|---|
| Grafikon saobraćaja u „Pregledu“ | Dostiže plafon | Normalne vrednosti |
| Procesor | Nije opterećen | Potpuno opterećen |
| SSH | Ne može da se poveže | Radi, ali sporo |
| Logovi veb servera | Prazni | Hiljade identičnih zahteva |
Pogledaj grafikone procesora, memorije i saobraćaja u „Pregledu“ na /hosting/vds/m/<id> za poslednja 24 sata. Ako je saobraćaj normalan, a procesor zakucan na plafonu, to je opterećenje aplikacije i moraš da ga rešiš na svojoj strani.
Šta možeš da uradiš
Ograničavanje broja zahteva u nginx-u:
limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s;
limit_conn_zone $binary_remote_addr zone=conn:10m;
server {
limit_req zone=perip burst=20 nodelay;
limit_conn conn 20;
client_body_timeout 10s;
client_header_timeout 10s;
}
Ograničavanje konekcija u firewall-u:
ufw limit 22/tcp
Fleksibilnija pravila su u članku nftables: tamo možeš i da ograničiš nove konekcije i da vodiš listu blokiranih adresa sa rokom trajanja.
Pronađi izvor u logovima:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
ss -tn state established | awk '{print $4}' | cut -d: -f1 | sort | uniq -c | sort -rn | head
Blokiranje adrese ili mreže jednom:
ufw deny from 203.0.113.0/24
fail2ban može da automatizuje blokiranje na osnovu logova.
Šta mi radimo
Naša infrastruktura filtrira smeće saobraćaj na putu do noda — pre nego što ti potroši propusni opseg. To deluje protiv volumetrijskih napada na kanal i ne zahteva nikakvu konfiguraciju sa tvoje strane.
Šta zaštita na nivou noda ne radi: ne analizira logiku tvoje aplikacije. Zahtevi koji spolja izgledaju normalno stižu do tvoje mašine, a od njih te štiti samo tvoja sopstvena konfiguracija.
Ako tvoja mašina postane izvor napada — na primer, kompromitovana je i učestvuje u tuđoj spam kampanji — pristup će biti ograničen prema politici prihvatljivog korišćenja. Proveri svoju mašinu prema znacima kompromitacije.
Keširanje i statički fajlovi
Najučinkovitija tehnika protiv poplave zahteva je da istu stvar ne računaš dvaput:
location /static/ {
expires 30d;
add_header Cache-Control "public";
}
Keširaj teške stranice na strani aplikacije. Zahtev koji se servira iz keša košta stotine puta manje.
Česte greške
- Postavljanje
limit_reqbezburst— obični korisnici čija stranica povlači dva desetina fajlova bivaju odsečeni. - Ručno blokiranje adresa jednu po jednu tokom distribuiranog napada: ima ih hiljade i nećeš stići.
- Potpuno blokiranje ICMP — kvari pregovaranje o veličini paketa, vidi MTU.
- Zamena sopstvenog baga za napad: petlja u kodu, pretraživački bot koji puzi kroz direktorijum koji si zaboravio da isključiš, beskonačni ponovni pokušaji klijenta.
Postavi limite unapred, na mirnoj mašini. Tokom poplave zahteva nećeš moći da podesiš vrednosti
rateiburst: menjaćeš konfiguraciju naslepo i u delićima.