2014-11-14 6 views
5

Aufgrund einer großen Anzahl von Bots Zugriff auf meinen Webserver zu viele Male pro Sekunde, ging ich auf meinem Server und gab die folgenden Befehle in einem Versuch, Verbindungen auf maximal 25 in 5 Sekunden zu begrenzen . Ich muss vielleicht strenger sein, aber ich bin nicht, weil ich eine Seite habe, auf die selten zugegriffen wird, die 50 Bilder anfordert und die 51 Verbindungen benötigt und ich möchte nicht, dass die Benutzer für immer auf die verbleibenden 26 Bilder warten.ratelimiting mit iptables letzten gibt Fehler

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 

Der erste Befehl funktioniert, nachdem sich mit iptables Verifizieren -nl aber der zweiten Befehl gibt sofort diese Meldung: „iptables:. Invalid argument Führen` dmesg‘für weitere Informationen.“

Sobald ich es ausgeführt wird, erhalte ich folgende am Ende davon:

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> 

Der Inhalt vor dem USB-Geräte und andere Systemgeräte beziehen. Kann mir jemand sagen, wie eingehende Verbindungen erfolgreich begrenzt werden können, ohne dass zufällige Fehler auftreten?

Antwort

8

dmesg Executing zeigt die Ursache des Fehlers:

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

Dies bedeutet, dass das Modul von recentiptables zu erinnern nur 20 Pakete begrenzt ist. Um dieses Problem zu lösen, können Sie jede der folgenden Maßnahmen durch:

  1. Reduzieren Sie den Wert des hitcount Parameter in Ihrer iptables Regel 26 bis 20 oder weniger.
    oder
  2. Erhöhung der maximal mögliche Wert für die hitcount Parameter vom Standardwert von 20 durch die Option ip_pkt_list_tot des xt_recent Kernelmoduls festlegen. Dies kann durch die Schaffung einer Datei in ip_pkt_list_tot.conf/etc/modeprobe.d/ erfolgen, die enthält:

    options xt_recent ip_pkt_list_tot=26

    Sobald die Datei erstellt wird, laden die xt_recent Kernelmodul über modprobe -r xt_recent && modprobe xt_recent oder das System neu starten.

Inspecting iptables ‚s Manpage führt zu dem gleichen Schluss:

--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. 

Beachten Sie, dass xt_recentipt_recent auf einigen Systemen genannt wird.

+0

Ich werde mit 20 für jetzt ertragen. danke –

+0

Nur um eine Warnung hinzuzufügen, dass Sie "modprobe -r" nicht können, wenn es eine (oder mehrere) iptables-Regel (en) gibt, die das '-m recent' Modul verwenden. Überprüfen Sie mit 'iptables-save | grep rezent zuerst. Löschen Sie diese Regeln in diesem Fall entweder vorübergehend oder starten Sie sie neu. – pepoluan