2014-11-14 8 views
5

Z powodu dużej liczby botów uzyskujących dostęp do mojego serwera sieciowego zbyt wiele razy na sekundę, wszedłem na mój serwer i wydałem następujące polecenia, próbując ograniczyć połączenia do maksymalnie 25 w 5 sekund . Być może powinienem być bardziej surowy, ale nie jestem, ponieważ mam jedną stronę, która jest rzadko odwiedzana, która żąda 50 obrazów i które mogą potrzebować 51 połączeń i nie chcę, aby użytkownicy czekali na zawsze na pozostałe 26 zdjęć.ratelimitowanie z iptables recent daje błąd

iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --set 
iptables -I INPUT -p tcp --dport 80 -i eth0 -m state --state NEW -m recent --update --seconds 5 --hitcount 26 -j DROP 

Pierwsze prace polecenie po weryfikacji z iptables -nl ale drugie polecenie natychmiast zwraca komunikat „iptables: Invalid argument. Uruchom` dmesg”aby uzyskać więcej informacji.”

Jak tylko stracony go, Otrzymuję następujący po zakończeniu go:

Call Trace: 
<IRQ> [<ffffffff8112f7ba>] ? __alloc_pages_nodemask+0x74a/0x8d0 
[<ffffffff81299270>] ? swiotlb_map_page+0x0/0x100 
[<ffffffff8116e282>] ? kmem_getpages+0x62/0x170 
[<ffffffff8116ee9a>] ? fallback_alloc+0x1ba/0x270 
[<ffffffff8116e8ef>] ? cache_grow+0x2cf/0x320 
[<ffffffff8116ec19>] ? ____cache_alloc_node+0x99/0x160 
[<ffffffff8116fb9b>] ? kmem_cache_alloc+0x11b/0x190 
[<ffffffff8144d058>] ? sk_prot_alloc+0x48/0x1c0 
[<ffffffff8144e262>] ? sk_clone+0x22/0x2e0 
[<ffffffff8149ff16>] ? inet_csk_clone+0x16/0xd0 
[<ffffffff814b97d3>] ? tcp_create_openreq_child+0x23/0x470 
[<ffffffff814b6f8d>] ? tcp_v4_syn_recv_sock+0x4d/0x310 
[<ffffffff814b9576>] ? tcp_check_req+0x226/0x460 
[<ffffffff814b69cb>] ? tcp_v4_do_rcv+0x35b/0x490 
[<ffffffffa0322557>] ? ipv4_confirm+0x87/0x1d0 [nf_conntrack_ipv4] 
[<ffffffff814b825a>] ? tcp_v4_rcv+0x51a/0x900 
[<ffffffff81495270>] ? ip_local_deliver_finish+0x0/0x2d0 
[<ffffffff8149534d>] ? ip_local_deliver_finish+0xdd/0x2d0 
[<ffffffff814955d8>] ? ip_local_deliver+0x98/0xa0 
[<ffffffff81494a9d>] ? ip_rcv_finish+0x12d/0x440 
[<ffffffff81495025>] ? ip_rcv+0x275/0x350 
[<ffffffff8145c3eb>] ? __netif_receive_skb+0x4ab/0x750 
[<ffffffff81460058>] ? netif_receive_skb+0x58/0x60 
[<ffffffff81460160>] ? napi_skb_finish+0x50/0x70 
[<ffffffff814618c9>] ? napi_gro_receive+0x39/0x50 
[<ffffffffa024e267>] ? e1000_receive_skb+0x67/0x110 [e1000e] 
[<ffffffffa0250e6f>] ? e1000_clean_rx_irq+0x37f/0x580 [e1000e] 
[<ffffffffa025397d>] ? e1000e_poll+0x8d/0x2d0 [e1000e] 
[<ffffffff814619e3>] ? net_rx_action+0x103/0x2f0 
[<ffffffff8107a5f1>] ? __do_softirq+0xc1/0x1e0 
[<ffffffff810e6c60>] ? handle_IRQ_event+0x60/0x170 
[<ffffffff8107a64f>] ? __do_softirq+0x11f/0x1e0 
[<ffffffff8100c30c>] ? call_softirq+0x1c/0x30 
[<ffffffff8100fa75>] ? do_softirq+0x65/0xa0 
[<ffffffff8107a4a5>] ? irq_exit+0x85/0x90 
[<ffffffff81532525>] ? do_IRQ+0x75/0xf0 
[<ffffffff8100b9d3>] ? ret_from_intr+0x0/0x11 
<EOI> 

Zawartość przed odnoszą się do urządzeń USB i innych urządzeń systemowych. Czy ktoś może mi powiedzieć, w jaki sposób z powodzeniem ograniczać stawki przychodzące, nie doświadczając przypadkowych błędów?

Odpowiedz

8

Wykonywanie dmesg ujawnia przyczynę błędu:

[78482.351825] xt_recent: hitcount (26) is larger than packets to be remembered (20)

Oznacza to, że moduł iptablesrecent ogranicza się do pamiętając zaledwie 20 pakietów. W celu rozwiązania tego problemu można wykonać żadnego z następujących czynności:

  1. Zmniejsz wartość parametru hitcount w iptables reguły od 26 do 20 lub mniej.
    lub
  2. zwiększyć maksymalną możliwą wartość dla parametru od jego wartości domyślnej 20 hitcount poprzez ustawienie opcji ip_pkt_list_tot modułu jądra xt_recent. Można to zrobić poprzez stworzenie pliku ip_pkt_list_tot.conf w /etc/modeprobe.d/, który zawiera:

    options xt_recent ip_pkt_list_tot=26

    Po utworzeniu pliku, przeładować moduł jądra xt_recent poprzez modprobe -r xt_recent && modprobe xt_recent lub ponownie uruchomić system.

strona Sprawdzanie iptables „s mężczyzna prowadzi do tego samego wniosku:

--hitcount hits 
      This option must be used in conjunction with one of --rcheck or --update. When used, this will narrow the match to only happen when 
      the address is in the list and packets had been received greater than or equal to the given value. This option may be used along 
      with --seconds to create an even narrower match requiring a certain number of hits within a specific time frame. The maximum value 
      for the hitcount parameter is given by the "ip_pkt_list_tot" parameter of the xt_recent kernel module. Exceeding this value on the 
      command line will cause the rule to be rejected. 

Zauważ, że xt_recent nazywa ipt_recent na niektórych systemach.

+0

Zajmę się 20 na razie. dzięki –

+0

Wystarczy dodać ostrzeżenie, że nie można "modprobe -r", gdy istnieje jedna (lub więcej) reguła iptables za pomocą modułu '-m recent'. Sprawdź za pomocą 'iptables-save | grep recent' first. W takim przypadku albo tymczasowo usuń te reguły, albo uruchom ponownie. – pepoluan

Powiązane problemy