| Captures and holds incoming TCP connections using no local |
| per-connection resources. Connections are accepted, but immediately |
| switched to the persist state (0 byte window), in which the remote |
| side stops sending data and asks to continue every 60-240 seconds. |
| Attempts to close the connection are ignored, forcing the remote side |
| to time out the connection in 12-24 minutes. |
| |
| This offers similar functionality to LaBrea |
| <http://www.hackbusters.net/LaBrea/> but doesn't require dedicated |
| hardware or IPs. Any TCP port that you would normally DROP or REJECT |
| can instead become a tarpit. |
| |
| To tarpit connections to TCP port 80 destined for the current machine: |
| .IP |
| iptables -A INPUT -p tcp -m tcp --dport 80 -j TARPIT |
| .P |
| To significantly slow down Code Red/Nimda-style scans of unused address |
| space, forward unused ip addresses to a Linux box not acting as a router |
| (e.g. "ip route 10.0.0.0 255.0.0.0 ip.of.linux.box" on a Cisco), enable IP |
| forwarding on the Linux box, and add: |
| .IP |
| iptables -A FORWARD -p tcp -j TARPIT |
| .IP |
| iptables -A FORWARD -j DROP |
| .TP |
| NOTE: |
| If you use the conntrack module while you are using TARPIT, you should |
| also use the NOTRACK target, or the kernel will unnecessarily allocate |
| resources for each TARPITted connection. To TARPIT incoming |
| connections to the standard IRC port while using conntrack, you could: |
| .IP |
| iptables -t raw -A PREROUTING -p tcp --dport 6667 -j NOTRACK |
| .IP |
| iptables -A INPUT -p tcp --dport 6667 -j TARPIT |