<please ignore this comment, I'm completely wrong. see the next comment.>
<please ignore this comment, I'm completely wrong. see the next comment.>
You have OpenBSD firewalls... have you checked out OpenBSD SynProxy? I haven't used it, but it was designed for just your case.
In such an event all of the bots on the botnet have valid IPs and are representing themselves correctly, it's just that they're not behaving as they should with regard to the TCP handshake cycle.
So i gather that your suggestion would cut down on ip spoofing syn floods (but maybe not, i don't really know the full story :) ), but that wouldn't stop botnets.
tracking down the network a spoofed packet came from can be quite a bit more difficult; If you have access to all your routers, you can track it to the peer or upstream the traffic is coming from, but it might be a peer of a peer of a peer (or a customer of a customer of an upstream of an upstream) requiring quite a lot of cooperation to track down.
If invalid ones were dropped, then you can at most spoof another address in the same network. But either way, it can be traced back to the correct edge router.
I'm looking for someone experienced in these matters to explain why this theory isn't / can't be put into practice.
It's really pretty easy to do... especially just edge level like you are talking about. The problem is that it costs me some time/money (even if it's only a little) to do it, and it mostly benefits other people. So some ISPs still don't do it.
http://www.faqs.org/rfcs/bcp/bcp38.html
but it's really easy. on my router I look at all outgoing packets, and I ask "Does this IP have a source address that is reasonable? (one of my IPs, or an IP of someone for whom I am carrying traffic.)" If my router sees a outgoing packet with a source address not associated with me, it's obviously spoofed, so it drops the packet. If everyone did this, spoofing would only be possible within your own network.
Every time an ISP does this, the world becomes a little better for all of us. But spoofing will still be a problem until all ISPs do this, and that probably won't happen for a while.
(you also do this to incoming packets, if it is an incoming packet coming in from the internet and it has a source of one of my IP addresses, something has obviously gone horribly wrong. drop the packet. but this only protects you from the most obvious spoofs. It is very important if you do IP based security.)
EDIT: The way I put it may be a bit extreme, but the idea is there.
The big problem with your proposal is verification. It seems... difficult to verify that another network properly implemented BCP38 without actually putting a probe on that network.
the wikipedia explains it well, I think:
edit: Looks like the OP managed a better explanation than I could since I loaded the page. Please disregard.
* Determine which upstream provider it's coming from
* Contact that provider, and ask them to investigate
* They do the same thing
* If a provider finds out the source is local, then they block it / contact the person(s) responsible etc
Of course it gets harder if it's a botnet or some other system that is distributed over a large number of sources.either that, or somebody at one of the bandwidth providers got really <i>really</i> pissed off at you...if the later is the case the guy (or girl...they can be vindictive as hell) has probably already been fired since, you know, they sortof monitor these sorts of things.
they tend to be very cost conscious, and far more likely to use a NIX box to do this sort of thing. ISPs are generally competing in a comparatively low-margin market. Usually it's the large corporations with less NIX knowledge (and someone else's money to spend) where I see the really high end firewall/proxy/load balancer gear.
http://www.openbsd.org/faq/pf/filter.html#synproxy
and urpf
http://www.openbsd.org/faq/pf/filter.html#urpf
which sounds a lot like the features you describe.
This is really not a problem you can solve down at the firewall-before-webserver level.
Implement iACLs, uRPF, and S/RTBH at your edges, and work with your SP on a reaponse plan.
And take your server out from behind the firewall. Stateful inspection makes no sense at all on a front-end server, where every connection is by definition unsolicited. Harden the OS, harden the apps/services, run a chrooted jail, use tcpwrappers and mod_security and mod_evasive, and use stateless ACLs in an ASIC-based router to enforce access policies.
By placing the server behind the firewall, you increase its vulnerability due to the potential for exhaustion of the connection table by an attacker. You can use firewalls between the tiers of a multi-tier setup, where you can control the number and types of inbound connections on a bidirectional basis, but no one who operates high-volume publicly-accessible servers puts the the front-end behind a firewall, because it does nothing to increase the security posture, and can actually be harmful.