Otrzymuję wiele żądań pojawiających się w naszych logach Apache, które wyglądają tak
www.example.com:80 10.240.1.8 - - [06/Mar/2013:00:39:19 +0000] "-" 408 0 "-" "-" -
Wygląda na to, że nie ma żądań ani klienta użytkownika. Czy ktoś już to widział?
apache-2.2
http
http-status-code-408
Glenn Slaven
źródło
źródło
Odpowiedzi:
Czy przypadkiem uruchamiasz swoje serwery internetowe w Amazon za Elastic Load Balancer?
Wygląda na to, że generują dużo 408 odpowiedzi z powodu kontroli stanu zdrowia .
Niektóre rozwiązania z tego wątku na forum:
RequestReadTimeout header=0 body=0
To wyłącza 408 odpowiedzi, jeśli upłynie limit czasu żądania.
Wyłącz rejestrowanie adresów IP ELB za pomocą:
I z tego postu na blogu :
źródło
RequestReadTimeout header=0 body=0
wyłączyłby razem limit czasu odczytu żądania, nie poleciłbym tegoCoś łączy się z portem i nigdy nie wysyła danych. HTTP 408 jest błędem przekroczenia limitu czasu. Tutaj jest dobry opis: http://www.checkupdown.com/status/E408.html
źródło
Jest tu już kilka dobrych odpowiedzi, ale chciałbym zaryzykować jedną dodatkową notatkę, która nie została specjalnie poruszona. Jak wielu wcześniej wspomnianych komentujących, 408 wskazuje na przekroczenie limitu czasu; i istnieje szereg sytuacji, w których przekroczenia limitu czasu występują na serwerze WWW.
To powiedziawszy, 408 błędów może być generowanych w różnych przypadkach, gdy twój serwer jest skanowany w poszukiwaniu exploitów. Klienci w takich przypadkach rzadko prezentują agenta użytkownika i często nagle kończą połączenia, co powoduje nieudane zamknięcie tego połączenia, które może generować błąd 408.
Powiedzmy na przykład, że jestem złośliwym hakerem, który skanuje Internet w poszukiwaniu komputerów, które są nadal podatne na lukę POODLE. W związku z tym napisałem skrypt, który otwiera połączenia z dużymi fragmentami adresów IP, aby znaleźć serwery, które zaakceptują SSL w wersji 3 - później użyję tej listy do skanowania w szczególności pod kątem wykorzystania POODLE. Wszystko, co robi ten pierwszy skrypt, to nawiązywanie połączenia za pomocą openssl w celu sprawdzenia SSLv3, w następujący sposób:
To polecenie, w wielu konfiguracjach Apache, spowoduje wyświetlenie komunikatu 408 dokładnie tak, jak opisano. Wykonanie tej komendy na dwóch moich własnych serwerach spowodowało wpis do dziennika dostępu:
Chciałem to wyjaśnić, ponieważ nawet w sytuacji, gdy OP nie korzystał z żadnej formy równoważenia obciążenia, błędy 408 mogą wystąpić w różnych okolicznościach - niektóre złośliwe, niektóre wskazują na problemy z klientem, a niektóre na problemy z serwerem. (Zauważyłem w dzienniku dostarczonym przez OP, że lokalny adres IP został wskazany jako zdalny adres IP, ale OP nie wspomniał konkretnie o użyciu modułu równoważenia obciążenia, więc nie byłem pewien, czy OP po prostu użył adresu IP bez możliwości routingu demonstracji, podobnie jak w przypadku adresu URL)
W każdym razie, mimo że mój post, choć oczywiście jest zbyt późno, aby pomóc OP, mam nadzieję, że może pomóc innym, którzy tu przybędą, szukając rozwiązania wszystkich tych cholernych błędów przekroczenia limitu czasu.
źródło
Istnieje wiele przyczyn przekroczenia limitu czasu 408. Ale zacznijmy od założenia, że wszystko jest w porządku, wtedy w pewnym momencie te 408 zaczną pojawiać się w twoim dzienniku dostępu - tj. 408 0 „-” „-”.
Jak wielu wskazuje w sieci, 408 oznacza, że połączenie zostało nawiązane, ale żadne żądanie nie jest wysyłane w odpowiednim przedziale czasowym, dlatego serwer przerywa połączenie z 408. Jedna arogancka osoba faktycznie odpowiedziała na kogoś, kto prosi o pomoc w tej kwestii z - „Której części Limit czasu nie rozumiesz”.
Myślę, że jest to odpowiedź bardzo nowicjuszowa i pokazuje całkowity brak zrozumienia, w jaki sposób niektóre metody bezpieczeństwa działają w oprogramowaniu serwera WWW.
Wracając do początku, dlaczego widzę te wszystkie 408. Jedną z rzeczy, które będziesz miał wspólnego z resztą z nas zarządzających serwerem, jest ogromna liczba ataków, które otrzymujesz codziennie. Co teraz z nimi robisz? Cóż: używasz wybranych metod bezpieczeństwa, aby sobie z nimi poradzić, oto co się zmienia.
Weźmy bardzo prosty przykład: upuść adres IP. Zawarty w pliku iptabes (rules.v4) masz „-A ufw-user-input -s 37.58.64.228 -j DROP”. Tak więc pojawia się 37.58.64.228 zapora rozpoznaje adres IP i przerywa połączenie. W wielu konfiguracjach nawet nie wiadomo, czy puka do drzwi.
Weźmy teraz bardziej zaawansowany przykład: porzuć połączenie na podstawie niektórych kryteriów. Zawarty w pliku iptabes (rules.v4) masz „-A WEJŚCIE -p tcp -m tcp --port 80 -m ciąg - ciąg„ cgi ”- algo bm --to 1000 -j DROP”. Jest inaczej, ponieważ w tej iptable regule mówimy, spójrz na pierwsze 1000 bajtów ciągu żądania i sprawdź, czy możesz znaleźć podciąg „cgi”, a jeśli znajdziesz ten podciąg, to nie przechodź ponadto po prostu porzuć połączenie.
Tutaj metoda bezpieczeństwa jest dobra, ale jeśli chodzi o twoje logi, wprowadza w błąd. Wygenerowany 408 0 „-” „-” to najlepszy apache, jaki można zrobić w tych okolicznościach. Połączenie zostało nawiązane, a żądanie musiało zostać zaakceptowane do pewnego momentu, aby zastosować regułę porównywania ciągów, która ostatecznie daje wynik 408, ponieważ reguła spełniała kryteria zerwania połączenia. Zatem nasze małe nowicjusze nie mogłyby się bardziej mylić, gdyby próbowały. Połączenie zostało nawiązane i otrzymano żądanie (w takich okolicznościach po prostu nie będzie można go zobaczyć). Mimo że generowany jest kod 408, nie jest to „limit czasu”; Twój serwer po prostu porzucił połączenie po zgłoszeniu żądania w związku z regułą zapory. Istnieje wiele innych reguł, które tworzyłyby tę samą sytuację 408. Don'
Idealnie byłoby, gdyby pojawił się inny kod błędu generowany przez Apache, na przykład - „499”, co oznaczałoby „Serwer odczytał twoje żądanie i zdecydował, że nie można go niepokoić - Sod Off HaHa”.
Dzięki najnowszemu oprogramowaniu do serwerów internetowych można praktycznie wykluczyć ataki DOS, a nowy gen przeglądarek z funkcjami predykcyjnymi nie powoduje tego problemu, jak sugerują niektórzy.
Krótko mówiąc, 408 jest generowany, ponieważ serwer nie odpowiedział na żądanie, w przypadku klienta przekroczono limit czasu połączenia, gdy w rzeczywistości serwer odczytał żądanie, ale zrzucił połączenie z powodów innych niż przekroczenie limitu czasu oczekiwania na prośba.
źródło
Mieliśmy ten problem i przez dłuższą chwilę zastanawialiśmy się. Najlepsze rozwiązanie, jakie wymyśliliśmy, zostało zaproponowane przez zespół ELB wsparcia AWS. Zasadniczo zależy to od tego, czy wszystkie ustawienia limitu czasu serwera httpd są większe niż
idle timeout
ustawienia ELB (domyślnie 60 sekund).Timeout
wartość dyrektywy apache jest dwukrotnie większa niżidle timeout
ustawienie ELB.KeepAlive
funkcję, upewnij się, żeMaxKeepAliveRequests
jest ona bardzo duża (0 dla nieskończoności lub bardzo wysoka, jak 2000) i żeKeepAliveTimeout
jest większa niż twoich ELBidle timeout
.Okazało się, że ustawienie
KeepAlive
(i powiązane ustawienia) specjalnie zmniejszyło liczbę 408s do efektywnie 0 (widzimy kilka, ale bardzo niewiele).źródło
Miałem ten problem za AWS Elastic Load Balancer. Kontrole stanu wygenerowały okropną liczbę 408 odpowiedzi w dzienniku.
Jedynym rozwiązaniem, które działało dla mnie, było ustawienie limitu czasu bezczynności modułu równoważącego obciążenie niższego niż limit czasu odpowiedzi testu sprawności .
źródło
Kolega niedawno zauważył, że chociaż mój ostatni post podał prawidłowe wyjaśnienie, w jaki sposób 408 może mieć związek ze środkiem bezpieczeństwa, nie zaproponował żadnego rozwiązania.
Dziennik Piped Access to moje osobiste rozwiązanie.
Poniższe elementy powinny działać od razu po instalacji w większości konfiguracji Ubuntu i przy minimalnym majsterkowaniu w innych konfiguracjach Apache. Wybrałem PHP, ponieważ jest najłatwiejszy do zrozumienia. Istnieją dwa skrypty: pierwszy zapobiega zapisywaniu 408 w twoim dzienniku dostępu. Drugi skrypt wysyła wszystkie 408 do osobnego pliku dziennika. Tak czy inaczej, wynik nie będzie już 408s w twoim dzienniku dostępu. To twój wybór, który skrypt wdrożyć.
Użyj swojego ulubionego edytora tekstu, używam nano. Otwórz plik, w którym masz dyrektywy „LogFormat” i „CustomLog”. Skomentuj oryginały zwykłym numerem i dodaj następujące. Możesz znaleźć te dyrektywy w pliku poniżej.
sudo nano / etc / apache2 / sites-available / default
UWAGA: Nie loguję obrazów w moim dzienniku dostępu. W moim pliku etc / apache2 / httpd.conf dołączam wiersz
Jeśli to Cię nie interesuje, usuń
env=!dontlog
zCustomLog
dyrektywy.Teraz stwórz jeden z następujących skryptów PHP (
#!/usr/bin/php
jest to odniesienie do lokalizacji interpretera, upewnij się, że lokalizacja jest poprawna dla twojego systemu - możesz to zrobić, pisząc po znaku zachęty $;whereis php
- powinno to zwrócić coś takiegophp: /usr/bin/php /usr/bin/X11/php /usr/share/man/man1/php.1.gz
. widać, że#!/usr/bin/php
jest odpowiedni dla mojej konfiguracji).sudo nano /var/log/apache2/PipedAccessLog.php
sudo nano /var/log/apache2/PipedAccessLog.php
Po zapisaniu
PipedAccessLog.php
skryptu; upewnij się, że root ma własność, wykonując następujące czynności po znaku zachęty $.PipedAccessLog.php
Skrypt musi odczytu / zapisu i wykonania tak wykonać następujące polecenie w wierszu $.Wreszcie, aby wszystko działało, musisz ponownie uruchomić usługę Apache. Wykonaj następujące czynności po znaku zachęty $.
Jeśli twoje dzienniki Apache znajdują się gdzie indziej, zmień ścieżki w celu dopasowania do konfiguracji. Powodzenia.
źródło
Odkryłem, że liczba błędów 408 rośnie zarówno pod względem liczby, jak i częstotliwości. Rośnie również zakres adresów IP, z których pochodzą. Są one rejestrowane w osobnym pliku. Istnieją również oczywiste wzorce logów wyświetlające kolejne 408 z tych samych grup adresów IP, które nie wynikają z normalnych limitów czasu serwera, ponieważ inicjator próbuje nawiązać połączenia w odstępie około 2 lub 3 sekund w cyklicznym wzorcu (nie ma oczekiwania na przekroczenie limitu czasu przed kolejnym próba połączenia) Widzę to jako proste próby połączenia w stylu DDOS. Moim zdaniem są to rodzaj wiadomości potwierdzającej dla twórcy, że serwer jest online ... potem wrócą później z różnymi narzędziami ... Jeśli zwiększysz swój limit czasu, po prostu dajesz im większą alokację czasu do uruchomienia ich programy hakerskie w ramach.
źródło