From: "Taylor, Grant" <gtaylor@riverviewtech.net>
To: Netfilter User Mailing List <netfilter@lists.netfilter.org>
Subject: Re: SSH Brute Force not working (any longer)
Date: Thu, 28 Jul 2005 14:28:20 -0500 [thread overview]
Message-ID: <42E931D4.8000508@riverviewtech.net> (raw)
In-Reply-To: <5d2f37910507270936737ad3d1@mail.gmail.com>
After having messed with the SSH_Brute_Force script(s) extensively I think I can help you with this.
<testwall1>
iptables -N SSH_Brute_Force
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_Brute_Force
#following, adapted from grant's post, lets everything through
iptables -A SSH_Brute_Force -m recent --name SSH ! --rcheck --seconds 60 --hitcount 4 -j RETURN
#following, from grant's original post, gives iptables v1.2.9: Unknown arg `4'
#iptables -A SSH_Brute_Force -m recent --name SSH ! --rcheck --seconds 60 -m recent --hitcount 4 --set --name SSH -j RETURN
iptables -A SSH_Brute_Force -m recent --name SSH --update
iptables -A SSH_Brute_Force -j LOG --log-prefix "IPT_TEST SSH DROP: "
iptables -A SSH_Brute_Force -p tcp -j TARPIT
</testwall1>
After a reboot I'm betting that your testwall1 script will never NOT RETURN packets as you are never really doing a SET of the information in the recent list and thus never having a packet counter get to 4 where where the inverse match would fail and thus not return. In my experience "--update" will only increment a value that already is set to something. Conversely "--rcheck" has to have a value to check against.
<testwall2>
/sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSHBF
/sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSHBF -j LOG --log-prefix "IPT_TEST SSH DROP: "
/sbin/iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 --name SSHBF -j DROP
</testwall2>
Something tells me that you *might* get one packet through this filter but it would depend on what else you have done in the last 60 seconds. When the packet is indeed in state NEW it will come in to the first rule and have it's value set in the SSHBF recent list. Subsequently the packet will have it's entry in the SSHBF recent list updated (incremented by 1) while evaluating the 2nd rule. Seeing as how this packet should now have it's recent list entry counter at 2 it will not match and thus not log as the recent match should fail but still update the recent list. Finally the packet will have it's entry in the SSHBF recent list updated while evaluating the 3rd rule. Seeing as how the packet should now have it's recent list entry counter at 3 it will not match and thus not be dropped. However this will all depend on the fact that there are no entries in the recent list for any give
n packet before it starts because if it even has a value of 1 it will be dropped by the ti
me that it reaches the 3rd rule. I suspect that you might be able to get one packet and thus connection through this filter on the first pass but have a lot of trouble with subsequent connections.
<testwall3>
iptables -N SSH_Brute_Force
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSH --set --rsource -j SSH_Brute_Force
iptables -A SSH_Brute_Force -m recent ! --rcheck --seconds 60 --hitcount 3 --name SSH --rsource -j RETURN
iptables -A SSH_Brute_Force -j LOG --log-prefix "IPT_TEST SSH drop: "
iptables -A SSH_Brute_Force -p tcp -j TARPIT
</testwall3>
I would expect that this script did work for you. From the fact that it is the last testwall I'm going to assume that it did for a while. The only thing that comes to mind as to why this would not work would be if for some reason the packet(s) started matching a state of NEW again. The only reason that I can think of that your packet would erroneously be showing up as a state of NEW again would be if for some reason your conntrack table was full. Your size conntrack table depends on the amount of memory that you have in the router and thus could possibly be over run as the conntrack table is a FIFO as far as I know. If this is the case you should have seen some logs in dmesg regarding the conntrack table being full. Sorry I don't remember the exact wording of the error as it's been over a year sense I dealt with that on a different router.
I don't know what to think about the patch (http://patchwork.netfilter.org/netfilter-devel/patch.pl?id=2587) that Marius referenced as I have not experienced this issue and thus have not had to address it, though it does sound plausible.
One thing that I can recommend is that you check the /proc/net/ipt_recent/<recent list name> file(s) for the existence of a line matching the IP (and possibly the TTL) that you are having problem with. If there is a line in this file(s) then your IP is in that recent list with a hit count of the number of packets that are listed on the line. Or at least this is how I understand it.
Something else that I did that you might find useful was to have a rule something like "-m recent --name SSH --remove" to make sure that the IP that you are testing from is NOT in the recent list so you can fiddle with things and then get back to a clean slate with out having to reboot.
If you would care to look at the version of the script that I am running take a look at this previous post https://lists.netfilter.org/pipermail/netfilter/2005-June/061362.html
Grant. . . .
curby . wrote:
> I know enough to realize that it didn't stop working just because it
> hates me: most likely, i changed something in the configuration or
> something to make it stop working. However, I can't think of anyting
> I could have done to two different machines to make them stop working
> in exactly that same way. Basically, every SSH attempt skips the
> return to the input chain and jumps directly to log/drop or
> log/tarpit. I've tried increasing the --hitcount, tried rebooting or
> otherwise restarting the network service, tried using a different
> --name in recet, etc.
>
> I have tried all the following scripts (I can paste their contents in
> if requested but it would be rather annoying because of their combined
> length) with no success. Any ideas on what might have happened?
> Kernel version and iptables version didn't change, the recent module
> loads with no errors, and all the iptables commands to insert rules
> complete with no errors.
>
> Links to variations that I tried with no success:
>
> http://curby.net/doc/testwall1
> http://curby.net/doc/testwall2
> http://curby.net/doc/testwall3
> http://curby.net/doc/testwall4
>
> Hopefully it's a really simple typo or something, though with all the
> variations I've tried, I'm starting to doubt that simple explanation.
> What might the problem be? Thanks!
prev parent reply other threads:[~2005-07-28 19:28 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-27 16:36 SSH Brute Force not working (any longer) curby .
2005-07-27 18:31 ` Nagy Zoltan
2005-07-27 19:14 ` Marius Mertens
2005-07-27 21:55 ` Marius Mertens
2005-07-27 22:50 ` curby .
2005-07-27 23:33 ` Marius Mertens
2005-07-28 19:28 ` Taylor, Grant [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=42E931D4.8000508@riverviewtech.net \
--to=gtaylor@riverviewtech.net \
--cc=netfilter@lists.netfilter.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox