Error en init scripts en Debian

Modifico una línea de una zona de un servidor BIND en un Debian etch, e intento “recargar” la configuración.

Lo siguiente sucede:

proxy:~# /etc/init.d/bind9 reload
rndc: connect failed: connection refused
proxy:~# /etc/init.d/bind9 stop
Stopping domain name service: namedReloading Squid configuration files.
done.
rndc: connect failed: connection refused
.
proxy:~# ps -fe | grep bind
bind     18649     1  0 Jan30 ?        00:00:00 /usr/sbin/named -u bind
root     32723 32134  0 11:51 pts/0    00:00:00 grep bind
proxy:~# /etc/init.d/bind9 stop
Stopping domain name service: namedrndc: connect failed: connection refused
.
proxy:~# ps -fe | grep bind
bind     18649     1  0 Jan30 ?        00:00:00 /usr/sbin/named -u bind
root     32731 32134  0 11:52 pts/0    00:00:00 grep bind
proxy:~# killall named
proxy:~# ps -fe | grep bind
root     32734 32134  0 11:52 pts/0    00:00:00 grep bind
proxy:~# /etc/init.d/bind9 start
Starting domain name service: namedReloading Squid configuration files.
done.
.
proxy:~#

Si, actualicé el caché de los repositorios.
Si, es 9.3.4-2etch4
Al revisar el init script en la sección de reload se ve el comando /usr/sbin/rndc reload >/dev/null , interesante ver que nunca investigan si existe el pid.
Y luego me dicen “¿Porqué no utilizas Debian?”

Soporte WPA para tarjetas inalámbricas orinoco

Actualmente estoy ocupando una laptop vieja, que tiene una tarjeta inalámbrica pcmcia y ocupa el driver orinoco. Mi sorpresa fue que bajo GNU/Linux utilizando un kernel 2.6.22 no tenía soporte para encriptación WPA. Buscando un poco me encontré con este anuncio en el que menciona que recientemente en 2.6.28-rc1 se ha agregado la funcionalidad WPA.

Antes de que se emocione cualquiera que utilice el driver orinoco, es necesario aclarar que el driver soporta 3 tipos de hardware:

  • Tarjetas Lucent/Agere Orinoco Pcmcia y Apple Airport
  • Tarjetas Intersil PrismII Pcmcia/PLX/PCI
  • Tarjetas Symbol Spectrum24 HR Pcmcia

El hardware soportado para WPA es el Lucent/Agere, basta ver el dmesg para darse cuenta, por ejemplo:

eth1: Firmware determined as Lucent/Agere 8.10

Además es necesario bajar el firmware Agere 9.48 y colocarlo en /lib/firmware, se puede descargar de aquí o de esta copia local 🙂

Una vez descargado tenemos que arrancar con al menos un kernel 2.6.28-rc1, en mi caso lo hice con  2.6.29-rc1 debido a que se han estado ingresando bastantes parches al driver.

Si todo va bien en los mensajes del kernel se podrá apreciar algo como

eth1: Hardware identity 0005:0004:0005:0000
eth1: Station identity  001f:0002:0009:0030
eth1: Firmware determined as Lucent/Agere 9.48
eth1: Ad-hoc demo mode supported
eth1: IEEE standard IBSS ad-hoc mode supported
eth1: WEP supported, 104-bit key
eth1: WPA-PSK supported
eth1: MAC address 00:02:2d:7b:35:cf
eth1: Station name “HERMES I”
eth1: ready

Otra cosa que es de notar es que el driver soporta

  • Modos Station, Ad-hoc y Monitor
  • WEP
  • WPA-PSK (TKIP)

Y el driver NO soporta

  • WPA2
  • WPA-PSK (CCMP)

Saludos

Adjuntos vistos incorrectamente cuando son enviados a gmail usando uuencode

Para todos aquellos que envían correo por la consola el comando uuencode no les será algo extraño, y para aquellos que no sepan, el comando es utilizado para transmitir archivos en formato ASCII, lo cual es ideal para el correo, usándose por ejemplo de la siguiente manera:

uuencode archivo.tar.gz archivo.tar.gz | mail usuario@dominio.tld

El punto es que cuando se envía correos adjuntos de esa manera a cuentas de correo de gmail, este los reconoce incorrectamente, aún cuando clientes de correo como Thunderbird los reconocen bien, esto debido a que uuencode se considera una forma “obsoleta” de enviar correo.

Una solución puede ser la siguiente:

mutt -s "Archivo adjunto" -a archivo.tar.gz usuario@dominio.tld

(Si, es mutt 😐  )

Otra solución, un poco más a pie y arcaica es la siguiente (vista en unix.com):

echo “From: ${direccion_correo_emisor}” > $MSG_FILE
echo “To: ${direccion_correo_destinatario}” >> $MSG_FILE
echo “Subject: ${Titulo_correo}” >> $MSG_FILE
echo “Mime-Version: 1.0” >> $MSG_FILE
echo ‘Content-Type: multipart/mixed; boundary=”GvXjxJ+pjyke8COw”‘ >> $MSG_FILE
echo “Content-Disposition: inline” >> $MSG_FILE
echo “” >> $MSG_FILE
echo “–GvXjxJ+pjyke8COw” >> $MSG_FILE
echo “Content-Type: text/plain” >> $MSG_FILE
echo “Content-Disposition: inline” >> $MSG_FILE
echo “” >> $MSG_FILE
echo “Contenido del correo…..” >> $MSG_FILE
echo “” >> $MSG_FILE
echo “” >> $MSG_FILE
echo “–GvXjxJ+pjyke8COw” >> $MSG_FILE
echo “Content-Type: text/plain” >> $MSG_FILE
echo “Content-Disposition: attachement; filename=${el_archivo_a_adjuntar}” >> $MSG_FILE
echo “” >> $MSG_FILE
echo “” >> $MSG_FILE
cat $el_archivo_a_adjuntar >> $MSG_FILE

cat $MSG_FILE | sendmail -t

Espero les sirvan los tips, saludos

DNS Recursivo, y ataques DDoS a que se refiere?

Antes de verse intimidado por la cantidad exagerada de texto de este post, si usted administra un servidor DNS, debería de leer lo siguiente:

Primero aclararemos que DNS es el acrónimo en inglés para Sistema de Dominio de Nombres, en otras palabras es un medio que nos permite traducir una dirección web a IP y viceversa, por ejemplo linux.org.sv a la IP 68.178.241.185 y la IP 68.178.241.185 a linux.org.sv. Esto se pensó con el propósito de que la navegación en Internet fuera cómoda.

En forma general, existen dos tipos de servidores DNS, que son los servidores recursivos y los servidores autoritativos, y es posible que ambos se ejecuten en la misma máquina.

El autoritativo es un servidor que conoce información acerca de uno o más dominios (lo que normalmente se denominan zonas), por lo general es uno o dos dominios, y no sabe información sobre otros dominios.

El recursivo es un servidor capaz de encontrar la respuesta a cualquier consulta DNS, y puede encontrar información acerca de casi todos los dominios, por ejemplo google.com, linux.org, gentoo.org . Generalmente estos servidores están abiertos a cualquier IP , en otras palabras, pueden ser consultados por cualquier maquina en el mundo.

El problema es que muchas entidades hacen que el mismo servidor actúe tanto como autoritativo como recursivo. Una práctica sana es tenerlos separados, lo cual previene el problema denominado “envenenamiento de cache”.
Si es imposible tenerlos separados, es recomendable que permitan recursión a solo un rango de IPs “confiables”.

Para clasificar la inseguridad de tener un servidor DNS recursivo abierto a internet es comparable a tener un “Open Proxy” en un servidor proxy o un “Open Relay” en un servidor de correos. Simplemente era algo que hasta cierta fecha no fue aprovechado por “mentes siniestras” pero que ahora es aprovechado y utilizado para fines oscuros.

Posibles riesgos de tener un servidor recursivo en Internet
Ser una víctima de ataques de envenenamiento de caché, la cual hace que el servidor afectado almacene información falsa. Dicha información puede ser utilizada para comprometer la seguridad de los clientes que hacen consultas al servidor afectado, por ejemplo redireccionar google.com a un sitio con malware, o redireccionar sitios de bancos con la intención de obtener información confidencial del usuario.

El servidor podría ser ocupado para un ataque DoS distribuido el cual puede tener las siguientes consecuencias:

  • La gran cantidad de consultas DNS recibidas por el servidor y la gran cantidad de respuestas enviadas a la víctima pueden consumir una considerable cantidad de ancho de banda
  • Problemas legales ya que si, por ejemplo, un equipo de un ISP ataca a un cliente, seguramente el cliente lo demandará

