Blog sobre informática y otras cosas
Archivo de agosto, 2006
Comandos linux de la A a la Z
28 ago
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
26 ago
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
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”.
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
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)
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:
“Sending Cookies” si lo tenemos activado en el /etc/sysctl.conf
# Enable TCP SYN Cookie Protection
A veces es mejor deshabilitarlo:
De esta manera podemos ver las ip’s del ataque:
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.
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:
Para que el valor quede guardardo y no se pierda al reiniciar, debemos añadirlo en el sysctl.conf
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:
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:
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
-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/
La Clase
24 ago
Se cuenta por ahí que un profesor un módulo de FP en Desarrollo de Aplicaciones explicaba en clase que los buenos programadores solo usan Windows XP y pide que levante la mano todo el que también sea seguidor de la empresa de Bill Gates. Todos en clase, por temor a represalias por parte del profesor, levantan la mano, excepto uno con pinta de friki que estaba sentado al fondo del aula. El profesor le miró con sorpresa y le preguntó:
-Oiga, usted. ¿Por qué no ha levantado la mano?.
-Porque yo no utilizo Windows.
El profesor, extrañado, preguntó de nuevo:
-Vaya, y sino utilizas Windows ¿Que Sistema Operativo utilizas?
-GNU/Linux. -Respondió orgulloso-
El profesor, cuyos fanáticos oídos no podían dar crédito a algo así, exclamó:
-Pero hijo mío ¿qué pecado has cometido para utilizar tal chapuza?
El alumno, muy tranquilo, le respondió:
-Mi padre es informático y usa SUSE Linux, mi madre es asesora en seguridad y usa Debian Linux y mi hermano estudia Físicas y utiliza Linux Mandrake, por eso yo también utilizo GNU/Linux! -remató orgulloso y convencido-
- Bueno, -replicó irritado el profesor-, pero ese no es motivo para utilizar Linux. Tú no tienes porqué hacer lo que hacen tus padres.. Por ejemplo, si tu madre se prostituyese y se drogase todo el día, tu padre se tocara los cojones, bebiese como un cabrón y traficase con drogas y tu hermano atracase comercios y robase a abuelitas, entonces, ¿tú qué harías?
- Seguramente instalaría Windows
fuente: noticias linux
Antivirus para linux
10 ago
Panda a anunciado en su web que ha desarrollado un antivirus llamado Panda Desktop Secure para Linux Ubuntu.
Vamos a ver, no es un poco raro que no habiendo virus para Linux saquen un software destinado a ello?, solo falta que en poco tiempo empiece a aparecer malware para Linux, sería algo digno de sospecha.
Alojamiento de archivos alternativos a rapidshare
8 ago
Las páginas web dedicadas al alojamiento de archivos hoy se cuentan por centenas. Se usan principalmente en foros y blogs para alojar discos, vídeos y archivos en general de un tamaño que oscila entre los 10 y los 100 Mb. No recomendamos en ningún caso alojar archivos privados o muy importantes en las webs de este estilo. Son sitios para salir del paso o para temas de ocio, muchos de los cuales ofrecen una seguridad y privacidad dudosas.Si eres aficionado a estos sitios, te habrás encontrado cientos de veces con Rapidshare.de, sin duda la web líder en este aspecto seguida de cerca por Megaupload, Filefactory y alguna más.
Teniendo en cuenta que hay cientos de alternativas me pone de los nervios que se use tanto rapidshare ya que aparte de tener que esperar casi 1 minuto para descargar el archivo, sólo te deja descargar un archivo cada cierto tiempo y tiene un límite de 30 megas por hora. Así pues, me propuse encontrar alguna opción mejor.
Lo primero era buscar alternativas y eso no es un problema. Aquí van tres populares listados de sitios de alojamiento de archivos:
Pero como dice sabiamente Arturo Goga en su blog:
Lo malo de la lista, es que se nos dan las características (bastante homogéneas entre sí, la verdad), pero no que tan confiable es el servicio… Así que no sería mala idea recomendar algunos, de entre todos esos.
Y efectivamente, justo cuando se nos empieza a caer la baba con sitios que prometen varios gigas por archivo y condiciones estupendas la realidad es muy diferente. O se mantienen gracias a una publicidad que invade todo tu campo visual, o unos son clones exactos de otros con distinto nombre o sencillamente la mayoría no funcionan. Así que en faqoff hemos probado los sitios webs más apetecibles (más de 50 oigan), durante varios días y les hemos sometido a un estricto test en el que se puntuaba las webs tal como sigue:
- Size (2pts): Tamaño máximo del archivo que puedes subir.
- Limit/day (2pts): El tiempo que tienen alojado tu archivo antes de borrarlo.
- Limit/band (1pt): Si existe alguna restricción al número de veces que puede descargarse un archivo.
- Publicidad (1pt): si la publicidad es muy poca, soportable o llega a complicar el proceso.
- Proceso (1pt): si tienes que dar varios pasos para obtener el link de descarga, si además hay un tiempo de espera para descargar y en general la simplicidad del proceso subir/descargar.
- D.Speed (1pt): indica si puedes descargar a toda la velocidad que tu conexión permite o no.
- Registro (1pt): si tienes que registrarte en la página o no.
- Info (0,5 pts): indica si cuando estás subiendo el archivo tienes algun indicador del estado de la transferencia y si este incluye % de lo completado.
- Status (0,5 pts): indica si la web ha fallado o dado error en algún momento de las múltiples pruebas.
Como se puede ver el total posible es 10.
Las puntuaciones claro está son subjetivas y otras personas puntuarían más alto aspectos que consideren más importantes pero tras porbar con distintas puntuaciones los resultados no cambian mucho. Aquí está el cuadro resultante con los 9 servicios que más me han gustado y por último con la nota que habría sacado Rapidshare. En verde puntúa el 100% de la nota en la categoría, en ámbar el 50% y en rojo 0 (el color dependía de la comparación con el resto de webs):
(click para ampliar)
La columna de Status es un tanto peculiar ya que muchos sitios funcionaban terriblemente mal por lo que era imposible darles puntuación en otras categorías y al final se quedaron por el camino. Por supuesto también eliminamos de la selección todas las páginas que no aprobaban. Las pruebas se realizaron con distintos archivos .mp3 de tamaño entre 2 y 4 Mb.
Ahora comentaré con algo de detalle las premiadas con algunas capturas (click en las miniaturas para ampliar)
1. Quicksharing – 8,75

