I am currently running a number of small sites using logging via email
to notify me of 404s and server errors. The volume of email produced
is perfectly manageable due to the low level of traffic.
It does occur to me that it would be very easy to disrupt the site by
simply sending repeated requests which trigger a 404 Not Found. I'm
sure 10 404s a second would completely shutdown the process to normal
requests due to the time taken to send the log emails. I'm not using a
message queueing system.
I would like to keep the option of receiving logging emails. Is there
anything I can do to throttle or limit the email sending without
writing my own logging handler?
Any thoughts would be much appreciated.
Many thanks,
Sam Berry
_Nik
First off, I'd point out that the 404 emails aren't sent every time
your server generates a 404 -- they're only generated as a result of a
404 *from an internal link on your site*. If John Q Hacker hits
http://yoursite.com/this_page_doesnt_exist, you won't get a 404 email.
If you're getting *any* 404 emails, it means there are internal links
on your site that don't resolve. If this is something that is
happening systematically, at a rate that has given you cause for
concern about the potential for DOS, I'd suggest you have a bigger
problem with your site.
> It does occur to me that it would be very easy to disrupt the site by
> simply sending repeated requests which trigger a 404 Not Found. I'm
> sure 10 404s a second would completely shutdown the process to normal
> requests due to the time taken to send the log emails. I'm not using a
> message queueing system.
>
> I would like to keep the option of receiving logging emails. Is there
> anything I can do to throttle or limit the email sending without
> writing my own logging handler?
Interestingly, 404 emails aren't handled by a logging handler (unlike
500 messages) -- they're handled as a direct mail to site managers.
This is something that is probably worth a ticket in itself; using the
logging framework for 404 mails would allow for much more flexibility.
So - what you want here isn't a custom logging handler, but a custom
*mail* handler -- django-mailer [1] is a good candidate here. This
makes "sending" an email a very short lived operation from the
perspective of your web server -- all the web request does is queue
the email for sending. The actual sending of mail is handled out of
the request-response cycle. This removes the possibility of "DOS
attack by 404" because the expensive operation is taken out of the
request-response cycle.
Of course, you could still end up being flooded with email -- so you
either need to (a) monitor the size of your mail queue to make sure it
isn't getting flooded, or (b) put a processor in place to
merge/throttle the contents of the mail queue. This could also be
handled with a custom mail handler; however, I can't point you at a
ready-to-use candidate for this.
Another option is to use a mechanism other than the 404 emails to log
and handle errors. Django-sentry [2] and Arecibo [3] are two
candidates here, both of which are easy to install, and provide much
richer analytics than a full mailbox :-)
[1] https://github.com/jtauber/django-mailer/
[2] https://github.com/dcramer/django-sentry/
[3] http://areciboapp.com/
Yours,
Russ Magee %-)
On Thu, Dec 8, 2011 at 8:42 PM, Sam Berry <samk...@googlemail.com> wrote:Hello there,I am currently running a number of small sites using logging via emailto notify me of 404s and server errors. The volume of email producedis perfectly manageable due to the low level of traffic.First off, I'd point out that the 404 emails aren't sent every timeyour server generates a 404 -- they're only generated as a result of a404 *from an internal link on your site*. If John Q Hacker hitshttp://yoursite.com/this_page_doesnt_exist, you won't get a 404 email.
If you're getting *any* 404 emails, it means there are internal linkson your site that don't resolve. If this is something that ishappening systematically, at a rate that has given you cause forconcern about the potential for DOS, I'd suggest you have a biggerproblem with your site.It does occur to me that it would be very easy to disrupt the site bysimply sending repeated requests which trigger a 404 Not Found. I'msure 10 404s a second would completely shutdown the process to normalrequests due to the time taken to send the log emails. I'm not using amessage queueing system.I would like to keep the option of receiving logging emails. Is thereanything I can do to throttle or limit the email sending withoutwriting my own logging handler?Interestingly, 404 emails aren't handled by a logging handler (unlike500 messages) -- they're handled as a direct mail to site managers.This is something that is probably worth a ticket in itself; using thelogging framework for 404 mails would allow for much more flexibility.
So - what you want here isn't a custom logging handler, but a custom*mail* handler -- django-mailer [1] is a good candidate here. Thismakes "sending" an email a very short lived operation from theperspective of your web server -- all the web request does is queuethe email for sending. The actual sending of mail is handled out ofthe request-response cycle. This removes the possibility of "DOSattack by 404" because the expensive operation is taken out of therequest-response cycle.
Of course, you could still end up being flooded with email -- so youeither need to (a) monitor the size of your mail queue to make sure itisn't getting flooded, or (b) put a processor in place tomerge/throttle the contents of the mail queue. This could also behandled with a custom mail handler; however, I can't point you at aready-to-use candidate for this.Another option is to use a mechanism other than the 404 emails to logand handle errors. Django-sentry [2] and Arecibo [3] are twocandidates here, both of which are easy to install, and provide muchricher analytics than a full mailbox :-)
Yours,Russ Magee %-)
--You received this message because you are subscribed to the Google Groups "Django users" group.To post to this group, send email to django...@googlegroups.com.To unsubscribe from this group, send email to django-users...@googlegroups.com.For more options, visit this group at http://groups.google.com/group/django-users?hl=en.