Un ejemplo de las consecuencias de la recursividad (Ataque DDoS)

Aquí

En que consiste el ataque? me da curiosidad saber…
Trataré de explicarlo de la manera mas sencilla: con ejemplos.
Para dar un ejemplo, a veces un dominio x recibe respuestas ICMP echo, porque “alguien” modifico los paquetes para que parecieran como si el dominio x hizo la petición ICMP echo, en otras palabras recibimos respuesta de un ping que NUNCA salio de nuestro dominio.
Ahora de otra manera, como los paquetes UDP son fragmentados por los servidores, y UDP puede ser fácilmente modificado su IP de origen, el servidor DNS recibe un paquete grande, que se hace mas grande (técnicamente, mas fragmentos), enviando la respuesta al blanco atacado. Imaginemos muchos DNS recursivos enviando respuestas al “blanco atacado”. Si, eso es una Denegación de servicio distribuida (DDoS).

Si sienten la explicación anterior muy sencilla o vaga, pueden leer http://www.isotf.org/news/DNS-Amplification-Attacks.pdf 🙂

Soluciones al problema

Entonces algunos podrían decirme, y no es esa la intención de un DNS, resolver todos los dominios a todo el mundo?
No, esa es una función de un servidor recursivo, como hemos hablado anteriormente puede ser autoritativo y contener información solamente para un dominio. Lo mas conveniente es que permita la recursividad solamente a un rango de IPs

Yo estoy protegido, porque ocupo Bind en Linux/BSD 🙂
No, la recursión no se refiere a un sistema operativo o software en específico 🙁

Espero lo anterior les haya despertado la curiosidad sobre el tema, saludos

Curioso script de perl

Recientemente vagando en el Internet me hallé el siguiente script de perl con forma de camello:

                                                       #
                                                   sub j(\$){($
                     P,$V)=                      @_;while($$P=~s:^
                 ([()])::x){                    $V+=('('eq$1)?-32:31
           }$V+=ord(  substr(                 $$P,0,1,""))-74} sub a{
          my($I,$K,$  J,$L)=@_               ;$I=int($I*$M/$Z);$K=int(
         $K*$M/$Z);$J=int($J*$M             /$Z);$L=int($L*$M/$Z); $G=$
         J-$I;$F=$L-$K;$E=(abs($          G)>=abs($F))?$G:$F;($E<0) and($
          I,$K)=($J,$L);$E||=.01       ;for($i=0;$i<=abs$E;$i++ ){ $D->{$K
                  +int($i*$F/$E)      }->{$I+int($i*$G/$E)}=1}}sub p{$D={};$
                 Z=$z||.01;map{    $H=$_;$I=$N=j$H;$K=$O=j$H;while($H){$q=ord
                substr($H,0,1,"" );if(42==$q){$J=j$H;$L=j$H}else{$q-=43;$L =$q
              %9;$J=($q-$L)/9;$L=$q-9*$J-4;$J-=4}$J+=$I;$L+=$K;a($I,$K,$J,$ L);
              ($I,$K)=($J,$L)}a($I,$K,$N,$O)}@_;my$T;map{$y=$_;map{ $T.=$D->{$y}
              ->{$_}?$\:' '}(-59..59);$T.="\n"}(-23..23);print"\e[H$T"}$w= eval{
              require Win32::Console::ANSI};$b=$w?'1;7;':"";($j,$u,$s,$t,$a,$n,$o
              ,$h,$c,$k,$p,$e,$r,$l,$C)=split/}/,'Tw*JSK8IAg*PJ[*J@wR}*JR]*QJ[*J'.
               'BA*JQK8I*JC}KUz]BAIJT]*QJ[R?-R[e]\RI'.'}Tn*JQ]wRAI*JDnR8QAU}wT8KT'.
               ']n*JEI*EJR*QJ]*JR*DJ@IQ[}*JSe*JD[n]*JPe*'.'JBI/KI}T8@?PcdnfgVCBRcP'.
                '?ABKV]]}*JWe*JD[n]*JPe*JC?8B*JE};Vq*OJQ/IP['.'wQ}*JWeOe{n*EERk8;'.
                  'J*JC}/U*OJd[OI@*BJ*JXn*J>w]U}CWq*OJc8KJ?O[e]U/T*QJP?}*JSe*JCnTe'.
                   'QIAKJR}*JV]wRAI*J?}T]*RJcJI[\]3;U]Uq*PM[wV]W]WCT*DM*SJ'.  'ZP[Z'.
                      'PZa[\]UKVgogK9K*QJ[\]n[RI@*EH@IddR[Q[]T]T]T3o[dk*JE'.  '[Z\U'.
                        '{T]*JPKTKK]*OJ[QIO[PIQIO[[gUKU\k*JE+J+J5R5AI*EJ00'.  'BCB*'.
                             'DMKKJIR[Q+*EJ0*EK';sub h{$\ = qw(% & @ x)[int    rand
                              4];map{printf  "\e[$b;%dm",int(rand 6)+101-60*   ($w
                               ||0);system(  "cls")if$w ;($A,$S)=    ($_[1],   $
                                _[0]);($M,   @,)= split  '}';for(     $z=256
                                ;$z>0; $z   -=$S){$S*=   $A;p @,}      sleep$_
                                [2];while   ($_[3]&&($    z+=$ S)       <=256){
                                p@,}}("".   "32}7D$j"     ."}AG".       "$u}OG"
                                ."$s}WG"    ."$t",""      ."24}("        ."IJ$a"
                                ."}1G$n"    ."}CO$o"     ."}GG$t"        ."}QC"
                                 ."$h}"      ."^G$e"    ."})IG"          ."$r",
                                 "32}?"       ."H$p}FG$e}QG$r".          "}ZC"
                                 ."$l",          "28}(LC" .""            ."".
                                 "$h}:"           ."J$a}EG".             "$c"
                                 ."}M"             ."C$k}ZG".            "$e"
                                 ."}"             ."dG$r","18"          ."}("
                                ."D;"            ."$C"  )}{h(16         ,1,1,0
                               );h(8,          .98,0,0   );h(16         ,1,1,1)
                               ;h(8.0         ,0.98,0,     1);         redo}###
                             #written                                 060204 by
                           #liverpole                                  @@@@@@@
                        #@@@@@@@@@@@