De las últimas que miré y la mejor sin lugar a dudas. Es de estos servicios a los que te pasas buscando la trampa por alguna parte pero yo aún no la encontré. La info que te dan sobre el proceso de subida es mínima pero se les perdona.
2. Upload.sc – 7,5

Un gran diseño muy Web 2.0 que dota al proceso de una gran sencillez. He leído algun comentario en otro blog sobre que el tiempo que tu archivo está disponible es muy inferior al mes que ellos prometen y al no estar muy masificado es difícil encontrar opiniones pero a mí me al menos me ha dado un buen resultado. Cuando acabas de subir el archivo en lugar de darte el link de descarga te dan un “link maestro” desde el cual puedes borrar el archivo o compartirlo.
3. Verzend – 7,25

Otro de los que más me ha gustado. Ideal para los que busquen gran capacidad (puedes subir hasta archivos de 1Gb). La mayor pega que tiene es que borrarán el archivo tras 7 días sin uso pero aún así es quizás la única web que permite archivos enormes conservando una apariencia limpia y sencilla.
4. Zupload – 7,25

Quizás la mejor relación tamaño/tiempo con archivos de hasta 500 Mb durante 1 mes. La apariencia es muy amateur y el copyright de la parte inferior sigue anclado en 2005 por lo que mucho seguridad no ofrece. Lo peor, una velocidad de descarga bajísima en las pruebas realizadas.
5. Bestsharing – 7

