Feliz día de… ¡Debian Lenny!

word-hearts

¡Feliz día de Debian Lenny!

Hoy es el día 1234567890 en tiempo UNIX (un momento único) y es el momento escogido por la gente de Debian para la publicación de la nueva versión estable de la distro linux con más peso. Debian/GNU 5.0 Lenny ya es la nueva estable oficialmente, tal y como estaba previsto.

La nueva testing se llamará Squeeze.

Los compañeros mandriveros tienen buenas noticias también, ya que acaban de liberar la beta de Mandriva Linux 2009 Spring.

Fuente: elreplicante.es

10 herramientas básicas para un administrador de sistemas

 

Trabajar administrando sistemas implica realizar muchos trabajos repetitivos. Como los grandes vagos, tendemos a evitar trabajos repetitivos a toda costa, otros grandes vagos han desarrollado herramientas que nos ayudan a automatizar tareas, ahorrar trabajo, ser más eficientes y sobre todo más felices. Listo aqui mis diez favoritas, las indispensables. Todas ellas corren bajo Linux/Gnome y todas son software libre.

Gnome Terminal: mi principal herramienta de trabajo. Normalmente tengo abierta una ventana de gnome-terminal con 12 pestañas ejecutando Top en los servidores de producción y otra ventana con entre cuatro y ocho pestañas donde lanzo comandos a las distintas máquinas.

Keychain: Un front-end de ssh-add que funciona entre distintas sesiones de bash. Type passphrase once, ssh anywhere.

SSHMenu: Un gestor de sesiones ssh que permite definir grupos de máquinas y abrir multiples ventanas/pestañas de gnome-terminal con un ssh a cada máquina del grupo. Cuando tienes que abrir 10 ssh a 10 maquinas distintas todos los días, ahorras horas de tecleo al año.

Revelation: un estupendo gestor de contraseñas, algo indispensable para evitar de acordarte de las 50 contraseñas (o más) que sueles manejar. Revelation almacena las contraseñas cifradas en un fichero local y tiene un applet para el panel de Gnome muy cómodo donde localizar rapidamente cualquier contraseña.

Capistrano: la mejor herramienta para ejecutar comandos en multiples máquinas remotas de una vez, he programado un mini-wrapper para ejecutar comandos en multiples máquinas y otro como front-end de apt. Viene de la gente de Rails así que solo podeis esperar love and fun.

Emacs (con sus correspondientes extras), un clásico entre los clásicos.

Xargs, herramienta para vagos crónicos que ‘aplana’ una columna que reciba por stdin, de esta manera podemos matar todos los procesos digamos lighttp con una sola orden:

ps aux | grep lighttpd | awk '{print $1}' | xargs kill 

Actualización: como apuntan en un comentario en meneame, esto no tiene mucho sentido. Pero por ejemplo si solo quiero matar los lighttpd que sirven contenido estático y que tienen su fichero de configuración particular:

ps aux | grep lighttpd.static | awk ‘{print $1}’ | xargs sudo kill

Más usos de xargs.

Lenguajes de script como Bash Script y Ruby para automatizar automatizar automatizar.

Herramientas de lineas de comando como: Grep, Find o Top. Tienen su curva de aprendizaje, pero cuanto más las usas más te gustan, no sabría vivir sin ellas.

Y para finalizar, la herramienta definitiva que hace que mis mañanas en la ruby room sean aun más divertidas: Rhythmbox, uno de los mejores reproductores de audio para Gnome.

¿Cuales son tus herramientas de administración favoritas?

Fuente: robot plays guitar

Colaborar con el Software Libre

He decidido redactar esta entrada por el hecho de que mucha gente cree que sólo se puede ayudar al Software Libre instalando GNU/Linux en su PC, pero no es así.Hay personas que, por unas razones u otras – cada vez menos -, no pueden migrar a un Sistema Operativo libre como es GNU/Linux; un ejemplo muy popular y extendido es la del ‘gamer’, que tiene el PC 8 horas encendido y 7,5 se las pasa jugando; aun así, deberían dar una oportunidad, aunque sea el 0,5 de su tiempo para probarlo.

Aún así, se nos da la posibilidad de particionar nuestro disco duro y tener ambos sistemas operativos conviviendo sin ningún problema, asignándole un espacio equitativo a cada uno. Hace bastante tiempo que ya se resolvieron aquellos problemas en los que instalar GNU/Linux y particionar hacían falta tener conocimientos técnicos; hoy en día, con distribuciones como Ubuntu, que nos ofrecen, a la vez de un Live CD, la posibilidad de instalarlo con una interfaz gráfica agradable mientras se realizan otras tareas.

