Re: apache 2.2 slots freigeben

From: Marian Hettwer <MH(at)kernel32.de>
Date: Tue, 12 Dec 2006 15:48:59 +0100

Hi Olli,

Oliver Fromme schrieb:
> Marian Hettwer wrote:
> > Oliver Fromme schrieb:
> > Die Angriffe kommen zwar immer auf die selbe URL (das ist schonmal gut),
>
> Ja, Glück gehabt; die Bots könnten auch einfach zufällige
> Requests generieren.
>
seltsamerweise haben sie sich an der posting.php vom phpBB festgebissen.
Nein, jetzt keinen RANT über phpBB bitte ;)
Ich bin da nur der sysadmin, nicht derjenige der phpBB ausgewählt hat.

> > aber von bis zu 700 unterschiedlichen IP Adressen.
>
> Naja, 700 ist ja noch relativ überschaubar. Wenn Du diese
> inzwischen alle kennst, was spricht dann dagegen, sie per-
> manent per Paketfilter zu blocken?
Bis zu 700 in 24 Stunden... ich müsste mir über die Tage mal angucken ob
es auch andere IPs sind, oder jeden Tag die selben 700.

>
> > [...]
> > und in der pf.conf
> > block quick on $ext_if proto tcp from <www-spammers> to $ext_if port 80
>
> Damit blockst Du natürlich auch die RST-Pakete, sofern ir-
> gendmal eins kommen sollte. OK, wenn Deine Beobachtungen
> stimmen, dann schicken die Angreifer eh nie eins, insofern
> ist es wohl wurscht.
>
jep.

> Ich weiß grad nicht ausm Kopf, ob PF es unterstützt, aber
> IPFW hat die Möglichkeit, selbst ein RST-Paket auszulösen
> (Regeln mit "reset"-Action). Wenn Du eine Regel hinzu-
> fügst (am besten sowohl für outgoing als auch incoming),
> die ein RST-Paket schickt anstatt einfach nur zu blocken,
> sollte der Apache eigentlich die Verbindung sofort beenden.
hmmm... also quasi:
Wenn incoming from <www-spammers> dann RST an apache port 80 from
<www-spammers>
Mal schauen ob man so ein Konstrukt mit pf hinbekommt.

>
> > soweit so gut. Der pfctl Aufruf kommt via cron 1 mal pro Minute. Die
> > Einträge im table www-spammers werden via expiretable alle halbe Stunde
> > bereinigt.
>
> Warum lässt Du sie nicht drin?
>
Aus der üblichen "Angst" irgendwann das halbe Internet geblockt zu haben.
Diese bots sind scheinbar auch nur gekaperte Windows PC's. Ich habe mir
mal einen näher angesehen und konnte via rdesktop an den login screen
dieser Maschine... Windows XP Professional.
Leider war das Administrator Kennwort gesetzt *G*

> > Das Problem bleibt aber, dass die entsprechenden Angreifer scheinbar
> > ihre http Verbindung nicht ordentlich beenden.
> > Der Apache Slot bleibt also bis zum TimeOut belegt... das ist halt
> > unschön :(
>
> Ja. Wie gesagt, ich würde als Notfallmaßnahme den Apache
> patchen. Das verschafft zumindest erstmal Luft, um sich
> in Ruhe etwas Besseres zu überlegen. Ich kann aber auch
> verstehen, dass Du den Source lieber nicht anrühren magst.
>
ebend. Ich werde vermutlich mehr auf pf Ebene tun. Da fühle ich mich
mehr zu Hause.
Dennoch danke für die Tips...

> > Der Apache benutzt das accf_http Modul.
>
> Gut.
>
> > Derzeit hält der Apache die Last aus... MaxClients ist bei 1024 und
> > entsprechende Angriffe belegen maximal 800 slots für maximal 1 Stunde...
> > Ich glaube ich möchte nicht direkt in den apache sourcen patchen...
> > nicht mit meinen rudimentären C Kenntnissen...
>
> Meine nächstbeste Idee wäre gewesen, ein kleines Divert-
> Modul zu schreiben, das ein simples Pattern-Matching nach
> dem "GET /..." macht und ggf. ein RST erzeugt. Wäre ca.
> eine Seite C-Code gewesen. Aber es erfordert leider schon
> ein wenig mehr als rudimentäte Kenntnisse, fürchte ich.
>
Das werde ich wohl nicht schaffen. Da bin ich mal ehrlich und schäme
mich nicht ;)

> Die drittbeste Idee wäre, einen Reverse-Proxy vor Deinen
> Apache vorzuschalten, der die Angreifer wegfiltert und
> alles andere nur durchreicht. Man muss aber mit der Kon-
> figuration vorsichtig sein, wenn man das Problem nicht nur
> verlagern will.
>
Ebend. Wenn der Reverse Proxy beim evaluieren schon zuviel Last erzeugt
habe ich damit nichts gekonnt.
Nen Apache mit mod_proxy dafür zu nehmen wäre vermutlich eine schlechte
Wahl.
Kennst du spontan einen _kleinen_ Reverse Proxy der auch Pattern
Matching kann?
Mir würde pound einfallen...

> > Schade. Aber endlich mal eine klare Ansage. Google und die Apache docs
> > konnte mir genau das leider nicht sagen.
> > Wäre doch mal ein Feature Request ;)
>
> Es sollte möglich sein, ein Apache-Modul dafür zu schrei-
> ben, oder eine Direktive in ein bestehendes Modul einzu-
> bauen.
>
und wen bittet man in diesem Falle ganz lieb?! :) (Wenn mans selbst
nicht kann...)

> > Bei pf(4) gibt's ja im overload feature die Möglichkeit zu sagen "flush
> > global", woraufhin pf die bestehenden Verbindungen von dieser IP beendet.
>
> Jein ... er entfernt sie nur aus seiner State-Table. Die
> Apache-Children würden vernmutlich weiterhin herumhängen.
>
Hab ich mir fast gedacht.
Immer diese rumhängenden Kinder...

> > Irgendwie kann ich scheinbar nicht sowas in der block regel sagen:
> > block quick on $ext_if proto tcp from <www-spammers> to $ext_if port 80
> > flush global
>
> Das ergäbe keinen Sinn, weil die Block-Regel ja keinen
> State-Eintrag erzeugt (im Gegensatz zu "overload").
>
hmmm... das stimmt.
Mehr Stoff zum nachdenken.

Gruß,
Marian

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Tue 12 Dec 2006 - 15:51:19 CET

search this site