Otro de mis favoritos, sobretodo en lo que apariencia y sencillez del proceso se refiere. No está más arriba por su lentísima velocidad de descarga pero su web permite aceleradores de descarga por lo que es un problema salvable.
6. Yousendit – 7

Es muy popular y es el que venía usando hasta hoy. Quizás el aumento de su popularidad es el que ha hecho que hayan aumentado progresivamente sus limitaciones hasta el punto actual. Marcamos la opción de registro en ámbar ya que es gratuito y mejora sensiblemente esos límites.
7. Sendspace – 6,5

Es un servicio con condiciones exactamente iguales al popular Filefactory pero tiene mucha menos publicidad y mientras que en Filefactory tienes que pasar 3 pantallas para llegar al link de descarga, aquí el proceso se acelera.
8. Box.net – 6
![]()
Box es el único de los citados que requiere registro pero es que es mucho más que un servicio de alojamiento de archivos. El único en el que tendrás una cuenta permanente, como si de un disco duro se tratara. El proceso no es que sea complicado pero al haber múltiples opciones se hace menos inmediato. Fue el primero que encontré y me ha convencido para archivos pequeños que compartes con muchas personas. Las pantallas de descarga que ofrecerás a tus amigos son las más limpias de todas, no tienen pérdida.
Por el camino se han quedado sitios muy populares o que prometían mucho como AxiFile, Easy File Host, Content Type, Upload2, Up-file, Megashares, Pix Folder, Streamload, zShare, Wikiupload, Jumbofile, Filelodge, Gimehost… Algunos no aprobaband, otros eran muy similares a los aquí destacados, otros eran un desastre. Pero sinceramente creo que con los 8 vistos es más que suficiente para cualquiera.
Y si sigues sin estar satisfecho usa P2P.
Si alguien tiene alguna otra opción que use habitualmente y que saque buenas notas que la sugiera en los comentarios (nótese que hemos dejado dos huecos para un top-10).
Fuente: blogoff
Incendio en el Empordà
5 ago
Originally uploaded by chanclon.
Foto tomada por mi desde la estación.
Tenemos un incendio aquí al lado, según he leído se inició en Ventallo, y ha estado quemando toda la noche.
Como consecuencia del incendio la carretera C-31 está cortada en ambos sentidos a la altura de Verges.
En estos momentos según veo el incendio no está controlado, desde aquí camallera se pueden ver pasar avionetas, helicópteros y patrullas de mossos de esquadra. Según dice gente de aquí el pueblo de al lado ya está afectado por el incendio.
Windows Vista, jaqueado en Black Hat
5 ago
Fueron por lana y salieron trasquilados. Tal y como estaba previsto, Microsoft habló sobre la seguridad de Windows Vista en Black Hat. Mientras tanto, en una sala contigua, la investigadora polaca Joanna Rutkowska mostraba cómo utilizar su técnica Blue Pill (más detalles técnicos aquí) para insertar código malicioso en las mismísimas entrañas de una copia de Windows Vista versión 64-bit.Rutkowska encontró una forma de traspasar el polémico mecanismo con el que Microsoft intenta que sólo se puedan cargar en el kernel de Vista los drivers digitalmente firmados…
Fuente: kriptopolis
Wifi Solar
3 ago
La energía solar abre nuevas posibilidades al acceso a la red desde cualquier lugar perdido de la naturaleza sin necesidad de disponer de corriente eléctrica. El uso de paneles solares para acceder a internet es ya una realidad en la ciudad de Boulder (Colorado) donde sus habitantes ya disfrutan WiFi gracias a los paneles instalados en sus tejados, y todo ello sin un sólo cable y una inversión de sólo 10.000 dólares.