Pero bueno, no era exactamente el tema a tratar. Si bien migrar a un sistema operativo libre es una de las mejores elecciones que se pueden hacer, si es un impedimento, podemos colaborar de cualquier otra manera:

  • Instalando aplicaciones libres, que, además de ser gratuitas y libres – valga la redundancia -, se pueden obtener mejores resultados que con las que actualmente se están utilizando. Un ejemplo claro es el navegador web Mozilla Firefox, que se puede utilizar tanto en GNU/Linux como en Windows y Mac, o GIMP, un excelente editor de imágenes que no tiene nada que envidiar con Photoshop.
  • Difundiendo el Software Libre entre tu familia y amigos, haciendo que todos vayan de una manera u otra migrando al Software Libre.
  • Asistiendo a jornadas de Software Libre siempre que se pueda, así como ayudar a organizar nuevos eventos.
  • ¿Has pensado en montar un hacklab? Es una muy buena iniciativa que entre tres o cuatro amigos se puede alquilar un local sin problemas.
  • Si te sobran CDs y no sabes qué hacer con ellos, graba unos cuántos con alguna distribución fácil de manejar – como es Ubuntu – y distribúyelos entre tus conocidos.
  • ¡Dale una oportunidad a GNU/Linux! Si no te atreves a instalar por miedo, yo te puedo ayudar, pero si aún así no te atreves, prueba un Live CD (Ubuntu ya lo tiene). Ésto cargará el sistema en la memoria RAM sin tocar tu disco duro; así, cuando apagues tu PC, no habrás notado nada. Eso sí, se obtiene mucho mejor rendimiento instalado que desde el CD.
  • Reportar erorres (bugs) o hacer sugerencias sobre la aplicación que estás utilizando en su respectivo lugar. Estarás ayudando a toda la comunidad.
  • Además, si eres programador, con el anterior punto puedes hacer tus parches, agregar funcionalidades y presentarlas a la comunidad.
  • ¡Traduce programas! Probablemente si sabes inglés medio vas a poder traducir en cualquier lugar, hasta en la mismísima GNU. Sólo tienes que ponerte y ser un poco responsable; además, yo mismo te puedo asegurar que tendrás una buena satisfacción al hacerlo. [Gracias por recordármelo en los comentarios ;) ]
  • Pásate por foros, IRC o distintos medios para echar una mano a los más necesitados que acaban de iniciarse – o no -. Tú también podrás plantear tus dudas y serás respondido del mismo modo que tú lo hiciste.
  • Escribe tutoriales que creas que son útiles para la humanidad, para procesos generalmente algo complejos.
  • Puedes dedicarte al ‘artwork’, es decir, entrar en un equipo de diseño y empezar a hacer diseños para programas, o iconos, etc. Un buen ejemplo es hacer un grupo de iconos para KDE y colgarlo de KDE-Look.org.

Beneficios que te puede reportar:

  • Realmente te vas a sentir libre, es una sensación indescriptible. Cuando pasas de un sistema operativo propietario – en el que, probablemente, no hayas pagado la licencia por su uso – en el que estás encadenado a todas sus aplicaciones, errores y demás a otro libre, vas a notar la diferencia, vas a ver un mundo abierto lleno de posibilidades. Ésto sería sólo el comienzo de una cultura libre.
  • Te sentirás (y serás) legal, excepto que seas una persona que tengas el suficiente dinero para pagarte licencias de sistema operativo, programas de diseño (2000 EUR), etc. Olvídate de la piratería de software, olvídate de cracks, olvídate de virus, cambia tu forma de trabajar.
  • Obtendrás un mejor rendimiento a la hora de hacer la mayoría de las cosas; no te creas eso de ’si es gratis no es bueno’.
  • A medida que vayas utilizando más aplicaciones libres, a la hora de que te pases a un sistema operativo libre como Linux, la migración va a ser mucho más cómoda y fácil, ya que muchas aplicaciones que antes utilizabas las podrás utilizar aquí.
  • Vas a aprender muchísimo por tí mismo, y no precisamente a base de sacos de errores diarios.
  • Y sí, la mayoría de las distribuciones son gratuitas ;)
  • Debes recordar que usar una aplicación libre puede tener menos características que la de un propietario, pero la primera característica supera a todas demás: es libre.

¿Te animas? -)

Fuente: 120% linux

Janus: espionaje masivo de redes inalámbricas

Una pequeña empresa de seguridad ha creado un ordenador portátil capaz de escanear 300 redes inalámbricas a la vez, capturar todo su tráfico y descifrar una gran parte.

Janus ejecuta Ubuntu y dispone de ocho tarjetas inalámbricas, así como de dos amplificadores de 1 W y puertos para antenas externas. Todo el tráfico capturado se almacena en un disco duro de 20 Gb para ser posteriormente procesado. Como medida de precaución se cifra con AES 256 el contenido de la memoria y el disco, y el aparato dispone de un botón de apagado instantáneo, que evita que los datos puedan ser accedidos, a no ser que se cuente con la correspondiente llave USB, que almacena una clave de acceso de 2000 bit protegida además por contraseña…

Fuente: kriptopolis

Comandos linux de la A a la Z

Aquí paso una lista de comados linux de la A a la Z 
extraída de  http://www.ss64.com/bash/index.html
alias    Create an alias
awk      Find and Replace text, database sort/validate/index
break    Exit from a loop
builtin  Run a shell builtin

