Mam serwer z Apache i niedawno zainstalowałem mod_security2, ponieważ często mnie atakują:
Moja wersja apache to apache v2.2.3 i używam mod_security2.c
To były wpisy z dziennika błędów:
[Wed Mar 24 02:35:41 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:31 2010] [error]
[client 202.75.211.90] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:47:49 2010] [error]
[client 95.228.153.177] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
[Wed Mar 24 02:48:03 2010] [error]
[client 88.191.109.38] client sent HTTP/1.1 request without hostname
(see RFC2616 section 14.23): /w00tw00t.at.ISC.SANS.DFind:)
Oto błędy z dziennika dostępu:
202.75.211.90 - -
[29/Mar/2010:10:43:15 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:11:40:41 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
211.155.228.169 - -
[29/Mar/2010:12:37:19 +0200]
"GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 392 "-" "-"
Próbowałem skonfigurować mod_security2 w następujący sposób:
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecFilterSelective REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecFilterSelective REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Rzeczą w mod_security2 jest to, że SecFilterSelective nie może być używany, daje mi błędy. Zamiast tego używam następującej reguły:
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind"
SecRule REQUEST_URI "\w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:"
SecRule REQUEST_URI "w00tw00t\.at\.ISC\.SANS\.DFind:\)"
Nawet to nie działa. Nie wiem już, co mam robić. Czy ktoś ma jakąś radę?
Aktualizacja 1
Widzę, że nikt nie może rozwiązać tego problemu za pomocą mod_security. Jak dotąd używanie ip-tabel wydaje się najlepszą opcją, ale myślę, że plik stanie się bardzo duży, ponieważ ip zmienia się kilka razy dziennie.
Wymyśliłem 2 inne rozwiązania, czy ktoś może komentować je jako dobre, czy nie.
Pierwszym rozwiązaniem, jakie przychodzi mi do głowy, jest wykluczenie tych ataków z moich dzienników błędów apache. Ułatwi mi to wykrycie innych pilnych błędów, gdy się pojawią, i nie muszę przeszukiwać długiego dziennika.
Myślę, że druga opcja jest lepsza i polega na blokowaniu hostów, które nie są wysyłane w prawidłowy sposób. W tym przykładzie atak w00tw00t jest wysyłany bez nazwy hosta, więc myślę, że mogę zablokować hosty, które nie są w prawidłowej formie.
Aktualizacja 2
Po przejrzeniu odpowiedzi doszedłem do następujących wniosków.
Aby mieć niestandardowe rejestrowanie dla apache, zużyjesz trochę niepotrzebnych odwołań, a jeśli naprawdę istnieje problem, prawdopodobnie będziesz chciał zajrzeć do pełnego dziennika bez niczego brakującego.
Lepiej po prostu zignorować trafienia i skoncentrować się na lepszym sposobie analizy dzienników błędów. Dobrym rozwiązaniem jest stosowanie filtrów do dzienników.
Ostatnie przemyślenia na ten temat
Wspomniany wyżej atak nie dotrze do twojej maszyny, jeśli masz przynajmniej aktualny system, więc zasadniczo nie martw się.
Po pewnym czasie może być trudno odfiltrować wszystkie fałszywe ataki od prawdziwych, ponieważ zarówno dzienniki błędów, jak i dzienniki dostępu stają się bardzo duże.
Zapobieganie temu w jakikolwiek sposób będzie cię kosztować zasoby i dobrą praktyką jest nie marnowanie zasobów na nieistotne rzeczy.
Rozwiązaniem, którego teraz używam, jest Linux Logwatch . Wysyła mi podsumowania dzienników, które są filtrowane i grupowane. W ten sposób możesz łatwo oddzielić to, co ważne, od tego, co nieistotne.
Dziękuję wszystkim za pomoc i mam nadzieję, że ten post może być pomocny także dla kogoś innego.