La empresa Lumin Innivative Products comercializa el modelo LightWave AP 1000, que por medio de paneles solares proporcionan un funcionamiento ininterrumpido con sólo cinco horas diarias de exposición al sol. Además disponen también de baterías recargables con una autonomía de hasta siete días.
Las terminales de Lumin alcanan hasta los 40 kilómetros y serán de gran utilidad en las zonas más apartadas y pueblos de dificil acceso con problemas para instalar corriente eléctrica. En la publicidad del fabricante se asegura que los militares le quitan el producto de las manos, aunque también destacan sus aplicaciones en excavaciones arqueológicas o escenarios de catástrofes; y será de gran utilidad en pistas de esquí, parques naturales, estaciones de monitorización medioambiental…
Para saber más sobre la WiFi solar:
Fuente: blogtelecom
AJAX vs. Flash
1 ago
La dualidad en el desarrollo de interfaces web: ¿Ajax o Flash?
¿Ajax o Flash?. Ésta es una de las muchas preguntas sin respuesta que casi cualquier desarrollador web se ha hecho durante el último año.
Argumentos a favor de ambas tecnologías (porque en ambos casos hablar de lenguaje o de entorno de desarrollo no es demasiado riguroso) los hay, y probablemente del mismo peso y defendidos con semejante vehemencia por las respectivas comunidades de desarrolladores. Pero en realidad, la discusión se puede simplificar en uno sólo: el uso de tecnologías propietarias, o abiertas, y es que el player o máquina virtual de Flash es algo cerrado, propiedad de Adobe, y el HTML dinámico basado en comunicaciones asíncronas depende de un objeto (XMLHTTPRequest) propiedad de Microsoft, aunque implementado por todos los navegadores modernos.
Evidentemente, la discusión es mucho más compleja, y en ella hay también una carga bastante fuerte de, llamémosles así, prejuicios históricos. Flash ha sido hasta hace muy poco tiempo una herramienta exclusiva para diseñadores y animadores, y si bien es cierto que con ella se han realizado algunas de las aberraciones más dolorosas para la vista que se recuerdan, no es menos cierto que también hay alguna que otra retina desprendida por el mal uso del HTML (“blink, blink”).
Por eso, todos los argumentos que se puedan dar a favor de una u otra tecnología no son más que discusiones bizantinas que intentan obviar lo que debería ser la norma para cualquier desarrollador: utiliza la herramienta que mejor te pueda ayudar a resolver el problema concreto con el que te encuentres.
En cualquier caso, no estaría de más volver al vista atrás y recordar el porqué de la existencia de ambas tecnologías. En los albores de la historia moderna de Internet, allá por el 2000, se empezó a hacer patente la necesidad de superar las limitaciones intrínsecas al HTML, el lenguaje de descripción de páginas en el que se basó la web, y del modo de operación del protocolo de comunicaciones utilizado, basado en envíos de datos a un servidor remoto, y espera de la respuesta de éste para volver a presentar datos en el navegador del usuario.
En esos tiempos, había quien se ganaba las lentejas (como éste que les escribe) realizando animaciones en Javascript, un lenguaje de programación que permitía hacer maravillas visuales si se dedicaba un 80% del tiempo de desarrollo a luchar a brazo partido contra las diferentes implementaciones del lenguaje y del acceso a los elementos de la página por los navegadores existentes, incluso por las distintas versiones de un mismo navegador.
Pero en eso llegó algo nuevo: Flash. Con Flash se podía hacer lo mismo que con HTML dinámico (esto es, la combinación de HTML y Javascript), sólo que de forma mucho más rápida y que funcionaba en todos los navegadores. Y aunque ya lo he dicho, quiero insistir en ello: de forma más rápida. Mucho más rápida.
Y pasó lo que tenía que pasar: todo el mundo, al menos el mundo que gustaba de los interfaces ricos, que gustaba de salirse del aburrimiento visual del HTML, giró la cabeza, abandonó el Javascript y se pasó a Flash. Y comenzaron a propagarse por la web los equivalentes a blink y a las marquesinas, sólo que ahora con más colorines, y a veces, incluso con sonido.
Y así estuvimos unos tres años largos, creciendo con cada nueva versión de Flash, y empezando a decir que podíamos llevar la experiencia de las aplicaciones de escritorio a la web, haciendo lo que el marketing de Macromedia llamaba RIAs. (Rich Internet Applications). Ésa era la luz hacia la que todos íbamos, el cielo que todos perseguíamos: las RIAs.
Pero de repente, Google sacó del arroyo al Javascript, e implementó todo el cliente de su sistema de correo electrónico utilizando ese lenguaje. Y alguien más llegó y decidió que había que ponerle un nombre al redescubrimiento: AJAX (Asynchronous Javascript And XML). Y alguien más desarrolló un framework para simplificar el desarrollo en Javascript. Y alguien más llegó y decidió que esa forma de implementar los interfaces de las aplicaciones web era uno de los pilares maestros sobre las que se sustentaba lo que había comenzado a llamarse web 2.0.
Y de la noche a la mañana, los que llevaban años diciendo que Javascript no era un lenguaje de programación, se olvidaron de su poco gusto por la plataforma, y de lo poco que les gustaba que en los navegadores las cosas se movieran, o que se recargaran datos si eso se hacía en Flash, y comenzaron a loar las maravillas de AJAX.
Y ahora, nos pasamos los días de claro en claro y las noches de turbio en turbio discutiendo sobre qué es lo correcto, si implementar soluciones basadas en Flash o en XHTML con peticiones de datos asíncronas a servidor.
¿Lo correcto? ¿Cómo se puede saber qué es lo correcto? En primer lugar, conociendo las ventajas e inconvenientes de cada solución, sabiendo qué se puede y qué no se puede hacer y qué perspectivas de futuro inmediato hay. Veamos, pués, rápidamente, qué caracteriza a cada una de las dos tecnologías.
AJAX
Lo bueno:
Basada en HTML, en realidad en XHTML, por lo que debería ser fácilmente estandarizable.
Accesible. La integración de lectores de pantalla, las posibilidades de modificar el tamaño del texto por el usuario, etc siguen sin tener comparación en Flash. (Por aquí hay disidencia: ¿AJAX accesible? Si te lee Stevie Wonder se le caen las gafas de sol. La propuesta es quitarlo tanto de aquí como de Flash)
Integración con CSS. Es, por tanto, bastante sencillo separar datos de presentación, por lo que las aplicaciones son más escalables.
Ligereza. Se supone que una página con sólo HTML es más ligera que un front-end en flash, aunque en realidad el Javascript necesario para funcionar no es tan ligero, por lo que finalmente se depende de mecanismos de caché en servidor.
Javascript. Lenguaje interpretado en el navegador, sencillo, orientado a objetos (según a quién se le pregunte), especialmente orientado a manipular el DOM de las páginas.
Motores de búsqueda. Al basar los interfaces en HTML, son fácilmente indexados por los motores de búsqueda. Siempre y cuando su contenido no sea producto de una petición de datos a servidor, claro está.
Lo malo:
El usuario puede haber deshabilitado el Javascript en el navegador.
Se depende de un objeto propiedad de Microsoft para las comunicaciones asíncronas. Lo malo de esto no es que ese objeto sea propiedad de Microsoft o de cualquier otro, sino que es propiedad de alguien.
No es tan ligero como parece a primera vista.
Burdo. Por mucho que se intente, el resultado final no es comparable al de una web en Flash.
Flash
Lo bueno:
Player casi universal. Prácticamente todos los ordenadores del mundo lo tienen instalado, aunque eso no implica que el usuario de un ordenador en concreto tenga instalada la última versión del mismo, ni que no lo haya deshabilitado utilizando alguna extensión del navegador.
Calidad visual. Sobre todo con el avance en el manejo de los textos en las últimas versiones del player de Flash.
Animación, multimedia. La única forma solvente de incluir animaciones, contenido interactivo, vídeo, audio.
Lenguaje de programación de alto nivel orientado a objetos, aunque también sea interpretado en el player.
Lo malo:
Se depende de un plug-in, propietario.
Se tiende a abusar de las animaciones.
Integración con el botón de volver del navegador no es nada sencilla.
Poco accesible, a pesar de que las últimas versiones de Flash suponen una mejora sensible en este aspecto.
Está inevitablemente unido a dos cosas: el botón de “Skip intro” y los banners abusivamente invasivos.
Efectivamente, todos los argumentos a favor de una u otra tecnología en realidad contienen un argumento en contra. Y viceversa. En el fondo, no debería ser el uso de una u otra tecnología el que marque la bondad de una solución sino el buen uso que se haga de ella, la forma en la que se utiliza. Al igual que con todos los avances del ser humano, como la electricidad, el motor de explosión, o la rueda, tanto Flash como AJAX se pueden utilizar para hacer el bien y para hacer el mal.
Esa, al menos, fue la conclusión de Herr Kompilehn, eminente psiquiatra de los Cárpatos, en el Trigésimocuarto Congreso Mundial de Transtornos de la Personalidad en Programadores.
A continuación, voy a transcribir las notas que tomé sobre su ponencia en dicho Congreso. Es un relato escalofriante, así que, por favor, si sus corazones son delicados, no sigan leyendo…