cal      Display a calendar
case     Conditionally perform a command
cat      Display the contents of a file
cd       Change Directory
cfdisk   Partition table manipulator for Linux
chgrp    Change group ownership
chmod    Change access permissions
chown    Change file owner and group
chroot   Run a command with a different root directory
cksum    Print CRC checksum and byte counts
clear    Clear terminal screen
cmp      Compare two files
comm     Compare two sorted files line by line
command  Run a command - ignoring shell functions
continue Resume the next iteration of a loop
cp       Copy one or more files to another location
cron     Daemon to execute scheduled commands
crontab  Schedule a command to run at a later time
csplit   Split a file into context-determined pieces
cut      Divide a file into several parts

date     Display or change the date & time
dc       Desk Calculator
dd       Data Dump - Convert and copy a file
declare  Declare variables and give them attributes
df       Display free disk space
diff     Display the differences between two files
diff3    Show differences among three files
dir      Briefly list directory contents
dircolors Colour setup for `ls'
dirname  Convert a full pathname to just a path
dirs     Display list of remembered directories
du       Estimate file space usage

echo     Display message on screen
ed       A line-oriented text editor (edlin)
egrep    Search file(s) for lines that match an extended expression
eject    Eject CD-ROM
enable   Enable and disable builtin shell commands
env      Display, set, or remove environment variables
eval     Evaluate several commands/arguments
exec     Execute a command
exit     Exit the shell
expand   Convert tabs to spaces
export   Set an environment variable
expr     Evaluate expressions

factor   Print prime factors
false    Do nothing, unsuccessfully
fdformat Low-level format a floppy disk
fdisk    Partition table manipulator for Linux
fgrep    Search file(s) for lines that match a fixed string
find     Search for files that meet a desired criteria
fmt      Reformat paragraph text
fold     Wrap text to fit a specified width.
for      Expand words, and execute commands
format   Format disks or tapes
free     Display memory usage
fsck     Filesystem consistency check and repair.
function Define Function Macros

gawk     Find and Replace text within file(s)
getopts  Parse positional parameters
grep     Search file(s) for lines that match a given pattern
groups   Print group names a user is in
gzip     Compress or decompress named file(s)

hash     Remember the full pathname of a name argument
head     Output the first part of file(s)
history  Command History
hostname Print or set system name

id       Print user and group id's
if       Conditionally perform a command
import   Capture an X server screen and save the image to file
info     Help info
install  Copy files and set attributes

join     Join lines on a common field

kill     Stop a process from running

less     Display output one screen at a time
let      Perform arithmetic on shell variables
ln       Make links between files
local    Create variables
locate   Find files
logname  Print current login name
logout   Exit a login shell
lpc      Line printer control program
lpr      Off line print
lprint   Print a file
lprintd  Abort a print job
lprintq  List the print queue
lprm     Remove jobs from the print queue
ls       List information about file(s)

m4       Macro processor
man      Help manual
mkdir    Create new folder(s)
mkfifo   Make FIFOs (named pipes)
mknod    Make block or character special files
more     Display output one screen at a time
mount    Mount a file system
mtools   Manipulate MS-DOS files
mv       Move or rename files or directories

nice     Set the priority of a command or job
nl       Number lines and write files
nohup    Run a command immune to hangups

passwd   Modify a user password
paste    Merge lines of files
pathchk  Check file name portability
popd     Restore the previous value of the current directory
pr       Convert text files for printing
printcap Printer capability database
printenv Print environment variables
printf   Format and print data
ps       Process status
pushd    Save and then change the current directory
pwd      Print Working Directory

quota    Display disk usage and limits
quotacheck Scan a file system for disk usage
quotactl Set disk quotas

ram      ram disk device
rcp      Copy files between two machines.
read     read a line from standard input
readonly Mark variables/functions as readonly
remsync  Synchronize remote files via email
return   Exit a shell function
rm       Remove files
rmdir    Remove folder(s)
rpm      Remote Package Manager
rsync    Remote file copy (Synchronize file trees)

screen   Terminal window manager
sdiff    Merge two files interactively
sed      Stream Editor
select   Accept keyboard input
seq      Print numeric sequences
set      Manipulate shell variables and functions
shift    Shift positional parameters
shopt    Shell Options
shutdown Shutdown or restart linux
sleep    Delay for a specified time
sort     Sort text files
source   Run commands from a file `.'
split    Split a file into fixed-size pieces
su       Substitute user identity
sum      Print a checksum for a file
symlink  Make a new name for a file
sync     Synchronize data on disk with memory

tac      Concatenate and write files in reverse
tail     Output the last part of files
tar      Tape ARchiver
tee      Redirect output to multiple files
test     Evaluate a conditional expression
time     Measure Program Resource Use
times    User and system times
touch    Change file timestamps
top      List processes running on the system
traceroute Trace Route to Host
trap     Run a command when a signal is set(bourne)
tr       Translate, squeeze, and/or delete characters
true     Do nothing, successfully
tsort    Topological sort
tty      Print filename of terminal on stdin
type     Describe a command

