Hi,<br><br>On CentOS 5.5, <i style="font-family:courier new,monospace">--hashlimit-above</i> is not a valid option for the &quot;hashlimit&quot; match. Which version of iptables introduces this, and how can I mimic that same ruleset with the options available to me in version 1.3.5 of iptables?<br>
<br>Thanks,<br><br><div class="gmail_quote">On Fri, Jan 20, 2012 at 7:51 PM, John <span dir="ltr">&lt;<a href="mailto:lists.cod@nuclearfallout.net">lists.cod@nuclearfallout.net</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

  
    
  
  <div bgcolor="#FFFFFF" text="#000000"><div class="im">
    On 1/20/2012 3:27 PM, Marco Padovan wrote:
    </div><blockquote type="cite"><font size="-1"><font face="Verdana"><div class="im">I was referring to dynamic
          filtering using -m recent<br>
          <br></div>
          [not] to manually adding IPs O.o</font></font></blockquote>
    <br>
    Marco&#39;s right about this. The most effective way to prevent effects
    from these attacks on Linux is to use a combination of the &quot;string&quot;,
    &quot;hashlimit&quot;, and &quot;recent&quot; modules. Done right, the solution is
    mostly automatic, so you shouldn&#39;t need to manually add IPs.<br>
    <br>
    These commands, for instance, would block external IPs that send
    queries at a rate of 2/second or higher:<br>
    <br>
    # add a host to the banlist and then drop the packet.<br>
    iptables -N QUERY-BLOCK<br>
    iptables -A QUERY-BLOCK -m recent --set --name blocked-hosts -j DROP<br>
    <br>
    # is this a query packet? if so, block commonly attacked ports
    outright, <br>
    # then see if it&#39;s a known attacking IP, then see if it is sending
    at a high<br>
    # rate and should be added to the list of known attacking IPs.<br>
    iptables -N QUERY-CHECK<br>
    iptables -A QUERY-CHECK -p udp -m string ! --string &quot;getstatus&quot;
    --algo bm --from 32 --to 41 -j RETURN<br>
    iptables -A QUERY-CHECK -p udp --sport 0:1025 -j DROP<br>
    iptables -A QUERY-CHECK -p udp --sport 3074 -j DROP<br>
    iptables -A QUERY-CHECK -p udp --sport 7777 -j DROP<br>
    iptables -A QUERY-CHECK -p udp --sport 27015:27100 -j DROP<br>
    iptables -A QUERY-CHECK -p udp --sport 25200 -j DROP<br>
    iptables -A QUERY-CHECK -p udp --sport 25565 -j DROP<br>
    # is it already blocked? continue blocking it and update the counter
    so it<br>
    # gets blocked for at least another 30 seconds.<br>
    iptables -A QUERY-CHECK -m recent --update --name blocked-hosts
    --seconds 30 --hitcount 1 -j DROP<br>
    # check to see if it exceeds our rate threshold,<br>
    # and add it to the list if it does.<br>
    iptables -A QUERY-CHECK -m hashlimit --hashlimit-mode srcip
    --hashlimit-name getstatus --hashlimit-above 2/second -j QUERY-BLOCK<br>
    <br>
    # look at all the packets going to q3/cod*/et/etc servers<br>
    iptables -A INPUT -p udp --dport 27960:29000 -j QUERY-CHECK<br>
    <br>
    The &quot;recent&quot; module makes it possible to block up to 100 IPs at once
    with this method (any attackers beyond this would only be
    rate-limited). That number can be raised when the module is loaded,
    but I haven&#39;t seen 100 attacks happening at once yet (typically it&#39;s
    maybe 5-20 at once). You can see blocked hosts later by looking at
    /proc/net/xt_recent/blocked-hosts.<br>
    <br>
    (If you don&#39;t have &quot;recent&quot;, you could get away without it -- just
    be aware that some of the packets will get through, increasing load
    on the game server. Without &quot;hashlimit&quot;, you&#39;d still see an
    advantage from the port checks, but you&#39;d need to manually block IPs
    that are being hit on other ports. Without &quot;string&quot;, you&#39;d similarly
    be down to just port checks, and need to take out the other rules.)<span class="HOEnZb"><font color="#888888"><br>
    <br>
    -John<br>
  </font></span></div>

<br>_______________________________________________<br>
cod mailing list<br>
<a href="mailto:cod@icculus.org">cod@icculus.org</a><br>
<a href="http://icculus.org/mailman/listinfo/cod" target="_blank">http://icculus.org/mailman/listinfo/cod</a><br>
<br></blockquote></div><br><br clear="all"><br>-- <br><i><b><font size="1"><span style="font-family:tahoma,sans-serif">Geoff Goas</span><br style="font-family:tahoma,sans-serif"><span style="font-family:tahoma,sans-serif">Systems Engineer</span></font></b></i><br>
<br>