Estimados miembros de la Comisión Científica, estimados colegas, señoras y señores:
Durante los últimos cuarenta años he tratado a algunas de las mentes más preclaras de Europa, pero también a algunas de las más sanguinarias; a genios que no eran capaces de acordarse de ponerse los pantalones antes de salir de casa, y a asesinos múltiples que lloraban cuando alguien les enseñaba una foto de su madre.
Pero lo que les voy a contar ahora es el caso más extraño con el que me he encontrado jamás, el caso que estuvo a punto de hacerme renegar del Juramento Hipocrático, de hacerme abandonar el ejercicio de la psiquiatría.
Todo comenzó hace un par de años, cuando mi ayudante concertó una cita con un paciente que parecía como cualquier otro, una persona joven, con muchos de esos pendientes en partes muy extrañas de la cara, que hablaba un lenguaje un poco raro, lleno de términos desconocidos entonces para mí, pero que me perseguirán en mis sueños durante el resto de mi vida.
Pero no adelantemos acontecimientos, queridos colegas. Como he dicho, todo comenzó hace un par de años, con la visita de este joven paciente, a quien llamaré Mr. Alaguan de ahora en adelante, nombre ficticio, sí, pero que me permitirá mantener el debido secreto profesional.
Mr. Alaguan era un joven vestido a la moda, con ese pelo alborotado que estoy seguro que necesita más tiempo de preparación que un buen peinado con gomina, como a mí me gusta.
Desde su primera visita, aprecié en él una serie de gestos inquietantes. Como he dicho, durante mi larga carrera, igual que como durante la suya, queridos colegas, he tenido que tratar con algunos de los cerebros más enfermos de Centro-Europa, pero en el joven Alaguan, había algo que no había visto nunca.

