1

Temat: Ochrona przed zbyt dużą ilością żądań ping

Właśnie rozmontowałem sobie własny skrypt FW i pododawałem regułki do plików /etc/config/firewall oraz /etc/firewall.user . Praktycznie całą podstawę udało mi się przepisać i w końcu w miarę zrozumieć to przetwarzanie reguł w wykonaniu OpenWRT. Są jednak dwa problemy, których za bardzo nie mogę rozwiązać.

Domyślnie w pliku  /etc/config/firewall jest taki blok:

config rule
        option name             Allow-Ping
        option src              wan
        option proto            icmp
        option icmp_type        echo-request
        option family           ipv4
        option target           ACCEPT

Czyli zezwalanie na ping od strony WAN. Problem w tym, że ta reguła trafia do zone_wan_input . Chodzi o to, że tam trafiają wszystkie pakiety w stanie NEW. Wszystkie pozostałe są łapane przez wcześniejszą ESTABLISHED,RELATED. Tak stan rzeczy w przypadku ping powoduje, że jeśli ktoś z zewnątrz wyśle ping, to zostanie utworzony wpis w tablicy conntrack'a. Tylko ten pierwszy pakiet zostanie złapany przez tę powyższą regułę, a reszta pójdzie na ESTABLISHED,RELATED . W efekcie można z routerem od strony WAN nawiązać dowolną ilość nowych "połączeń" ping i będą tworzone kolejne wpisy w tablicy, a ta ma skończony rozmiar. Jak się zapełni, to nowe połączenia nie będą nawiązywane.

Można by tę regułę ograniczyć do jakieś hosta via 'option src_ip' ale czasem ten ping na WAN się przydaje. Zatem pomyślałem sobie o jakimś mechanizmie limitowania. No i te regułki w OpenWRT obsługują również limit ale limitowanie tej powyższej nic nie da, bo to ograniczy jedynie pakiety w stanie NEW i w ten sposób ilość jednoczesnych żądań ping ciągle może się zwiększać, nawet jak ustawi się tutaj 1/s -- będą się zwiększać w tempie 1/s. big_smile

Można temu zaradzić przez ładowanie reguł do łańcucha 'input_rule', bo on jest przed tym całym ESTABLISHED,RELATED.

No i pytanie jest, jak to zrobić w sposób właściwy? Czy przez ten /etc/config/firewall da radę skierować regułę do tego łańcucha 'input_rule' ? Z tego co czytałem na wiki to chyba raczej nie za bardzo i trzeba to robić przez plik /etc/firewall.user . No i to rozwiązanie też mi może pasować, tylko pytanie jest, jak dynamicznie dobrać interfejs WAN w tym pliku? Póki co to statycznie tam zdefiniowałem eth0. Niemniej jednak, jak się przeniesie konfigurację na inny router i ten interfejs ulegnie zmianie, to wtedy trzeba będzie przepisywać ten plik /etc/firewall.user .

2

Odp: Ochrona przed zbyt dużą ilością żądań ping

Ale możesz wykryć co jest wanem i podstawić to pod regułę. firewall.user generalnie jest do firewalla, ale możesz tam wstawić cokolwiek.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Ochrona przed zbyt dużą ilością żądań ping

Jak wykryć?

4

Odp: Ochrona przed zbyt dużą ilością żądań ping

ifstatus wan pokaż go, możesz odczytać przez

. /lib/functions/network.sh
network_get_phydev ifname wan
echo $ifname
Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Ochrona przed zbyt dużą ilością żądań ping

Ok mam. big_smile

Tylko tam w tym co dałeś to literówka jest:

network_get_phydev 
network_get_physdev

6

Odp: Ochrona przed zbyt dużą ilością żądań ping

Ja pisałem z głowy, a ty na tyle jesteś rozumny że zajrzałeś jak to się pisze smile

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7 (edytowany przez morfik 2016-05-08 13:03:46)

Odp: Ochrona przed zbyt dużą ilością żądań ping

Grunt to wiedzieć, co się dzieje i co się robi. big_smile

8 (edytowany przez mar_w 2016-05-08 21:56:15)

Odp: Ochrona przed zbyt dużą ilością żądań ping

morfik napisał/a:

Czyli zezwalanie na ping od strony WAN....
...
No i pytanie jest, jak to zrobić w sposób właściwy?

Skoro lubisz wyzwania i drążyć różne tematy a w dodatku jesteś ambitny to myślę, że możesz sam spróbować napisać sobie politykę. Myślę że powinieneś skorzystać z modułów: hashlimit oraz recent. Hashlimit ustali limity względem pojedynczego adresu a modułem recent zablokujesz na jakiś czas komunikację z zalewającym adresem smile

Dodatkowo utwórz sobie łańcuchy:
1. do których trafią adresy zablokowane na jakiś określony czas.
2. w którym będą analizowane pakiety pod określonym przez Ciebie kątem.

Następna kwestia to taka, że atakujący może posiadać jedno nawiązane połączenie i nadal zalewać system pakietami icmp lub zapytaniami DNS, które będą miały status RELATED. Dlatego trzeba też o tym pomyśleć i uwzględnić te rodzaje ruchu (jeżeli chcesz mieć tak bardzo super dopracowaną politykę).

