Skip to content
  • Vishwanath Pai's avatar
    netfilter: xt_hashlimit: add rate match mode · bea74641
    Vishwanath Pai authored
    
    
    This patch adds a new feature to hashlimit that allows matching on the
    current packet/byte rate without rate limiting. This can be enabled
    with a new flag --hashlimit-rate-match. The match returns true if the
    current rate of packets is above/below the user specified value.
    
    The main difference between the existing algorithm and the new one is
    that the existing algorithm rate-limits the flow whereas the new
    algorithm does not. Instead it *classifies* the flow based on whether
    it is above or below a certain rate. I will demonstrate this with an
    example below. Let us assume this rule:
    
    iptables -A INPUT -m hashlimit --hashlimit-above 10/s -j new_chain
    
    If the packet rate is 15/s, the existing algorithm would ACCEPT 10
    packets every second and send 5 packets to "new_chain".
    
    But with the new algorithm, as long as the rate of 15/s is sustained,
    all packets will continue to match and every packet is sent to new_chain.
    
    This new functionality will let us classify different flows based on
    their current rate, so that further decisions can be made on them based on
    what the current rate is.
    
    This is how the new algorithm works:
    We divide time into intervals of 1 (sec/min/hour) as specified by
    the user. We keep track of the number of packets/bytes processed in the
    current interval. After each interval we reset the counter to 0.
    
    When we receive a packet for match, we look at the packet rate
    during the current interval and the previous interval to make a
    decision:
    
    if [ prev_rate < user and cur_rate < user ]
            return Below
    else
            return Above
    
    Where cur_rate is the number of packets/bytes seen in the current
    interval, prev is the number of packets/bytes seen in the previous
    interval and 'user' is the rate specified by the user.
    
    We also provide flexibility to the user for choosing the time
    interval using the option --hashilmit-interval. For example the user can
    keep a low rate like x/hour but still keep the interval as small as 1
    second.
    
    To preserve backwards compatibility we have to add this feature in a new
    revision, so I've created revision 3 for hashlimit. The two new options
    we add are:
    
    --hashlimit-rate-match
    --hashlimit-rate-interval
    
    I have updated the help text to add these new options. Also added a few
    tests for the new options.
    
    Suggested-by: default avatarIgor Lubashev <ilubashe@akamai.com>
    Reviewed-by: default avatarJosh Hunt <johunt@akamai.com>
    Signed-off-by: default avatarVishwanath Pai <vpai@akamai.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    bea74641