* Rate-limiting to halt brute-force attack
@ 2012-11-16 14:22 Dimitri Yioulos
2012-11-16 18:01 ` /dev/rob0
2012-11-16 18:50 ` Emilio Lazo Zaia
0 siblings, 2 replies; 5+ messages in thread
From: Dimitri Yioulos @ 2012-11-16 14:22 UTC (permalink / raw)
To: netfilter
Hi, folks.
A few days ago, a major brute-force attack was launched
against our (sendmail) mail server. It looks like a bot is
aiming lots of zombies at us. Here's how OSSEC hids reports
an attempt from one of the zombies:
OSSEC HIDS Notification.
2012 Nov 13 09:08:16
Received From: (plymouth) 192.168.1.2->/var/log/messages
Rule: 40111 fired (level 10) -> "Multiple authentication
failures."
Portion of the log(s):
Nov 13 09:07:44 plymouth ipop3d[29926]: Login failed
user=hod auth=hod host=201-93-132-240.dsl.telesp.net.br
[201.93.132.240]
Nov 13 09:07:44 plymouth ipop3d[29925]: Login failed
user=lee auth=lee host=201-93-132-240.dsl.telesp.net.br
[201.93.132.240]
~
~
To remediate, I've put fail2ban in place on the mail server,
and it's working. However, the attacks are still beating at
the door, and it's significantly increased the load on the
mail server . I'm now thinking of adding rules to our
iptables/Netfilter firewall to rate-limit the brute-force
connections. The rules I'd add are these:
iptables -A INPUT -p tcp --dport 110 -m state --state NEW -m
recent --set
iptables -A INPUT -p tcp --dport 110 -m state --state NEW -m
recent --update --seconds 15 --hitcount 3 -j DROP
As the mail server sits in a DMZ, and packets are forwarded
to it, is the INPUT chain the best place to put these
rules, or should they go in the FORWARD chain (with
appropriate modifications)?
Of course, I don't want to stop legitimate mail. Is this the
best course of action?
Thanks.
Dimitri
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Rate-limiting to halt brute-force attack
2012-11-16 14:22 Rate-limiting to halt brute-force attack Dimitri Yioulos
@ 2012-11-16 18:01 ` /dev/rob0
2012-11-16 18:13 ` Dimitri Yioulos
2012-11-16 18:50 ` Emilio Lazo Zaia
1 sibling, 1 reply; 5+ messages in thread
From: /dev/rob0 @ 2012-11-16 18:01 UTC (permalink / raw)
To: netfilter
On Fri, Nov 16, 2012 at 09:22:35AM -0500, Dimitri Yioulos wrote:
> A few days ago, a major brute-force attack was launched
> against our (sendmail) mail server. It looks like a bot is
> aiming lots of zombies at us. Here's how OSSEC hids reports
> an attempt from one of the zombies:
>
> OSSEC HIDS Notification.
> 2012 Nov 13 09:08:16
>
> Received From: (plymouth) 192.168.1.2->/var/log/messages
> Rule: 40111 fired (level 10) -> "Multiple authentication
> failures."
> Portion of the log(s):
>
> Nov 13 09:07:44 plymouth ipop3d[29926]: Login failed
> user=hod auth=hod host=201-93-132-240.dsl.telesp.net.br
> [201.93.132.240]
This is not Sendmail. This is ipop3d.
> Nov 13 09:07:44 plymouth ipop3d[29925]: Login failed
> user=lee auth=lee host=201-93-132-240.dsl.telesp.net.br
> [201.93.132.240]
Yep, this is a spammer looking for credentials for SMTP AUTH,
probably, so it eventually could be targeted at Sendmail.
> To remediate, I've put fail2ban in place on the mail server,
> and it's working. However, the attacks are still beating at
> the door, and it's significantly increased the load on the
> mail server . I'm now thinking of adding rules to our
> iptables/Netfilter firewall to rate-limit the brute-force
> connections. The rules I'd add are these:
>
> iptables -A INPUT -p tcp --dport 110 -m state --state NEW -m
> recent --set
>
> iptables -A INPUT -p tcp --dport 110 -m state --state NEW -m
> recent --update --seconds 15 --hitcount 3 -j DROP
First, I would not apply this only to POP3 (a protocol which should
have died out 10+ years ago! IMAP can do it all, and better!) I'd
apply this to "-m multiport --dports 110,143,465,587,993,995" to
cover all the potential attacks, omitting any of those that you're
not providing service on.
No, 25 is not in that list. I'm not sure how safely to limit
connections on 25, since MTAs are automated processes. Normal
non-spam MUAs are driven by a human.
Second, I'm not sure that 3 in 15 seconds is safe. MUAs are semi-
automated, and it's possible that a real user could trigger that. I
might try something like 5 in 10 seconds, and a secondary check for
more, maybe 10 in 30 seconds.
> As the mail server sits in a DMZ, and packets are forwarded
> to it, is the INPUT chain the best place to put these
> rules, or should they go in the FORWARD chain (with
> appropriate modifications)?
The mailing list is not a substitute for the man page. Packets which
are forwarded through a host do not hit that host's INPUT chain.
Please do take the time to learn what each built-in chain is for.
> Of course, I don't want to stop legitimate mail. Is this the
> best course of action?
Mail exchange is done with SMTP on the "smtp" port, 25. POP3 is a
protocol for users' access to a mailbox.
http://en.wikipedia.org/wiki/Post_Office_Protocol
--
http://rob0.nodns4.us/ -- system administration and consulting
Offlist GMX mail is seen only if "/dev/rob0" is in the Subject:
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Rate-limiting to halt brute-force attack
2012-11-16 18:01 ` /dev/rob0
@ 2012-11-16 18:13 ` Dimitri Yioulos
2012-11-16 19:18 ` /dev/rob0
0 siblings, 1 reply; 5+ messages in thread
From: Dimitri Yioulos @ 2012-11-16 18:13 UTC (permalink / raw)
To: netfilter
On Friday 16 November 2012 1:01:50 pm /dev/rob0 wrote:
> On Fri, Nov 16, 2012 at 09:22:35AM -0500, Dimitri Yioulos
wrote:
> > A few days ago, a major brute-force attack was
> > launched against our (sendmail) mail server. It looks
> > like a bot is aiming lots of zombies at us. Here's how
> > OSSEC hids reports an attempt from one of the zombies:
> >
> > OSSEC HIDS Notification.
> > 2012 Nov 13 09:08:16
> >
> > Received From: (plymouth)
> > 192.168.1.2->/var/log/messages Rule: 40111 fired (level
> > 10) -> "Multiple authentication failures."
> > Portion of the log(s):
> >
> > Nov 13 09:07:44 plymouth ipop3d[29926]: Login failed
> > user=hod auth=hod host=201-93-132-240.dsl.telesp.net.br
> > [201.93.132.240]
>
> This is not Sendmail. This is ipop3d.
>
> > Nov 13 09:07:44 plymouth ipop3d[29925]: Login failed
> > user=lee auth=lee host=201-93-132-240.dsl.telesp.net.br
> > [201.93.132.240]
>
> Yep, this is a spammer looking for credentials for SMTP
> AUTH, probably, so it eventually could be targeted at
> Sendmail.
>
> > To remediate, I've put fail2ban in place on the mail
> > server, and it's working. However, the attacks are
> > still beating at the door, and it's significantly
> > increased the load on the mail server . I'm now
> > thinking of adding rules to our iptables/Netfilter
> > firewall to rate-limit the brute-force connections. The
> > rules I'd add are these:
> >
> > iptables -A INPUT -p tcp --dport 110 -m state --state
> > NEW -m recent --set
> >
> > iptables -A INPUT -p tcp --dport 110 -m state --state
> > NEW -m recent --update --seconds 15 --hitcount 3 -j
> > DROP
>
> First, I would not apply this only to POP3 (a protocol
> which should have died out 10+ years ago! IMAP can do it
> all, and better!) I'd apply this to "-m multiport
> --dports 110,143,465,587,993,995" to cover all the
> potential attacks, omitting any of those that you're not
> providing service on.
>
> No, 25 is not in that list. I'm not sure how safely to
> limit connections on 25, since MTAs are automated
> processes. Normal non-spam MUAs are driven by a human.
>
> Second, I'm not sure that 3 in 15 seconds is safe. MUAs
> are semi- automated, and it's possible that a real user
> could trigger that. I might try something like 5 in 10
> seconds, and a secondary check for more, maybe 10 in 30
> seconds.
>
> > As the mail server sits in a DMZ, and packets are
> > forwarded to it, is the INPUT chain the best place to
> > put these rules, or should they go in the FORWARD chain
> > (with appropriate modifications)?
>
> The mailing list is not a substitute for the man page.
> Packets which are forwarded through a host do not hit
> that host's INPUT chain. Please do take the time to learn
> what each built-in chain is for.
>
> > Of course, I don't want to stop legitimate mail. Is
> > this the best course of action?
>
> Mail exchange is done with SMTP on the "smtp" port, 25.
> POP3 is a protocol for users' access to a mailbox.
>
> http://en.wikipedia.org/wiki/Post_Office_Protocol
> --
> http://rob0.nodns4.us/ -- system administration and
> consulting Offlist GMX mail is seen only if "/dev/rob0"
> is in the Subject: --
> To unsubscribe from this list: send the line "unsubscribe
> netfilter" in the body of a message to
> majordomo@vger.kernel.org More majordomo info at
> http://vger.kernel.org/majordomo-info.html
Thanks very much. Very helpful information. And, apologies
for not using the man page. I wasn't trying to be lazy.
Dimitri
--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Rate-limiting to halt brute-force attack
2012-11-16 14:22 Rate-limiting to halt brute-force attack Dimitri Yioulos
2012-11-16 18:01 ` /dev/rob0
@ 2012-11-16 18:50 ` Emilio Lazo Zaia
1 sibling, 0 replies; 5+ messages in thread
From: Emilio Lazo Zaia @ 2012-11-16 18:50 UTC (permalink / raw)
To: Dimitri Yioulos; +Cc: netfilter
In order to block 3 SSH attempts in 40 seconds, I'm doing the following:
First, this will syslog all silently dropped SSH attempts (after third
in 40 seconds):
# iptables -A LOG-BlockdSSH -m recent --rcheck --seconds 40 --hitcount 3
--name BlockdSSH --rsource -j LOG --log-prefix "iptables/BlockdSSH: "
--log-tcp-options --log-ip-options
But LOG chain passes the packet to the following rule, so we must drop it:
# iptables -A LOG-BlockdSSH -m recent --rcheck --seconds 40 --hitcount 3
--name BlockdSSH --rsource -j DROP
This registers the IP address in a set of recent module:
# iptables -A BlockdSSH -m recent --set --name BlockdSSH --rsource -j DROP
Any new SSH attempt from that IP address will reset the counter to 10
days (--update), and also log that packet:
# iptables -A NoJodan -p tcp -m tcp --dport 22 -m recent --update
--seconds 864000 --name BlockdSSH --rsource -j LOG-BlockdSSH
This creates the set "SSH" containing all SSH connections, regardless
they are "good" or not:
# iptables -A NoJodan -p tcp -m tcp --dport 22 -m recent --set --name
SSH --rsource
If the limit is reached, this rule chains to BlockdSSH; that will LOG
and block any connection from that IP address:
# iptables -A NoJodan -p tcp -m tcp --dport 22 -m recent --update
--seconds 40 --hitcount 3 --name SSH --rsource -j BlockdSSH
You must create these chains and make all new packets enters into
NoJodan chain.
For example, the first SSH packet will not match first rule of NoJodan
because the recent extension hasn't that IP address in the BlockdSSH
set, so the packet will continue and will not be diverted to
LOG-BlockdSSH. Second rule will match and the IP address is registered
in SSH set in recent. Third rule will not match because is the first
packet and not the third in 40 sec.
Second packet (seconds later) also will not match first NoJodan rule,
will be registered in the SSH set, and also third rule does not affect him.
Third packet will not match first rule because it isn't registered in
BlockdSSH. This packet will match the second rule but also the third
rule in which the limit is 3/40sec. That packet will go to iptables
BlockdSSH chain. In this chain, that will be registered in the set named
"BlockdSSH" because it reached the limit (I did choose the same name as
the iptables chain: BlockdSSH), so now this IP address is the the black
list and the packet is dropped.
Fourth packet will match the first rule in NoJodan, because this IP
address was registered in the BlockdSSH set (black list set) in recent
and will be forwarded to LOG-BlockdSSH chain. In this chain the packet
is being logged and dropped (first and second rule).
They must wait 10 days or change their IP address to have a respond from
SSH server.
I don't know why I'm doing that BlockdSSH chain will target to DROP
instead of LOG-BlockdSSH. Surely these rules may be improved.
You may adapt this idea to your ports and times. Also this may be used
to block port scanning (modifying LOG chain to not log every packet),
ping flood, etc.
Regards.
On 16.11.2012 09:52, Dimitri Yioulos wrote:
> Hi, folks.
>
> A few days ago, a major brute-force attack was launched
> against our (sendmail) mail server. It looks like a bot is
> aiming lots of zombies at us. Here's how OSSEC hids reports
> an attempt from one of the zombies:
>
> OSSEC HIDS Notification.
> 2012 Nov 13 09:08:16
>
> Received From: (plymouth) 192.168.1.2->/var/log/messages
> Rule: 40111 fired (level 10) -> "Multiple authentication
> failures."
> Portion of the log(s):
>
> Nov 13 09:07:44 plymouth ipop3d[29926]: Login failed
> user=hod auth=hod host=201-93-132-240.dsl.telesp.net.br
> [201.93.132.240]
> Nov 13 09:07:44 plymouth ipop3d[29925]: Login failed
> user=lee auth=lee host=201-93-132-240.dsl.telesp.net.br
> [201.93.132.240]
> ~
> ~
>
> To remediate, I've put fail2ban in place on the mail server,
> and it's working. However, the attacks are still beating at
> the door, and it's significantly increased the load on the
> mail server . I'm now thinking of adding rules to our
> iptables/Netfilter firewall to rate-limit the brute-force
> connections. The rules I'd add are these:
>
> iptables -A INPUT -p tcp --dport 110 -m state --state NEW -m
> recent --set
>
> iptables -A INPUT -p tcp --dport 110 -m state --state NEW -m
> recent --update --seconds 15 --hitcount 3 -j DROP
>
> As the mail server sits in a DMZ, and packets are forwarded
> to it, is the INPUT chain the best place to put these
> rules, or should they go in the FORWARD chain (with
> appropriate modifications)?
>
> Of course, I don't want to stop legitimate mail. Is this the
> best course of action?
>
> Thanks.
>
> Dimitri
>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Rate-limiting to halt brute-force attack
2012-11-16 18:13 ` Dimitri Yioulos
@ 2012-11-16 19:18 ` /dev/rob0
0 siblings, 0 replies; 5+ messages in thread
From: /dev/rob0 @ 2012-11-16 19:18 UTC (permalink / raw)
To: netfilter
On Fri, Nov 16, 2012 at 01:13:23PM -0500, Dimitri Yioulos wrote:
[snip]
> Thanks very much. Very helpful information. And, apologies
> for not using the man page. I wasn't trying to be lazy.
No problem, you're welcome. I will be interested to hear your
results, such as if you accidentally block any of your users.
--
http://rob0.nodns4.us/ -- system administration and consulting
Offlist GMX mail is seen only if "/dev/rob0" is in the Subject:
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-11-16 19:18 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-11-16 14:22 Rate-limiting to halt brute-force attack Dimitri Yioulos
2012-11-16 18:01 ` /dev/rob0
2012-11-16 18:13 ` Dimitri Yioulos
2012-11-16 19:18 ` /dev/rob0
2012-11-16 18:50 ` Emilio Lazo Zaia
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).