Había decisión, una decisión, una pasión, que rallaba en el fanatismo. Porque durante los primeros meses de terapia lo único que conseguí sacar en claro es que el joven Alaguan sufría por no poder conseguir lo que él llamaba “llevar el escritorio a la web”, fuera eso lo que fuera.
Cada vez que nos acercábamos al tema, la agitación del joven Alaguan era patente,: comenzaba a temblar, a sudar, sus músculos se convulsionaban, y lo único que era capaz de decir, haciendo dolorosos esfuerzos para abrir la boca aprisionada bajo la tensión de sus mandíbulas era “llevar el escritorio a la web, debo llevar el escritorio a la web, debo trasladar la experiencia de utilizar una aplicación de escritorio a la web”.
¿Qué mayor reto puede haber para un científico, queridos colegas, que intentar desentrañar lo desconocido, intentar hacer un poco de luz en la oscuridad de una mente enferma? Por eso, en pocas sesiones Alaguan se convirtió casi en una obsesión para mí.
Poco a poco, utilizando algunas de las técnicas más avanzadas de electroshock, conseguí atisbar la fuente del problema. Dentro de Alaguan había dos personalidades totalmente diferentes, pero en continua lucha por lograr un objetivo compartido, que no era otro que la frase que Alaguan repetía una y otra vez durante sus ataques “llevar el escritorio a la web, trasladar la experiencia de usuario de una aplicación de escritorio a la web”.
Por fin, tras varios meses, conseguí comenzar a separar una de otra, conseguí aislar a las dos personalidades, de forma que podía interrogar a cada una de ellas. Pero siempre, antes o después, la personalidad que no estaba siendo interrogada conseguía, no sé cómo, salir a la luz, y participar de la conversación.
Por ello, me ha parecido, queridos colegas, que lo mejor era transcribir las grabaciones de una de mis sesiones con Mr. Alaguan, aquella en la que por fin sus dos personalidades afloraron y se enfrentaron abiertamente, para intentar hacerles partícipes del miedo, del horror que yo sentí.
Despacho de Herr Kompilehn: 30/06/2006
Herr Kompilehn: Relájese, Mr. Alaguan, no se asuste, esta inyección es un relajante muscular. Le ayudará a evitar los dolores que tuvo después de las últimas sesiones.
Bien, relájese, y deje que AJAX tome el control de su cuerpo, que se exprese con confianza. Déjele que hable de sus frustraciones, de sus miedos, de sus orgullos, con total libertad.
AJAX: Un momento, que estoy haciendo una petición nueva de datos sin recargar la página. Que eso se me da muy bien. Pero claro, ya estoy oyendo a Flash , protestando como siempre, que si es que dependo del objeto HTTPRequest, que si dependo de un lenguaje interpretado, que si no termino de ser cross-browser…. Qué pesado ¿Y él?, se habrá visto… con esa chulería, con esa soberbia por dibujar gráficos vectoriales, ¿quién se creerá que es?
Flash: ¡Callaaaaaaaaa! No me seas soberbio tú. Dependes para funcionar de un objeto que no se implementa igual en todos los navegadores, y de un framework en Javascript (como si eso fuera un lenguaje de programación) que deja mucho que desear, basado en una arquitectura más que discutible, y que parece pensado para que cualquier programador se vincule y dependa de él más que para utilizarlo.
AJAX: Ya está, ya salió. ¿Y tú? ¿Acaso no dependes de un runtime (perdona, no me mires así, por mucho que te empeñes en llamarlo máquina virtual no deja de ser un runtime), y además, propietario? Porque yo no obligo a ningún usuario a que se tenga que instalar nada, ni runtimes, ni máquinas virtuales, ni nada.
Flash: Sí claro, tú nunca obligas a nadie a nada, sólo es necesario que tengan activado el Javascript en el navegador, y que además el navegador no sea demasiado viejo. Por no hablar de los desarrolladores, que tienen que pasar por un infierno para probar sus aplicaciones, dependiendo de plugins del navegador o de sniffers de red para probar y resolver los errores de sus aplicaciones…
AJAX: ¡Calla! ¡Que me estás poniendo malo! No paras de quejarte, que si esto, que si lo otro, que si tienen que activar el Javascript… anda, y ¿qué pasa si alguien no se instala el Flash Player? ¿Y si tiene una versión antigua y no se ve tu aplicación?
Flash: Ya estamos otra vez con lo del player. ¿Porqué no dices de una vez que eso no es más de una disculpa para no reconocer que como el resultado que doy yo no lo da nadie?. ¿Quieres un trabajo fino? Dáselo a Flash, no al garrulo ese del Javascript
AJAX: Eso que acabas de decir sí que es una tontería.
Flash: Claro, pero no das argumentos para sustentar tus teorías. ¿No tendrá algo que ver el que yo ahora tenga un player nuevo, con un lenguaje nuevo, y que mis aplicaciones funcionen mucho más rápido que antes? ¿Te suena? ¿Has oído hablar de Flex o estás tan ocupado mirándote el ombligo que no te has enterado?
AJAX: ¿Flex?. Espera… ¿no es lo mismo que Generator, pero cinco años después?. Uy, no, no es lo mismo, que para desarrollar con Flex hay que seaber mucho de patrones J2EE…. ¡JA!
Flash: Ya, claro, lo que pasa es que a tí te molesta que se facilite el desarrollo de aplicaciones de cualquier forma. Si hay algo que no se hace con un editor de texto, ya no sirve para nada. Da igual que el desarrollo se pueda basar en un lenguaje orientado a objetos moderno y eficaz, que no necesita de trucos baratos como tu adorado prototipo, herencia de la que yo ya he salido.
AJAX: ¡Qué cara más dura! Ahora resulta que el mismo lenguaje que tú has estado utilizando durante años, lo que llamas con tanta pedantería ActionScript 1, como si ya lo hubieras olvidado, es lo peor que se ha inventado. Claro, con ponerle coletillas y número de versión al lenguaje ya lo arreglamos todo. Que si AS1, que si AS2, que si AS3… Muy modernos, sí, pero ¿por qué no hablas de la burrada de dinero que se necesita para empezar a desarrollar en Flash?… … y no te cuento ya si encima lo que vas a hacer lo vas a hacer con Flex… Porque en el mejor de los casos, hay que comprar un entorno de desarrollo, que por cierto, sigue siendo de lo más incomprensible y agresivo para los programadores que vengan de otros lenguajes. Mientras no te deshagas de la línea de tiempo no vas a conseguir que te consideren como un lenguaje normal, no como yo, que no necesito de paradigmas extraños; lo mío es código, y nada más, basta con tener un editor de texto, y se puede empezar a desarrollar.
Flash: Claro, ya has llegado a donde querías ¿no? Eso es lo que en realidad te molesta, que Flash haya sido durante mucho tiempo una herramienta para creativos, y que éstos la sigan utilizando. ¿Si hay línea de tiempo no vale como lenguaje de programación?
Herr Kompilehn: ¡Señores, por favor! ¡Compórtense! ¿Les parece a ustedes bien que se peleen de esa forma por algo tan banal?
AJAX: ¡Ha empezado él!
Flash: ¡Ha sido él, que se cree mejor que nadie!
Herr Kompilehn: ¡Silencio! ¡Ya está bien! ¿No han probado a trabajar en equipo, aprovechando cada uno lo mejor del otro? ¿No se dan cuenta que no son más que dos herramientas disponibles para la resolución de un mismo problema?
Efectivamente, Herr Kompilehn, como suele ocurrir con los grandes científicos de los Cárpatos, había dado en el clavo. La bondad de las soluciones viene por modas. Lo que hace cinco o seis años era considerado por la mayoría de los desarrolladores como un lenguaje de segunda categoría, de repente se ha convertido en la panacea, superando a otra herramienta también denostada por muchos por su pasado como herramienta para diseñadores y para realizar los banners más molestos del mundo.
Tal vez lo importante no sea saber qué solución es mejor, porque ninguna lo es, sino conocer bien las implicaciones, ventajas y desventajas de cada una de ellas, para que sea el desarrollador quien, utilizando su criterio, su conocimiento del problema a atacar y de las posibles soluciones para el mismo, utilice una u otra herramienta, o una combinación de ambas.
Fuente: César Tardáguila