ulimit   Limit user resources
umask    Users file creation mask
umount   Unmount a device
unalias  Remove an alias
uname    Print system information
unexpand Convert spaces to tabs
uniq     Uniquify files
units    Convert units from one scale to another
unset    Remove variable or function names
unshar   Unpack shell archive scripts
until    Execute commands (until error)
useradd  Create new user account
usermod  Modify user account
users    List users currently logged in
uuencode Encode a binary file
uudecode Decode a file created by uuencode

v        Verbosely list directory contents (`ls -l -b')
vdir     Verbosely list directory contents (`ls -l -b')
vi       Text Editor

watch    Execute/display a program periodically
wc       Print byte, word, and line counts
whereis  Report all known instances of a command
which    Locate a program file in the user's path.
while    Execute commands
who      Print all usernames currently logged in
whoami   Print the current user id and name (`id -un')

xargs    Execute utility, passing constructed argument list(s)
yes      Print a string until interrupted

.period  Run commands from a file
###      Comment / Remark

Intentando detener un DDoS

Porque un null-route a una ip no es una solución, es una chapuza.

Si unos script-kiddies están DDoSeando tu web…..

1) Se basa en ataques reales.
2) No hay nada de teoría, solo parte práctica.

A) Detectando el ataque

1) Usando el comando netstat

Código:
netstat -an | grep :80 | sort
Código:
netstat -n -p | grep SYN_REC | awk ‘{print $5}’ | awk -F: ‘{print $1}’
Código:
netstat -n -p|grep SYN_REC | wc -l
Código:
netstat -lpn|grep :80 |awk ‘{print $5}’|sort
Código:
netstat -an | grep :80 | awk ‘{ print $5 }’ | awk -F: ‘{ print $1 }’ | sort | uniq -c | sort -n

Ejemplo de ataque SYN_RECV o SYN Flooding al Apache (puerto 80).

192.168.0.3 es la ip del servidor apache y 192.168.0.105 es la ip del “atacante”.

Código:
tcp 0 0 192.168.0.3:80 192.168.0.5:60808 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60761 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60876 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60946 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60763 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60955 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60765 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60961 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60923 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61336 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61011 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60911 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60758 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60828 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61114 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61074 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60826 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60959 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60900 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60940 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60920 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60825 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60945 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60913 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61009 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60755 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60904 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61583 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60910 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60915 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60827 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61458 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60908 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61007 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60927 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60951 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60942 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61113 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60909 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60822 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60894 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60952 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60928 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60936 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60906 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61466 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60919 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60914 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60926 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60939 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60931 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60831 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60823 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60954 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60916 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60963 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60947 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61006 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60933 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60950 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60895 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60917 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61480 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60935 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60960 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60767 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60918 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60821 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61077 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60905 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61517 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60893 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60953 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60903 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61439 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61337 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61545 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61299 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61010 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60930 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60744 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60929 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60754 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61008 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61116 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60811 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60807 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60938 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60764 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60873 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60817 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61550 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60748 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60956 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60753 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61115 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60741 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61075 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60948 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60829 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60943 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61338 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60762 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60824 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60830 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61535 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60898 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60815 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60962 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60957 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60944 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60921 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60759 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60897 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61518 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60958 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60922 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60937 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60875 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60766 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60751 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60768 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60743 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:61076 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60912 SYN_RECV
tcp 0 0 192.168.0.3:80 192.168.0.5:60816 SYN_RECV

Claro ejemplo de SYN Attack al Apache.

2) Mirando el server-status del Apache

Si miramos el server-status del apache veremos conexiones en estado “Reading” (“R” Reading Request).

El problema es que cuando el número de conexiones “Reading” lllena el “MaxClients” del Apache no acepta nuevas peticiones, por lo que los nuevos clientes, aunque sean legítimos, no serán aceptados.

Podemos aumentar el valor del “MaxClients” para que no se llene la cola de peticiones y acepte a todos los clientes, sean atacantes o no.

Otra buena medida es bajar el valor del “Timeout” del Apache para que las peticiones “Reading” sean “matadas” rápidamente, antes que pueda llenarse el MaxClients a su tope.

3) Mirando los logs del mod_evasive

Citar
Jun 22 18:24:04 lan mod_evasive[3835]: Blacklisting address 82.228.169.50: possible attack.
Jun 22 18:24:45 lan mod_evasive[3600]: Blacklisting address 81.206.164.163: possible attack.
Jun 22 18:25:46 lan mod_evasive[3589]: Blacklisting address 155.232.250.19: possible attack.
Jun 22 18:27:23 lan mod_evasive[3671]: Blacklisting address 83.227.217.2: possible attack.
Jun 22 18:28:10 lan mod_evasive[3673]: Blacklisting address 68.187.171.89: possible attack.
Jun 22 18:29:57 lan mod_evasive[3605]: Blacklisting address 70.143.2.130: possible attack.
Jun 22 18:30:45 lan mod_evasive[3803]: Blacklisting address 69.157.93.88: possible attack.
Jun 22 18:31:45 lan mod_evasive[10397]: Blacklisting address 146.64.81.22: possible attack.
Jun 22 18:35:01 lan mod_evasive[3794]: Blacklisting address 66.38.192.134: possible attack.
Jun 22 18:35:15 lan mod_evasive[3553]: Blacklisting address 81.190.204.64: possible attack.
Jun 22 18:40:10 lan mod_evasive[16602]: Blacklisting address 64.231.39.129: possible attack.
Jun 22 18:48:04 lan mod_evasive[16479]: Blacklisting address 84.99.195.100: possible attack.
Jun 22 18:48:12 lan mod_evasive[16467]: Blacklisting address 201.0.10.142: possible attack.
Jun 22 18:52:57 lan mod_evasive[16573]: Blacklisting address 219.95.39.242: possible attack.
Jun 22 18:53:07 lan mod_evasive[16534]: Blacklisting address 86.129.3.91: possible attack.
Jun 22 18:53:26 lan mod_evasive[16527]: Blacklisting address 62.254.0.32: possible attack.
Jun 22 18:54:41 lan mod_evasive[30473]: Blacklisting address 24.196.199.191: possible attack.
Jun 22 18:55:17 lan mod_evasive[30520]: Blacklisting address 142.161.157.227: possible attack.
Jun 22 18:55:24 lan mod_evasive[30461]: Blacklisting address 65.92.145.133: possible attack.
Jun 22 18:55:33 lan mod_evasive[30509]: Blacklisting address 88.111.227.200: possible attack.
Jun 22 18:56:13 lan mod_evasive[30473]: Blacklisting address 69.199.94.227: possible attack.
Jun 22 18:57:45 lan mod_evasive[30517]: Blacklisting address 86.125.135.212: possible attack.
Jun 22 18:57:54 lan mod_evasive[30479]: Blacklisting address 84.192.141.65: possible attack.
Jun 22 18:58:46 lan mod_evasive[30527]: Blacklisting address 83.140.97.106: possible attack.
Jun 22 18:59:31 lan mod_evasive[30469]: Blacklisting address 82.173.216.196: possible attack.
Jun 22 19:00:33 lan mod_evasive[30517]: Blacklisting address 80.176.157.245: possible attack.
Jun 22 19:00:38 lan mod_evasive[30470]: Blacklisting address 86.133.102.51: possible attack.
Jun 22 19:01:35 lan mod_evasive[30870]: Blacklisting address 24.42.134.253: possible attack.
Jun 22 19:01:48 lan mod_evasive[30509]: Blacklisting address 62.254.0.34: possible attack.
Jun 22 19:02:57 lan mod_evasive[31009]: Blacklisting address 81.227.219.125: possible attack.
Jun 22 19:03:29 lan mod_evasive[31056]: Blacklisting address 172.209.173.153: possible attack.
Jun 22 19:05:07 lan mod_evasive[31385]: Blacklisting address 84.6.12.110: possible attack.
Jun 22 19:06:52 lan mod_evasive[31008]: Blacklisting address 85.227.144.249: possible attack.
Jun 22 19:06:56 lan mod_evasive[31263]: Blacklisting address 213.222.156.222: possible attack.
Jun 22 19:07:13 lan mod_evasive[31393]: Blacklisting address 62.163.143.166: possible attack.
Jun 22 19:07:37 lan mod_evasive[31021]: Blacklisting address 62.135.101.73: possible attack.
Jun 22 19:08:03 lan mod_evasive[31251]: Blacklisting address 82.201.249.69: possible attack.
Jun 22 19:08:17 lan mod_evasive[31200]: Blacklisting address 81.62.65.53: possible attack.
Jun 22 19:11:04 lan mod_evasive[31263]: Blacklisting address 82.39.148.204: possible attack.
Jun 22 19:12:37 lan mod_evasive[31241]: Blacklisting address 213.222.154.13: possible attack.
Jun 22 19:13:54 lan mod_evasive[31027]: Blacklisting address 81.51.79.4: possible attack.
Jun 22 19:24:04 lan mod_evasive[31041]: Blacklisting address 84.221.118.156: possible attack.
Jun 22 19:48:47 lan mod_evasive[3400]: Blacklisting address 62.135.101.192: possible attack.
Jun 22 19:53:04 lan mod_evasive[31031]: Blacklisting address 62.30.33.13: possible attack.
Jun 22 19:54:32 lan mod_evasive[31016]: Blacklisting address 72.14.194.18: possible attack.
Jun 22 19:56:10 lan mod_evasive[31067]: Blacklisting address 198.96.34.58: possible attack.
Jun 22 20:03:24 lan mod_evasive[5144]: Blacklisting address 172.213.33.242: possible attack.
Jun 22 20:08:31 lan mod_evasive[5137]: Blacklisting address 83.241.11.16: possible attack.
Jun 22 20:21:59 lan mod_evasive[6645]: Blacklisting address 201.23.193.20: possible attack.
Jun 22 20:32:28 lan mod_evasive[7801]: Blacklisting address 212.38.134.172: possible attack.
Jun 22 20:45:46 lan mod_evasive[7836]: Blacklisting address 81.247.11.48: possible attack.
Jun 22 20:48:03 lan mod_evasive[7796]: Blacklisting address 70.245.98.186: possible attack.
Jun 22 20:49:38 lan mod_evasive[7832]: Blacklisting address 61.8.138.203: possible attack.
Jun 22 20:51:21 lan mod_evasive[7801]: Blacklisting address 201.132.197.161: possible attack.
Jun 22 20:57:18 lan mod_evasive[10426]: Blacklisting address 82.201.249.67: possible attack.
Jun 22 20:57:51 lan mod_evasive[7822]: Blacklisting address 81.77.26.162: possible attack.
Jun 22 21:00:25 lan mod_evasive[7817]: Blacklisting address 200.39.202.243: possible attack.
Jun 22 21:12:04 lan mod_evasive[7794]: Blacklisting address 84.27.139.25: possible attack.
Jun 22 21:22:27 lan mod_evasive[7816]: Blacklisting address 217.208.98.254: possible attack.

Si es un DDoS muy distribuido enseguida notaremos que muchas ip’s diferente DoSean el Apache.

4) Mirando los logs del syslog (del kernel)

Citar
May 17 13:39:01 lan kernel: possible SYN flooding on port 80. Sending cookies.
May 17 13:39:02 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:35 lan kernel: NET: 4 messages suppressed.
May 17 13:39:35 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:38 lan kernel: NET: 1 messages suppressed.
May 17 13:39:38 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:43 lan kernel: NET: 6 messages suppressed.
May 17 13:39:43 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:48 lan kernel: NET: 4 messages suppressed.
May 17 13:39:48 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:52 lan kernel: NET: 9 messages suppressed.
May 17 13:39:52 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:39:57 lan kernel: NET: 15 messages suppressed.
May 17 13:39:57 lan kernel: ip_conntrack: table full, dropping packet.
May 17 13:40:01 lan kernel: possible SYN flooding on port 80. Sending cookies.

Líneas a mirar:

Citar
possible SYN flooding on port 80. Sending cookies.

“Sending Cookies” si lo tenemos activado en el /etc/sysctl.conf
# Enable TCP SYN Cookie Protection

Código:
net.ipv4.tcp_syncookies = 1

A veces es mejor deshabilitarlo:

Código:
net.ipv4.tcp_syncookies = 0

De esta manera podemos ver las ip’s del ataque:

Citar
Jul 14 12:46:50 lan kernel: TCP: drop open request from 80.171.45.81/63069
Jul 14 12:46:55 lan kernel: NET: 1401 messages suppressed.
Jul 14 12:46:55 lan kernel: TCP: drop open request from 80.103.166.148/4403
Jul 14 12:46:59 lan kernel: NET: 1772 messages suppressed.
Jul 14 12:46:59 lan kernel: TCP: drop open request from 200.127.62.215/4019
Jul 14 12:47:05 lan kernel: NET: 2362 messages suppressed.
Jul 14 12:47:05 lan kernel: TCP: drop open request from 85.57.169.142/19899
Jul 14 12:47:11 lan kernel: NET: 2618 messages suppressed.
Jul 14 12:47:11 lan kernel: TCP: drop open request from 83.19.73.122/2710
Jul 14 12:47:14 lan kernel: NET: 898 messages suppressed.
Jul 14 12:47:14 lan kernel: TCP: drop open request from 80.235.39.64/3554
Jul 14 12:47:19 lan kernel: NET: 1120 messages suppressed.
Jul 14 12:47:19 lan kernel: TCP: drop open request from 80.171.45.81/62095
Jul 14 12:47:24 lan kernel: NET: 1714 messages suppressed.
Jul 14 12:47:24 lan kernel: TCP: drop open request from 84.62.152.44/34014
Jul 14 12:47:29 lan kernel: NET: 2274 messages suppressed.
Jul 14 12:47:29 lan kernel: TCP: drop open request from 200.127.62.215/3207
Jul 14 12:47:34 lan kernel: NET: 1552 messages suppressed.
Jul 14 12:47:34 lan kernel: TCP: drop open request from 80.103.166.148/4797
Jul 14 12:47:39 lan kernel: NET: 4044 messages suppressed.
Jul 14 12:47:39 lan kernel: TCP: drop open request from 80.235.39.64/2678
Jul 14 12:47:44 lan kernel: NET: 4360 messages suppressed.
Jul 14 12:47:44 lan kernel: TCP: drop open request from 80.103.166.148/1312
Jul 14 13:04:15 lan kernel: TCP: drop open request from 200.14.237.83/4787
Jul 14 13:04:22 lan kernel: NET: 147 messages suppressed.
Jul 14 13:04:22 lan kernel: TCP: drop open request from 81.38.172.161/4892
Jul 14 13:04:30 lan kernel: NET: 6 messages suppressed.
Jul 14 13:04:30 lan kernel: TCP: drop open request from 200.14.237.83/4934
Jul 14 13:04:30 lan kernel: TCP: drop open request from 200.14.237.83/4935
Jul 14 13:04:38 lan kernel: NET: 76 messages suppressed.
Jul 14 13:04:38 lan kernel: TCP: drop open request from 81.84.212.34/2861
Jul 14 13:04:40 lan kernel: NET: 269 messages suppressed.
Jul 14 13:04:40 lan kernel: TCP: drop open request from 200.14.237.83/3070
Jul 14 13:04:45 lan kernel: NET: 287 messages suppressed.
Jul 14 13:04:45 lan kernel: TCP: drop open request from 81.203.228.102/4400
Jul 14 13:04:50 lan kernel: NET: 98 messages suppressed.
Jul 14 13:04:50 lan kernel: TCP: drop open request from 81.84.212.34/3961
Jul 14 13:04:54 lan kernel: NET: 245 messages suppressed.
Jul 14 13:04:54 lan kernel: TCP: drop open request from 200.84.169.200/1183
Jul 14 13:05:00 lan kernel: NET: 1787 messages suppressed.
Jul 14 13:05:00 lan kernel: TCP: drop open request from 81.203.228.102/2050
Jul 14 13:05:04 lan kernel: NET: 3208 messages suppressed.
Jul 14 13:05:04 lan kernel: TCP: drop open request from 86.212.167.27/4720
Jul 14 13:05:09 lan kernel: NET: 2031 messages suppressed.
Jul 14 13:05:09 lan kernel: TCP: drop open request from 81.203.228.102/1794
Jul 14 13:05:14 lan kernel: NET: 2221 messages suppressed.
Jul 14 13:05:14 lan kernel: TCP: drop open request from 81.38.172.161/4908
Jul 14 13:05:21 lan kernel: NET: 730 messages suppressed.
Jul 14 13:05:21 lan kernel: TCP: drop open request from 81.203.228.102/1430
Jul 14 13:05:25 lan kernel: NET: 234 messages suppressed.
Jul 14 13:05:25 lan kernel: TCP: drop open request from 81.203.228.102/2939
Jul 14 13:05:30 lan kernel: NET: 1594 messages suppressed.
Jul 14 13:05:30 lan kernel: TCP: drop open request from 200.14.237.83/3876
Jul 14 13:05:36 lan kernel: NET: 633 messages suppressed.
Jul 14 13:05:36 lan kernel: TCP: drop open request from 86.212.167.27/1116
Jul 14 13:05:39 lan kernel: NET: 970 messages suppressed.
Jul 14 13:05:39 lan kernel: TCP: drop open request from 81.38.172.161/3040
Jul 14 13:05:45 lan kernel: NET: 548 messages suppressed.
Jul 14 13:05:45 lan kernel: TCP: drop open request from 81.203.228.102/2119
Jul 14 13:05:50 lan kernel: NET: 421 messages suppressed.
Jul 14 13:05:50 lan kernel: TCP: drop open request from 81.203.228.102/2478
Jul 14 13:05:56 lan kernel: NET: 379 messages suppressed.
Jul 14 13:05:56 lan kernel: TCP: drop open request from 81.203.228.102/4005
Jul 14 13:05:59 lan kernel: NET: 891 messages suppressed.
Jul 14 13:05:59 lan kernel: TCP: drop open request from 81.38.172.161/3568
Jul 14 13:06:04 lan kernel: NET: 2221 messages suppressed.
Jul 14 13:06:04 lan kernel: TCP: drop open request from 81.203.228.102/4532
Jul 14 13:06:09 lan kernel: NET: 243 messages suppressed.
Jul 14 13:06:09 lan kernel: TCP: drop open request from 81.203.228.102/1939
Jul 14 13:06:14 lan kernel: NET: 2166 messages suppressed.
Jul 14 13:06:14 lan kernel: TCP: drop open request from 81.38.172.161/2137
Jul 14 13:06:19 lan kernel: NET: 2071 messages suppressed.
Jul 14 13:06:19 lan kernel: TCP: drop open request from 81.38.172.161/3136
Jul 14 13:06:24 lan kernel: NET: 2069 messages suppressed.
Jul 14 13:06:24 lan kernel: TCP: drop open request from 81.84.212.34/4600
Jul 14 13:06:29 lan kernel: NET: 1797 messages suppressed.
Jul 14 13:06:29 lan kernel: TCP: drop open request from 86.212.167.27/3171
Jul 14 13:06:35 lan kernel: NET: 1292 messages suppressed.
Jul 14 13:06:35 lan kernel: TCP: drop open request from 81.203.228.102/1394
Jul 14 13:06:39 lan kernel: NET: 715 messages suppressed.
Citar
May 17 14:13:24 lan kernel: ip_conntrack: table full, dropping packet.

Tabla llena. Tenemos un problema porque no admitiremos más conexiones aunque sean legítimas.

Podemos aumentar el valor de dicha tabla si nuestra red da para más.

Directamente:

Código:
echo “65535″ > /proc/sys/net/ipv4/ip_conntrack_max

Para que el valor quede guardardo y no se pierda al reiniciar, debemos añadirlo en el sysctl.conf

Código:
net.ipv4.ip_conntrack_max = 65535

Recuerda reiniciar la red para aplicar los cambios en el /proc (service network restart).

5) Mirando las gráficas del MRTG, RRDtool

Si ves que el tráfico inbound sube hasta los 100mbps es que te están doseando hehehe.


B) Intentar parar el ataque1) – mod_evasiveWeb Oficial:
http://www.nuclearelephant.com/projects/mod_evasive/Consideramos que 50 conexiones por segundo a 2 páginas es suficiente motivo como para bloquear esa ip:

Código:
DOSHashTableSize 3097
DOSPageCount 2
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1
DOSBlockingPeriod 900

Igual que el anterior pero con 50 peticiones en un segundo a 1 sola página:

Código:
DOSHashTableSize 3097
DOSPageCount 1
DOSSiteCount 50
DOSPageInterval 1
DOSSiteInterval 1

Si queremos bloquear las ips que floodean, podemos usar el iptables:

DOSSystemCommand “sudo -u root -c ‘/sbin/iptables -A INPUT -s %s -j DROP”

Recordar de mirar el syslog por si hay posibles falsos positivos (ip’s que no hacian flood).

Config ejemplo:
http://www.eth0.us/mod_evasive

2 – mod_security

El único problema del mod_security es que necesitamos al menos un argumento para detectar el ataque.

En el ejemplo usamos en http_referer y el User Agent para detectar el DDoS:

Bloqueando un ataque Iframe
http://foro.elhacker.net/index.php/topic,127481.0.html

3- tcplimit, ipdrop, ipblock

Usando firewalls dinámicos.

4- Optimizando y asegurando la red con el sysctl.conf

cat /proc/sys/net/ipv4/tcp_syncookies

# Enable IP spoofing protection, turn on Source Address Verification

net.ipv4.conf.all.rp_filter = 1

# Enable TCP SYN Cookie Protection

net.ipv4.tcp_syncookies = 1

# Enable ignoring broadcasts request

net.ipv4.icmp_echo_ignore_broadcasts = 1

Más ejemplos de configuración completa del sysctl.conf en las referencias del documento.

5- APF Firewall con el módulo anti-ddos

*/8 * * * * root /etc/apf/ad/antidos -a >> /dev/null 2>&1

KISS My Firewall es una alternativa.

Script PHP
http://www.prism-hosting.com/AntiDoS

6- Parar el botnet

Tracking Botnets – Bot-Commands
http://www.honeynet.org/papers/bots/botnet-commands.html

Tracking Botnets
http://www.honeynet.org/papers/bots/

Tracking Botnets – DDoS-attacks
http://www.honeynet.org/papers/bots/botnet-ddos.html

Phatbot Trojan Analysis
http://www.lurhq.com/phatbot.html

7- Usando reglas del iptables

Código:
# todo el trafico syn
-P INPUT DROP
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp ! –syn -j REJECT –reject-with tcp-reset
-A INPUT -m state –state INVALID -j DROP
-P OUTPUT DROP
-A OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A OUTPUT -p tcp ! –syn -j REJECT –reject-with tcp-reset
-A OUTPUT -m state –state INVALID -j DROP
-P FORWARD DROP
-A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -p tcp ! –syn -j REJECT –reject-with tcp-reset
-A FORWARD -m state –state INVALID -j DROP
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A FORWARD -i lo -o lo -j ACCEPT# sube las cargas pero muchos wwww buena señal
-A INPUT -p tcp –syn -j REJECT –reject-with icmp-port-unreachable# la que mejor va
-N syn-flood
-A syn-flood -m limit –limit 100/second –limit-burst 150 -j RETURN
-A syn-flood -j LOG –log-prefix “SYN flood: “
-A syn-flood -j DROP# igual que el de arriba pero muy bestia
-N syn-flood
-A INPUT -i eth0:2 -p tcp –syn -j syn-flood
-A syn-flood -m limit –limit 1/s –limit-burst 4 -j RETURN
-A syn-flood -j DROP-A INPUT -p tcp -m tcp –tcp-flags SYN,RST,ACK SYN -m limit –limit
1/sec -j ACCEPT
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK RST -m limit
–limit 1/sec -j ACCEPT

# no es muy efectivo
-A INPUT -s 0/0 -p tcp –syn –source-port 1000:5000
–destination-port 80 -j DROP

# no es muy efectivo
-A INPUT -p tcp -m tcp –dport 80 –sport 1000:5000 –tcp-flags SYN SYN -j DROP

C) Referencias

- Opciones de seguridad en Linux a través de /proc (I) y (II)
http://www.elhacker.net/opciones-seguridad-linux-proc.html

- Syctl.conf Hardening
http://www.eth0.us/sysctl

- Ipsysctl tutorial 1.0.4
http://ipsysctl-tutorial.frozentux.net/ipsysctl-tutorial.html

- Hardening the TCP/IP stack to SYN attacks
http://www.securityfocus.com/infocus/1729

- DDOS and SYN_Recv Attacks And some SOlutions
http://www.vbulletin.com/forum/showthread.php?t=126699

- Distributed Reflection Denial of Service
http://www.grc.com/dos/drdos.htm

- Dynamic iptables firewalls
http://www-128.ibm.com/developerworks/library/l-fw/

- Preventing DDoS Attacks
http://www.linuxsecurity.com/content/view/121960/49/

- Distributed Denial of Service (DDoS) Attacks/tools
http://staff.washington.edu/dittrich/misc/ddos/

fuente: foro.elhacker.net/index.php/topic,137442.0.html