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 ACCEPTCzyli 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. ![]()
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 .