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ść?
Odpowiedzi:
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.
źródło
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.
źródło
Potrzebujesz narzędzia o nazwie ipsets
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 :
źródło
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:
Lub użyj
--src-cc US -j ACCEPT
itd., Jeśli wolisz określić kraje, które chcesz zachować.źródło
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łę.
źródło
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.
źródło