Puncte:0

iptables nu funcționează cu „x-forwarded-for” (în spatele Cloudflare)

drapel jm

Am un server web (Ubuntu cu Apache) care rulează în spatele Cloudflare.Vreau să blochez un utilizator folosind iptables. Aici vreau să implementez extensia de potrivire a șirurilor a iptables și să renunț la conexiunea dacă x-redirecţionat-pentru potrivite. Adaug regula cu următoarea comandă:

iptables -I INPUT -m string --string "x-forwarded-for: 216.244.66.205" --algo bm --to 65535 -j DROP

După adăugarea acestei reguli, clientul este încă capabil să lovească serverul.

Știu despre antetul specific Cloudflare pentru IP-ul clientului, adică cf-conectare-ip. Dacă adaug o regulă cu următoarea comandă, funcționează conform așteptărilor. Iată regula care funcționează bine:

iptables -I INPUT -m string --string "cf-connecting-ip: 216.244.66.205" --algo bm --to 65535 -j DROP

De ce vreau să folosesc XFF în loc de cf-conectare-ip:

Am un echilibrator de încărcare separat (haproxy) și unele dintre domenii rulează prin aceasta în loc de Cloudflare. De aceea vreau să folosesc XFF pentru că cf-conectare-ip este specific Cloudflare și XFF este acceptat de ambele.

Traficul de la Cloudflare la serverul Web este HTTP (portul 80), astfel încât datele http sunt vizibile pentru iptables.

Văd că Cloudflare le atașează corect pe ambele cf-conectare-ip și antete XFF. Iată rezultatul tcpdump printre cereri multiple:

tcpdump -A -s 65535 'tcp port 80' | grep 216.244.66.205
x-redirecționat-pentru: 216.244.66.205
cf-connecting-ip: 216.244.66.205
x-redirecționat-pentru: 216.244.66.205
cf-connecting-ip: 216.244.66.205
x-redirecționat-pentru: 216.244.66.205
cf-connecting-ip: 216.244.66.205
x-redirecționat-pentru: 216.244.66.205
cf-connecting-ip: 216.244.66.205

Într-un fel, iptables sunt capabili să detecteze cf-conectare-ip dar nu x-redirecţionat-pentru.

Ce greșesc aici?

Alex avatar
drapel in
Acest lucru pare legat - https://serverfault.com/a/980916/802321
Ajaib Singh avatar
drapel jm
@Alex nu are legătură. Folosesc extensia string-match în loc să blochez IP-ul de conectare. Știu că IP-ul de conectare aparține Cloudflare, de aceea încerc cu XFF.
Puncte:1
drapel us

Potrivirea șirurilor operează pe sarcina utilă a unui singur pachet IP.

Prin urmare, un posibil motiv este că locația x-redirecționat-pentru: antetul se întâmplă să fie la o limită a două segmente TCP. Prin urmare, primul pachet IP poate conține x-forw și al doilea pachet IP ardit pentru:. Apoi şir modulul de potrivire nu se potrivește niciunui pachet.

Pentru a verifica dacă acesta este motivul, examinați diferitele încărcături utile de pachete IP care aparțin conexiunii și vedeți cum segmentul TCP este împărțit în pachete IP.

Cel mai bine este să implementați funcții de blocare ca aceasta la nivel HTTP.

Ajaib Singh avatar
drapel jm
Cum să analizăm încărcăturile utile de pachete? Este posibil cu tcpdump?
drapel us
Puteți utiliza tcpdump sau Wireshark pentru a inspecta încărcăturile utile. Totuși, nu am instrucțiuni exacte care să vă spun cum să o faceți.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.