Si, ES UN SCRIPT DE Perl! y también pueden descargarlo aquí , lo más interesante es ver la salida del comando. Ahora me ha quedado muy claro que perl es facilísimo de interpretar 😐

Habilitando plugin de flash en Liferea+xulrunner

Ahora que Adobe ha sacado a la luz el plugin flash 10 para GNU/Linux 64 bits me he atrevido a probarlo en la laptop primero con Mozilla Firefox y luego con Liferea, un lector de feeds del cual he hablado antes, ya que al utilizar el plugin de flash en 32 bits literalmente cocinaba el CPU.

Cabe destacar que aunque el plugin no es algo superliviano y sigue siendo software privativo, tiene un desempeño más aceptable que las versiones anteriores.

Para leer los artículos Liferea permite utilizar un navegador incrustrado que puede ser Mozilla/Firefox/XulRunner , GtkHTML o Seamonkey, entre otros.

En mi caso ocupo XulRunner porque me permite independizarme de cualquier navegador y para instalar el plugin se hace de la siguiente manera:

En caso tengamos el plugin en nuestro Firefox

# ln -s /usr/lib/mozilla-firefox/plugins/libflashplayer.so /usr/lib/xulrunner/plugins

En caso que no

#wget link

# tar xfz libflashplayer*tar.gz

# cp libflashplayer.so /usr/lib/xulrunner/plugins

Listo, podremos leer aquellos feeds que tengan contenido flash

Desactivando Control + Alt + Backspace en X

Recientemente un usuario de emacs me comentaba que para ellos la combinación de teclas Control Alt Backspace tiene un significado especial, y que normalmente lo deshabilitan. También es útil deshabilitarlo para evitar alguna pérdida de datos al teclear involuntariamente dicha combinación.

El cambio es sencillo, se edita /etc/X11/xorg.conf tal como sigue:

Section "ServerFlags"
   Option "DontZap" "True"
EndSection

Se reinicia X (si deseamos utilizando Ctrl+Alt+Backspace por última vez XD ) y la combinación de tecla queda deshabilitada.

666 Días funcionando

Haciendo una revisión rutinaria a un servidor, me encuentro con lo siguiente:

[root@proxy ~]# uptime
09:19:19 up 666 days, 35 min, 3 users, load average: 0.05, 0.01, 0.00

Aparte de el número 666 que causa un poco de morbo, cabe notar el hecho que ha estado casi dos años funcionando sin necesidad de reiniciar.

