SynFuck

SynFuck is a bash script for log and block SYN flood attacks.
It must be added to cron executed every minute, I tested it on Solaris but it could work with minor modifications on all *nix.
Script source.
#!/bin/bash

# In this function you can block the hostile ip 
blocca () {
	echo ${quantita} \>= ${limite} ${tcpaddres} ${data} >> /var/log/syncheck.log

# This is a sample firewall block ip command
#	ipfilter bla bla bla ${tcpaddres}

}

# This is for locale, if you want you can comment them
export LANG=it_IT
export LC_ALL=it_IT
export LC_COLLATE=it.UTF-8
export LC_CTYPE=it.UTF-8
export LC_MESSAGES=it.UTF-8
export LC_NUMERIC=it.UTF-8

# Max numbers of SYN_RCVD for ip adrress, change it for your need 
limite=20

temp=x
stampa=false
data=$( date )

for tcpaddres in $( /usr/bin/netstat -an -f inet | /usr/bin/grep SYN_RCVD | /usr/bin/awk '{print $2}' | /usr/bin/sed s/.[0-9]*$// | /usr/bin/sort)
do
	if [ ${tcpaddres} = ${temp} ]
	then
		quantita=$( /usr/bin/expr ${quantita} + 1 )
	else
		if [ ${temp} != "x" ]
		then
			if [ ${stampa} = "true" ]
			then
				blocca
			fi
		fi
	quantita=1
	stampa=false
	fi
	if [ ${quantita} -eq ${limite} ]
	then
		stampa=true
	fi
	temp=${tcpaddres}
done

if [ ${stampa} = "true" ]
then
	blocca
fi

# Copyright Alberto Panu 2007 www.panu.it
# Distribuito sotto licenza GPL http://www.gnu.org/licenses/gpl-3.0.txt
		
		
Sample log:
25 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 03:38:00 CEST
22 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 03:39:01 CEST
23 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 03:40:00 CEST
20 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:05:00 CEST
20 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:07:01 CEST
23 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:14:01 CEST
21 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:29:01 CEST
26 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:30:01 CEST
22 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:31:01 CEST
20 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:32:01 CEST
20 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:42:01 CEST
21 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:44:01 CEST
22 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:46:01 CEST
27 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:48:01 CEST
26 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:50:01 CEST
22 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:52:00 CEST
20 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:54:01 CEST
20 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:55:01 CEST
20 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:56:00 CEST
21 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:58:01 CEST
23 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 04:59:01 CEST
23 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 05:00:01 CEST
24 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 05:03:02 CEST
22 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 05:04:00 CEST
23 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 05:05:01 CEST
20 >= 20 222.255.20.194 mercoledý, 1 agosto 2007, 05:07:01 CEST
82 >= 20 87.2.182.118 mercoledý, 1 agosto 2007, 11:27:00 CEST
124 >= 20 87.2.182.118 mercoledý, 1 agosto 2007, 11:28:01 CEST
196 >= 20 87.2.182.118 mercoledý, 1 agosto 2007, 11:29:00 CEST
193 >= 20 87.2.182.118 mercoledý, 1 agosto 2007, 11:30:01 CEST
182 >= 20 87.2.182.118 mercoledý, 1 agosto 2007, 11:31:01 CEST
114 >= 20 87.2.182.118 mercoledý, 1 agosto 2007, 11:32:00 CEST
66 >= 20 87.2.182.118 mercoledý, 1 agosto 2007, 11:33:00 CEST

                


THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR PURPOSE.