Czy blokowanie wszystkich połączeń poza USA oprócz portu 80 spowoduje duże obciążenie serwera?

16

Jak większość serwerów (zakładam), ludzie próbują brutalnie wymusić nasze usługi 24/7. Mam cpHulk na czarnej liście ich adresów IP, ale wygląda na to, że byłoby lepiej, gdyby nie dostali się tak daleko. Ja i mój host jesteśmy jedynymi, którzy łączą się z serwerem na portach innych niż 80, więc chciałbym blokować połączenia ze wszystkich krajów poza USA, z wyjątkiem portu 80. Skontaktowałem się z moim hostem, aby to skonfigurować, ale oni wahali się, ponieważ powiedzieli, że spowoduje to wyjątkowo duże obciążenie serwera. Jest to dedykowany serwer Xeon 1230 z 32 GB pamięci RAM z systemem CentOS 6.6 i iptables.

Po pierwsze, jakiś powód, aby tego nie robić? Po drugie, czy to, co mój gospodarz powiedział mi, jest prawidłowe? Po trzecie, czy jest jakiś sposób na osiągnięcie tego bez wpływu na wysoką wydajność?

Big Iron
źródło
12
To niefortunne, że twój dostawca hostingu nie wspomniał o „Ale istnieje standardowy w branży sposób, aby robić to samo, co chcesz, przy znacznie mniejszej konserwacji, lepszym bezpieczeństwie i niskim obciążeniu serwera o nazwie Explicit Deny All. Uzyskaj listę adresów IP, których potrzebujesz na białej liście i przygotuję go za 20 minut. ” - Tego oczekiwałbym od każdego sysadmina wartego krzesła, na którym siedzą.
corsiKa
po prostu zablokuj je, gdy nadużywają ... konserwacja jest minimalna w ten sposób ... przy pełnym stole musisz go aktualizować
Skaperen

Odpowiedzi:

33

Niepoprawne jest ustanowienie konkretnych reguł blokujących każdy zakres IP (poprzez wyświetlenie każdego zakresu).

Ustaw domyślne reguły w iptables, aby zrzucić cały ruch do portów zarządzania. Następnie dodaj reguły, aby umożliwić dostęp tylko z zaufanych adresów IP (twojego i twojego hosta).

Domyślnie blokowanie wszystkiego i zezwalanie tylko na zatwierdzony ruch jest zwykle nazywane „jawnym odrzucaniem wszystkiego” i jest uważane za najlepszą praktykę. W takim przypadku pomaga również uniknąć wpływu na wydajność hosta.

jlehtinen
źródło
Dlaczego, jeśli wiesz, czy jest to jawne odmawianie wszystkiego, gdy domyślnie odmawiasz wszystkim, jawnie dopuszczając tylko kilka adresów IP przez zaporę?
Ben
Nie ma w tym nic pośredniego ...
mr-sk
Jedną z potencjalnych obaw dotyczących białej listy jest dostęp zdalny. Będziesz potrzebować niezawodnej sieci VPN (niezależnej od tego serwera) i zezwolić na jej zasięg IP.
Bar Foo
9

Aby to zrobić, musisz dodać dziesiątki tysięcy reguł zapory ogniowej, po jednej dla każdego bloku sieciowego, w którym w danym kraju może być powiązanych od jednego do kilku tysięcy bloków sieciowych.

Gdy nadejdzie żądanie, należy je sprawdzić pod kątem każdej reguły , co zajmuje bardzo mało czasu dla kilkudziesięciu, a może nawet kilkuset reguł, ale z tyloma regułami, ile trzeba użyć, (1) co żądanie zostanie znacznie spowolnione i (2) zużyje dużo procesora.

Sposobem na to bez znaczącego wpływu na wydajność jest robienie tego, co już robisz: blokowanie tylko tych konkretnych adresów, które są problematyczne.

