|
Search Forums:
|
|||||||
| Forums | Register | Forum Rules | Linux and Unix Links | Man Pages | Albums | FAQ | Users | Calendar | Search | Today's Posts | Mark Forums Read |
| Security Discuss UNIX and Linux computer and network security, cyber security, cyber attacks, IT security, and more. |
|
|
|
Thread Tools | Search this Thread | Display Modes |
|
#1
|
||||
|
||||
|
[Linux] Blocking Your w00tw00ts with iptables
I noticed a few w00tw00ts in our Apache2 logfile the other day, so I thought I would write a quick post on blocking them with iptables. Feel free to improve upon any of my scripts or ideas in this thread. First of all, what is a w00tw00t and where might we find one? Well, a w00tw00t is an signature left by a web vulnerability scanner called DFind that has the signature below and you can find them in your Apache logfiles, for example: Code:
neo@forum:# grep "GET /w00tw00t.at.ISC.SANS.DFind:)" /website/logs/apache2/access.log 88.80.222.117 - - [25/Nov/2009:08:38:36 +0000] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 226 "-" "-" If you are like me, you would simply like to block IP addresses of people with nothing better to do than probe your web server (commonly called "losers"), so here goes: First, you can download a list of know w00tw00t'ers using wget here, like so: Code:
wget http://www.novirusthanks.org/dfind-logs/ip-list;mv ip-list w00tw00t_list Then, it might be a good idea to scan your logs like I did above and append any w00tw00ts you see to that list: Code:
grep w00tw00t /website/logs/apache2/access.log | awk 'BEGIN { FS = " " } ; { print $1 }' >> w00tw00t_listYou might have more than one w00tw00t IP address in your list now, so you might want to use awk to dedupe your w00tw00t_list: Code:
awk '{
if ($0 in stored_lines)
x=1
else
print
stored_lines[$0]=1
}' w00tw00t_list > w00t_newThen move it back of course: Code:
mv w00t_new w00tw00t_list Now, with a nice w00tw00t_list in your directory, you can do something like: Code:
while read ip do iptables -A INPUT -s "$ip"/24 -j DROP done < w00tw00t_list I am pretty strict, and tend to block entire networks when we are probed, hence the /24 at the end of the IP address. You might want to be nicer than me and just block the IP .... Code:
while read ip do iptables -A INPUT -s "$ip" -j DROP done < w00tw00t_list And you can check your iptables blocklist with: Code:
iptables -L -n However, before running your iptables script, make sure your IP address is not accidentally in the w00tw00t list :-) Anyone care to combine all this into one great script? If so, please post back! Happy w00tw00t blocking! Last edited by Neo; 12-02-2009 at 07:48 AM.. Reason: updated grep |
| Sponsored Links | |
|
|
|
#2
|
|||
|
|||
|
It was such an inviting possibility for some evening fun so let's have a crack at it! (NOT tested) Code:
#/bin/sh #good (?) working dir cd /tmp #Get a fresh list? do rm w00tw00t_list first #I lynx... [ -r w00tw00t_list ] || lynx -dump http://www.novirusthanks.org/dfind-logs/ip-list > w00tw00t_list #append unique entries from weblog grep w00tw00t /website/logs/apache2/access.log | cut -d" " -f1 |sort -u >> w00tw00t_list #apply ip rules while read ip; do iptables -A INPUT -s "$ip"/24 -j DROP; done < w00tw00t_list #List resulting block list iptables -L -n Best regards, Lakris |
| Sponsored Links | ||
|
|
|
#3
|
|||
|
|||
|
Nice write-up but it's a non-standard and maintenance-prone "solution". Maybe people not like you (;-p) should choose a combination of iptables rate limiting, webserver "BrowserMatch" and mod_security filtering instead?..
|
|
#4
|
||||
|
||||
|
Quote:
PS (Edit): mod_security can be a very big performance killer on a very busy web server.... intercepting every URL and trying to match each one against a long list of rules can kill performance. ---------- Post updated at 23:23 ---------- Previous update was at 23:00 ---------- Quote:
|
| Sponsored Links | |
|
|
#5
|
|||
|
|||
|
Those disappointed by the lack of details handouts sure could call it RTF(ine)M or accuse me of handwaving, NP, but anyone with basic GNU/Linux admin skills (as in knowing how to read the documentation) should be able to cobble up the parts themselves. Quote:
BTW, about the script, having a separate chain instead of putting everything in INPUT allows you to route traffic in a more fine-grained way. The script then essentially could be compressed to a oneliner something like: Code:
iptables -F BLOCKCHAIN || iptables -N BLOCKCHAIN; ( curl -s http://www.novirusthanks.org/dfind-logs/ip-list | grep -v '#"; awk '/w00tw00t/ {print $2}' /var/log/httpd/*access* ) | sort -u | xargs -iX iptables -A BLOCKCHAIN -s 'X' -j DROPTop of my head though, untested, so YMMV(VM). |
| Sponsored Links | |
|
|
#6
|
||||
|
||||
|
Our experience is everything contributes to performance and applying something to the front end of the web server will definitely effect performance.
When you discount performance off-hand, I can only assume you do not operate a web server with thousands of concurrent users and millions of PVs a month. Everything effects performance. Everything. Web operators talk performance. It is one of our favorite topics! I think you may be arguing for the sake of argument. Just a simple Google search yields the article, 4 reasons not to use mod_security, concluding, Quote:
Computing is all about performance optimization. Having said that, we are considering mod_security for emergencies and temporary stop gaps until we can put a better performing solution in place in certain scenarios. It is certainly possible the performance hit will be small; but from what I have read about mod_security, and experiences here, it will certainly have an impact on performance. ---------- Post updated at 21:04 ---------- Previous update was at 20:56 ---------- Speaking of mod_security performance quotes, I think this quote from Securing Apache Web Server with mod_security in the Linux Gazette sums it up nicely: Quote:
---------- Post updated at 21:16 ---------- Previous update was at 21:04 ---------- I like parts of this quote from Basics of mod_security: Quote:
Regarding the second statement, that is really relative to overall performance of the server. It is very easy for big servers will smallish loads to say "security over performance". Editorial Comments: If security was always preferable to performance, then F1 race cars would be built with heavier material There is no shortage of self-proclaimed security experts in the world who ignore performance, in my experience in IT security most of my career. |
| Sponsored Links | |
|
|
#7
|
||||
|
||||
|
To Followup....... When you are searching your logfiles for w00tw00ts, be careful not to mistakenly identify legitimate requests from friendly hosts, for example, requests for posts with w00tw00t in the URL who might be reading a post you have on the topic ![]() I updated my example to reflect this: Code:
grep "GET /w00tw00t.at.ISC.SANS.DFind:)" /website/logs/apache2/access.log |
| Sponsored Links | ||
|
|
![]() |
| Tags |
| awk, cut, grep, iptables, lynx, sort, w00tw00t, w00tw00t.at.isc.sans.dfind, wget |
| Thread Tools | Search this Thread |
| Display Modes | |
More UNIX and Linux Forum Topics You Might Find Helpful
|
||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| URL blocking with iptables | shrinuvas | Debian | 1 | 03-06-2009 02:58 AM |
| Linux BSD sockets blocking issue | johnmb | Programming | 3 | 08-06-2008 08:05 AM |
| Linux IPTABLES help | nogumo | UNIX for Dummies Questions & Answers | 0 | 06-18-2005 07:31 PM |
| LINUX 9 IPTABLES and DNS | frankkahle | Linux | 6 | 03-11-2005 12:23 AM |
| LINUX 9 IPTABLES and DNS | frankkahle | UNIX for Advanced & Expert Users | 1 | 03-03-2005 09:04 AM |
|
|