Cuánto es el mayor tiempo que han tenido uptime una máquina Linux ??

PD: Linux Rocks

Ascii Art en errores de kernel GNU/Linux @ Sparc

Jugando con una UltraSparc II en GNU/Linux me dio un curioso crash dump:

Oct 15 12:03:54 quetzalcoatl [  253.145378] spitfire_data_access_exception:
SFSR[0000000000801009] SFAR[fffff800be90bf88], going.
Oct 15 12:03:54 quetzalcoatl [  253.145472]               \|/ ____ \|/
Oct 15 12:03:54 quetzalcoatl [  253.145495]               "@'/ .. \`@"
Oct 15 12:03:54 quetzalcoatl [  253.145517]               /_| \__/ |_\
Oct 15 12:03:54 quetzalcoatl [  253.145540]                  \__U_/
Oct 15 12:03:54 quetzalcoatl [  253.145636] emerge(3364): Dax [#1]
Oct 15 12:03:54 quetzalcoatl [  253.145687] TSTATE: 0000004411009606 TPC:
00000000004c3dd0 TNPC: 00000000004c3dd4 Y: 00000000    Not tainted

La imagen de una persona sacandome la lengua en un crash dump no es tan divertida como pensó el desarrollador del kernel…

Bootchart: Graficando el proceso de arranque de GNU/Linux

Recientemente me encontré con una herramienta muy curiosa que muestra de forma gráfica el proceso de arranque de un GNU/Linux denominada Bootchart, la cual realiza su trabajo recolectando información de los procesos durante el arranque y renderizando el resultado a un archivo png, svg (Scalable Vector Graphics) o a un eps (PostScript).

La intención de bootchart es mostrar cuando arrancan los procesos, cuánto tiempo de CPU utilizan, utilización de disco, en otras palabras, una imagen que muestre lo que sucede durante el proceso de arranque y ayude a la posterior depuración/optimización del mismo.

Instalando…

La instalación en Gentoo es sencilla

Desenmascaramos el paquete (en mi caso tengo el keyword amd64, para otros será x86)

# echo “app-benchmarks/bootchart ~amd64” >> /etc/portage/package.keywords

Agregamos la use flaga java para poder generar archivos png

# echo “app-benchmarks/bootchart java” >> /etc/portage/package.use

Instalamos

# emerge app-benchmarks/bootchart

Configurando bootchart

Es necesario agregar init=/sbin/bootchartd al final de la línea del kernel correspondiente, dentro del archivo /boot/grub/menu.lst por ejemplo:

kernel /boot/kernel-2.6.25-gentoo-r7-vostorga-0.33 init=/sbin/bootchartd

Es necesario editar el archivo /etc/conf.d/rc y cambiar

RC_USE_BOOTCHART="yes"

El archivo de configuración /etc/bootchartd.conf está muy bien documentado, pero igualmente las opciones siguientes son posiblemente en las que estaremos más interesados:

#Esta opción nos permite utilizar BSD Accounting el cual nos permite que la visualización de procesos sea más exacta, pero para activarlo necesitamos que la opción CONFIG_BSD_PROCESS_ACCT_V3 (General setup-> BSD Process Accounting-> BSD Process Accounting version 3 file format) esté activada en el Kernel , igualmente bootchart funciona si la dejamos como “no”

PROCESS_ACCOUNTING=”yes”

#Localización del archivo comprimido donde estarán los logs de Bootchart

BOOTLOG_DEST=/var/log/bootchart.tgz

#Determina si se realizará automáticamente el gráfico una vez termine el proceso de arranque

AUTO_RENDER=”yes”

#Determina el formato del gráfico, las opciones disponibles son png, svg y eps

AUTO_RENDER_FORMAT=”png”

#Directorio donde se guardarán los gráficos

AUTO_RENDER_DIR=”/var/log”

Y la prueba……la gráfica

Por ultimo, reiniciamos y obtenemos algo como lo siguiente:

…..47 segundos en mi caso, cuáles son sus tiempos?

PD: No reinicio muchas veces ya que suspendo, pero es divertido debugguear el arrance

PD2: Luego daremos un vistazo al baselayout2+openrc que seguro disminuye el arranque en Gentoo GNU/Linux

Powered by WordPress with GimpStyle Theme design by Horacio Bella.
Entries and comments feeds. Valid XHTML and CSS.