- Ubuntu 10.04.2
- nginx 0,7.65
Widzę dziwne żądania HTTP przychodzące na mój serwer Nginx.
Aby lepiej zrozumieć, co się dzieje, chcę zrzucić całe dane żądania HTTP dla takich zapytań. (Tj. Zrzucam wszystkie nagłówki i treści żądania gdzieś, gdzie mogę je przeczytać).
Czy mogę to zrobić za pomocą nginx? Alternatywnie, czy jest jakiś serwer HTTP, który pozwala mi to zrobić po wyjęciu z pudełka, do którego mogę proxy tych żądań za pomocą nginx?
Aktualizacja: Zauważ, że to pole ma sporo normalnego ruchu i chciałbym uniknąć przechwytywania go na niskim poziomie (powiedzmy, z tcpdump
) i filtrowania go później.
Myślę, że znacznie łatwiej byłoby najpierw odfiltrować dobry ruch według reguły przepisywania (na szczęście w tym przypadku mogę dość łatwo napisać), a następnie zająć się tylko fałszywym ruchem.
I nie chcę przekierowywać fałszywego ruchu do innej skrzynki tylko po to, aby móc go tam uchwycić tcpdump
.
Aktualizacja 2: Aby podać nieco więcej szczegółów, fałszywe żądanie ma parametr o nazwie (powiedzmy) foo
w swoim zapytaniu GET (wartość parametru może się różnić). Gwarantujemy, że dobre żądania nigdy nie będą miały tego parametru.
Jeśli mogę to filtrować tcpdump
lub ngrep
jakoś - nie ma problemu, użyję ich.
Odpowiedzi:
Dostosuj liczbę linii przed / po (argumenty -B i -A) zgodnie z potrzebami:
Dzięki temu możesz odbierać żądane żądania HTTP w pudełku, bez generowania ogromnego pliku PCAP, który musisz przenieść gdzie indziej.
Należy pamiętać, że filtr BPF nigdy nie jest dokładny, jeśli przez dowolne pudełko przepływa duża liczba pakietów, BPF może i upuści pakiety.
źródło
Nie wiem dokładnie, co masz na myśli mówiąc o zrzucie żądania, ale możesz użyć tcpdump i / lub wireshark do analizy danych:
I możesz użyć wireshark, aby otworzyć plik i zobaczyć konwersację między serwerami.
źródło
Jeśli proxy do Apache z zainstalowanym mod_php jest zainstalowany, możesz użyć następującego skryptu PHP do zrzucenia żądań:
Zauważ, że skoro używasz nginx,
$_SERVER['REMOTE_ADDR']
może to być bezcelowe. Musisz przekazać prawdziwy adres IP do Apache przezproxy_set_header X-Real-IP $remote_addr;
i możesz go użyć zamiast tego (lub po prostu polegać na logowaniu się przez niegogetallheaders()
).źródło