- Ubuntu 10.04.2
- Nginx 0,7,65
Ich sehe einige seltsame HTTP-Anfragen an meinen Nginx-Server.
Um besser zu verstehen, was los ist, möchte ich für solche Abfragen ganze HTTP-Anforderungsdaten sichern. (Dh alle Anforderungsheader und -körper werden irgendwo abgelegt, wo ich sie lesen kann.)
Kann ich das mit Nginx machen? Gibt es alternativ einen HTTP-Server, mit dem ich diese Anfragen über Nginx übermitteln kann?
Update: Beachten Sie, dass diese Box eine Menge normalen Datenverkehrs hat, und ich möchte vermeiden, dass alles auf niedriger Ebene (z. B. mit tcpdump
) erfasst und später herausgefiltert wird.
Ich denke, es wäre viel einfacher, guten Datenverkehr zuerst in einer Umschreiberegel zu filtern (zum Glück kann ich in diesem Fall eine recht einfach schreiben) und dann nur falschen Datenverkehr zu behandeln.
Und ich möchte gefälschten Datenverkehr nicht auf eine andere Box lenken, nur um ihn dort mit zu erfassen tcpdump
.
Update 2: Um ein bisschen mehr Details zu geben, haben gefälschte Requests einen Parameter namens (say) foo
in ihrer GET-Abfrage (der Wert des Parameters kann abweichen). Gute Anfragen haben diesen Parameter garantiert nie.
Wenn ich danach filtern kann tcpdump
oder ngrep
irgendwie - kein Problem, werde ich diese verwenden.
Antworten:
Passen Sie die Anzahl der Pre- / Post-Zeilen (-B und -A-Argumente) nach Bedarf an:
Auf diese Weise können Sie die gewünschten HTTP-Anforderungen in der Box abrufen, ohne eine große PCAP-Datei zu generieren, die Sie an anderer Stelle auslagern müssen.
Beachten Sie, dass der BPF-Filter niemals genau ist. Wenn eine große Anzahl von Paketen durch eine Box fließt, kann und wird BPF Pakete verwerfen.
quelle
Ich weiß nicht genau, was Sie mit dump the request meinen, aber Sie können tcpdump und / oder wireshark verwenden , um die Daten zu analysieren:
Mit wireshark können Sie die Datei öffnen und die Konversation zwischen Servern verfolgen.
quelle
Wenn Sie die Anfragen an Apache mit installiertem mod_php per Proxy senden, können Sie die Anfragen mit dem folgenden PHP-Skript sichern:
Da Sie Nginx verwenden, ist dies
$_SERVER['REMOTE_ADDR']
möglicherweise sinnlos. Sie müssen die reale IP über an Apache übergebenproxy_set_header X-Real-IP $remote_addr;
und können diese stattdessen verwenden (oder sich einfach darauf verlassen, dass sie über protokolliert wirdgetallheaders()
).quelle