gpt4 book ai didi

iptables - 最近使用 iptables 进行速率限制会出错

转载 作者:行者123 更新时间:2023-12-04 17:47:58 30 4
gpt4 key购买 nike

由于大量机器人每秒访问我的 Web 服务器太多次,我进入我的服务器并发出以下命令,试图在 5 秒内将连接限制为最多 25 个。我可能需要更严格,但我不是因为我有一个很少访问的页面,它请求 50 个图像并且可能需要 51 个连接,我不希望用户永远等待剩余的 26 个图片。

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

第一个命令在使用 iptables -nL 验证后有效,但第二个命令立即返回此消息:“iptables: Invalid argument. Run `dmesg' for more information.”

一旦我执行它,我会在它的末尾收到以下内容:
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>

前面的内容是指 USB 设备和其他系统设备。有人可以告诉我如何在不遇到随机错误的情况下成功限制传入连接的速率吗?

最佳答案

执行dmesg揭示错误的原因:

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



这意味着 recent iptables的模块仅限于记住 20 个数据包。为了解决此问题,您可以执行以下任何操作:
  • 减少 hitcount 的值iptables 中的参数规则从 26 到 20 或更少。
  • 增加 hitcount 的最大可能值通过设置选项 ip_pkt_list_tot 将参数从默认值 20的xt_recent内核模块。这可以通过创建 ip_pkt_list_tot.conf 来完成。文件在 /etc/modprobe.d/其中包含:

    options xt_recent ip_pkt_list_tot=26



    创建文件后,重新加载 xt_recent内核模块通过modprobe -r xt_recent && modprobe xt_recent或重新启动系统。

  • 检验 iptables的手册页得出相同的结论:
       --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.

    请注意 xt_recent被称为 ipt_recent在某些系统上。

    关于iptables - 最近使用 iptables 进行速率限制会出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26936653/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com