Takie łańcuchy możesz dodać do dowolnego łańcucha w tabeli filter. Chyba na początek można dodać to do łańcucha INPUT, żeby najpierw przeleciały przez Twoje wymagania a potem domyślnie przez politykę Openwrt....
Tak samo potem możesz dodać tak spreparowane łańcuchy do łańcucha OUTPUT...

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

9

Odp: Ochrona przed zbyt dużą ilością żądań ping

Ja do tej pory jechałem na swoim FW ale mnie interesuje operowanie na tym mechanizmie z OpenWRT, bo w dużej części przypadków to wymagane jest dodanie 1 lub 2 reguł i to wszystko co przeciętny domownik potrzebuje. Nie ma sensu pisać całego skryptu na xxx linijek, który będzie realizował dokładnie to samo co domyślnie robi OpenWRT.

Ja używam debiana na co dzień, także ja iptables mam w miarę dobrze opanowany, bo w końcu mam na swoim kompie sporo ciekawych regułek. big_smile

Ten domyślny FW co jest w OpenWRT ma przecie cały WAN zablokowany. Jedynie co to ping stwarza zagrożenie, choć u mnie już przestał. big_smile

A poza tym, to zamiast recent, zainteresuj się ipset i dynamicznymi listami adresów

10

Odp: Ochrona przed zbyt dużą ilością żądań ping

Dzięki zainteresuje się.
Myślałem, że chcesz pozbierać od użytkowników jakieś wskazówki jak to napisać. A TY już wszystko masz.
Zmylił mnie temat wątku. Bo w zasadzie TY szukałeś recepty jak wykryć zmieniający się WAN w routerach.

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

11 (edytowany przez morfik 2016-05-09 14:05:48)

Odp: Ochrona przed zbyt dużą ilością żądań ping

Jak umieszczasz reguły w /etc/firewall.user , to jeśli chcesz okroić je to tylko do interfejsu WAN, to zwykle wystarczy umieścić je w odpowiednim łańcuchu, w tym przypadku zone_wan_input i to zwykle wystarcza, bo ten łańcuch już ma zdefiniowany interfejs WAN dynamicznie i nie trzeba go określać w regułach iptables. Tylko ten łańcuch jest przetwarzany po ESTABLISHED,RELATED i dlatego nie da rady w nim limitować ilości żądań ping. Można to robić przez łańcuch input_rule ale on z kolei nie ma przypisanego interfejsu i jeśli bym przykładowo dodał w nim takie regułki:

iptables -t filter -A input_rule -p icmp --icmp-type echo-request  -m limit --limit 50/s --limit-burst 100 -j ACCEPT -m comment --comment "Limit Ping"
iptables -t filter -A input_rule -p icmp --icmp-type echo-request -j DROP -m comment --comment "Drop Ping"

To ten limit by również dotyczył sieci lokalnej. A mi zależy jedynie na ograniczeniu od strony wan i dlatego reguła w tym łańcuchu wymaga podania przełącznika -i z nazwą interfejsu. Dlatego potrzebny był sposób, który by dynamicznie tę nazwę dobrał i tak te powyższe reguły mają taką postać:

iptables -t filter -A input_rule -i $ifname -p icmp --icmp-type echo-request -m limit --limit 50/s --limit-burst 100 -j ACCEPT -m comment --comment "Limit Ping"
iptables -t filter -A input_rule -i $ifname -p icmp --icmp-type echo-request -j DROP -m comment --comment "Drop Ping"

W ten sposób nazwa interfejsu WAN już nie ma znaczenia i może się zmieniać, a reguła i tak zostanie dobrana dla właściwego interfejsu

12

Odp: Ochrona przed zbyt dużą ilością żądań ping

O widzisz,
pomyśl żeby dodać to do swojego poradnika.

Im dalej w las tym ciemniej. Pomyślałem sobie czy tak samo zadziała to co proponujesz dla multiwan-u ? Czy trzeba jeszcze coś dopisać?
Jeszcze nie sprawdzałem... Jak sądzisz?

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

13

Odp: Ochrona przed zbyt dużą ilością żądań ping

Też się zastanawiałem jak to będzie wyglądać w kwestii kilku interfejsów WAN. Póki co nie wiem. Może niedługo sprawdzę jak to wygląda ale raczej wątpię, że to tak się da zrobić. Podobnie masz przy logowaniu via ssh jak masz 2 interfejsy WAN, tj. pokazuje tylko jeden, ten główny.

14

Odp: Ochrona przed zbyt dużą ilością żądań ping

Przy multiwanie wklepałem regułkę z negacją interfejsów. Wszystko oprócz interfejsu br-lan, ponieważ br-lan jest chyba? zawsze jako sieć LAN. Nie muszę wykrywać jakie interfejsy WAN są przy multiwanie.

iptables -t filter -A input_rule -p icmp ! -i br-lan -m limit  --limit 1/s --limit-burst 3 -j ACCEPT -m comment --comment "LIMIT-PING"
iptables -t filter -A input_rule -p icmp ! -i br-lan -j DROP -m comment --comment "DROP-PING"

Co o tym sądzisz ?

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

15

Odp: Ochrona przed zbyt dużą ilością żądań ping

BTW do tego -p icmp dodaj typ, by przepuszczać i limitować tylko pingi.

Co do ! -i br-lan, hmm to pewnie ostatecznie można by tak zrobić.