Michael Hampton
źródło
Dziękuję za odpowiedź, Michael. Czy nie ma sposobu, aby zezwolić tylko na adresy IP z siedzibą w USA, a zatem trzeba tylko sprawdzić jedną regułę?
Big Iron
2
@BigIron Oczywiście, że nie. Istnieją również dziesiątki tysięcy bloków sieciowych w Stanach Zjednoczonych. Tracisz w obu kierunkach.
Michael Hampton
1
@SamuelEdwinWard Nie, nie ma. Mimo że są one rozrzucone po całym kraju, generalnie takie listy bloków nie liczą więcej niż kilkaset wpisów.
Michael Hampton
1
Czy masz odniesienie do tego, jak znaczące jest spowolnienie? Wyszukiwanie liniowe choć wszystkie zestawy reguł brzmią okropnie nieefektywnie, przynajmniej wyszukiwanie binarne oznaczałoby, że przeszukanie tabeli reguł 60 000 zabrałoby tylko 16 sond do tabeli, a to mogłoby być szybsze niż przepuszczenie ruchu do serwera WWW, który mógłby wykonać dysk I / O, aby obsłużyć żądanie. Nie mogłem znaleźć żadnych danych dotyczących dużych zestawów reguł w iptables.
Johnny,
1
@Johnny netfilter (iptables) niestety przetwarza swoje reguły liniowo: serverfault.com/questions/334885
Ross Ridge
5

Potrzebujesz narzędzia o nazwie ipsets

Zestawy IP są strukturą wewnątrz jądra Linux, którą można administrować za pomocą narzędzia ipset. W zależności od typu, obecnie zestaw IP może przechowywać adresy IP, numery portów (TCP / UDP) lub adresy IP z adresami MAC w sposób, który zapewnia błyskawiczną szybkość przy dopasowywaniu wpisu do zestawu.

ważne jest, aby zauważyć, że jest błyskawiczny! Wynika to z faktu, że ogromna liczba sieci IP może być reprezentowana przez jeden skrót zamiast setek lub tysięcy linii reguł iptables.

Aby zablokować kraje, zobacz ten przykład :

Ricardo
źródło
1

Ignorując nieco to, czy robienie tego w ten sposób jest dobrym pomysłem, możesz zrobić to, o co prosiłeś za pomocą modułu GeoIP dla iptables.

Po zbudowaniu i zainstalowaniu modułu (i aktualizowaniu list adresów IP co miesiąc) możesz wykonać takie czynności, aby zablokować poszczególne kraje:

iptables -I INPUT -m geoip --src-cc CN -j DROP

Lub użyj --src-cc US -j ACCEPTitd., Jeśli wolisz określić kraje, które chcesz zachować.

Scott Dudley
źródło
Czy nie byłaby to katastrofa wydajnościowa, nawet gdyby używano „jawnie zaprzeczaj wszystkim” i zezwalając tylko na jeden kraj?
@ AndréDaniel, przyznaję, że nie patrzyłem na sam kod GeoIP, ale zakładając, że używają one nie naiwnej implementacji, która jest mądrzejsza niż sekwencyjne porównywanie wielu bloków sieciowych (np. Trie), nie musi tak być.
Scott Dudley,
A jeśli mówisz o IPv4 i masz 512 Mb do stracenia na regułę, teoretyczna implementacja przy użyciu tabeli odnośników może wykonać zadanie w O (1).
Scott Dudley,
1

Jeśli chcesz zachować możliwość łączenia się z dowolnego miejsca bez utrzymywania czarnej listy / białej listy geolokalizacji, możesz zastosować przełączanie portów . Zatrzymałoby to większość zautomatyzowanych prób, pozwalając ci nadal łączyć się z dowolnego adresu.

Uwaga: Nie należy kłaść portu w pobliże portu, aby go otworzyć, w przeciwnym razie sekwencyjne skanowanie portów aktywuje regułę.

spokojny
źródło
0

Na wszelki wypadek, że masz na swoim routerze dwa lub dwa routery z obsługą BGP ORAZ masz jakieś pojęcie, co do cholery robisz / pracujesz z kimś, kto wie, do cholery, co oni robią, lub są być może za dostawcą zapobiegania DDoS na tyle fajnym, aby pomóc w realizacji tego, istnieje stosunkowo świeża metoda ograniczania ruchu do regionów geograficznych zwana selektywnym blackholingiem, który moim zdaniem jest wart spojrzenia.

https://ripe68.ripe.net/presentations/176-RIPE68_JSnijders_DDoS_Damage_Control.pdf

http://mailman.nanog.org/pipermail/nanog/2014-F February/064381.html

http://www.internetsociety.org/deploy360/blog/2014/07/video-selective-blackholing-at-ripe-68/

Ponieważ ta metoda działa na manipulowaniu trasami, omija wszelkie problemy z ładowaniem serwera.

Dmitri DB
źródło