Mostrando entradas con la etiqueta linux. Mostrar todas las entradas
Mostrando entradas con la etiqueta linux. Mostrar todas las entradas

lunes, 10 de mayo de 2010

Script en Bash para conseguir errores 404 dentro de un servidor Web

Escenario:
Tengo mi servidor Web Apache sobre Linux y quiero revisar los errores 404 (página no encontrada) o broken link de los usuarios que acceden a mi servidor.

Solución:
Ejecutar un script mediante el crontab cerca de la media noche que revise el archivo access_log del Apache con el contenido 404 y envie un correo a un destinatario.

Script:
#El objectivo de este script es revisar errores 404 dentro de los logs del WebServer
#para de esta manera evitar "broken links". Alejandro Acosta
#Notese que se ejecuta casi a la media noche para conseguir TODOS los errores 404 del dia
FECHA=`date +"%d/%b/%Y"`
cat /usr/local/apache/logs/access_log | grep $FECHA | grep " 404 " > /tmp/404.txt
#Entra en el if unicamente en caso de conseguir errores 404
if [ $? = "0" ]; then
echo $?
mail -s "Errores 404 encontrados" micorreo@miproveedor.com < /tmp/404.txt
fi
\rm /tmp/404.txt

Crontab:
57 23 * * * /root/scripts/check_logs.sh

miércoles, 14 de abril de 2010

Como capturar el bit recursion desired con tcpdump en un query DNS

Problema: El día de hoy escuchando el Podcast de Mr DNS escuché la idea de tomar el Bit de recursividad (recursion desired) en un paquete DNS. En ese momento me pareció buena idea intentarlo y por ello el presente post. Solución: Lo primero que hice fue hacer una captura y analizarla con Tcpdump y adicionalmente averiguar especificamente como es un paquete de pregunta DNS. Para esto último conseguí el siguiente paquete el cual tomé de: An Illustrated Guide to the Kaminsky DNS Vulnerability En este sentido, me interesa tomar el bit RD cuando se encuentre encendido. Debido a que tcpdump permite obtener el encendido/apagado de los bits pero en octetos hay que darse cuenta que el bit RD es el bit menos significativo del octeto numero 10 dentro del paquete UDP. En otras palabras, en el gráfico anterior cada "linea" tiene 4 octetos (32 bits). Si comenzamos a contar desde el Campo Source Port de UDP hasta el campo Query ID (incluyendo) existen 9 octetos. Por ello los próximos 8 bits son los flags del paquete DNS y el último de estos 8 (de izquierda a derecha) es el RD. En un query standard DNS estos 8 bits generalmente vienen de la manera: 00000001, por ello el comando tcpdump que necesitamos es el siguiente: #tcpdump -i eth0 udp[10] == 1 and port 53 Captura del wireshark: Links importantes: http://www.unixwiz.net/techtips/iguide-kaminsky-dns-vuln.html Mr DNS Podcast
check out this page
LEAF DOMICILE Buy Marijuana Online, CBD Oil,Vape Store, Weed For Sale – Leaf Domicile Delivery Buy Weed Online at Leaf Domicile A wide collection of Weed Buds, Isolates, Hash, Vape Pens, Wax, Cartridges,Seeds, Concentrates, Edibles, CBD Oil for sale Buy Marijuana Online,Buy Weed Online,Weed For Sale,Buy kush online,- https://leafdomicile.com/ THC edibles for sale, order edibles, where can I buy edibles, mail order weed, buy wax online, buy cbd vape oil, pre rolled joints for sale, pre rolled joints for sale, buy kush online, where to buy dabs online, weed dabs for sale, wax for sale,

martes, 30 de marzo de 2010

Clave por defecto de root en Ubuntu

Situacion:
Luego de instalar Ubuntu no puedo entrar como root ni hacer un "su" al usuario. El resto de los usuarios funcionan bien

Explicación:
Luego de la instalación, por defecto Ubuntu viene con el usuario root bloqueado, esto se puede verificar en /etc/shadow y ver el signo de exclamación (!) en el usuario root

Solución:
Existen muchas maneras de solucionar la situación. La más sencilla y funcional:

$sudo -i
#passwd root
Changing password for user root.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.

Luego de esto el usuario root quedará habilitado

Suerte!

jueves, 25 de marzo de 2010

Utilizando DNSTOP

Objetivo:
Utilizar correctamente DNSTOP

Software utilizado:
Distribución Mandriva
DNSTOP (http://www.rpmfind.net/linux/rpm2html/search.php?query=dnstop&submit=Search+...)

Ejecutando dnstop:
La manera de ejecutar dnstop es: comando interface. Por ejemplo

# dnstop {interface-name}
# dnstop eth0
# dnstop wlan0

Una salida tipica es:

Queries: 53 new, 391 total Thu Mar 25 13:04:37 2010

Sources Count %
--------------- --------- ------
200.xx.xx.5 137 35.0
200.xx.xx.2 46 11.8
200.xx.xx.253 24 6.1
190.xx.xx.2 21 5.4
200.xx.xx.140 18 4.6
200.xx.xx.30 12 3.1
200.xx.xx.141 11 2.8
200.xx.xx.118 10 2.6
200.xx.xx.186 10 2.6
10.xx.xx.162 8 2.0
200.xx.xx.138 8 2.0
200.xx.xx.6 6 1.5

Ahora bien, dnstop no solo genera la salida anterior sino que puede generar MUCHA más información, todo es cuestión de saberlo utilizar.
Por ejemplo, puedes ejecutar dnstop con el siguiente comando:
#dnstop -l 3 eth1

Durante la ejecución presiona el numero "1" o "2" o "3". Podrás ver hasta 3 niveles de resolución de nombres y así saber que nombres generalmente resuelven tus clientes.

Otra opción muy interesante es el tipo de query sobre el DNS Server (A, AAAA, PTR, etc). Para ello durante la ejecución presiona "t".

Opciones típicas de dnstop:

 s - Sources list
d - Destinations list
t - Query types
o - Opcodes
r - Rcodes
1 - 1st level Query Names ! - with Sources
2 - 2nd level Query Names @ - with Sources
3 - 3rd level Query Names # - with Sources
4 - 4th level Query Names $ - with Sources
5 - 5th level Query Names % - with Sources
6 - 6th level Query Names ^ - with Sources
7 - 7th level Query Names & - with Sources
8 - 8th level Query Names * - with Sources
9 - 9th level Query Names ( - with Sources
^R - Reset counters
^X - Exit

? - this

Links:
Este articulo es una traducción y adaptación de experiencia propia de: http://www.cyberciti.biz/faq/dnstop-monitor-bind-dns-server-dns-network-traffic-from-a-shell-prompt/

sábado, 6 de marzo de 2010

Wireless en Linux para Compaq Presario V6000

Objetivo:
La Compaq presario V6000 en su tarjeta WiFi viene con el chipset BCM4311. Hasta ahora nunca he instalado una distribucion Linux la cual me reconozca dicha tarjeta luego de la instalacion del sistema operativo. Por ello les dejo este pequeno resumen. En mi caso utilice Mandriva 2010 kernel 2.6.31.

Archivos necesarios:

b43-fwcutter-012-1mdv2010.0.x86_64.rpm
broadcom-wl-4.150.10.5.tar.bz2

Procedimiento:

1) Asegurarse el chipset de la tarjeta wireless:

lspci -vnn | grep -i wire

2) export FIRMWARE_INSTALL_DIR="/lib/firmware"

3) tar xjf broadcom-wl-4.80.53.0.tar.bz2
4) cd broadcom-wl-4.80.53.0/kmod
5) sudo ../../b43-fwcutter-012/b43-fwcutter -w "$FIRMWARE_INSTALL_DIR" wl_apsta.o

Probablemente necesites reiniciar, o realizar un /etc/init.d/network stop/start. Si estas en la interfaz grafica puedes ir a "Configure your computer --- Network & Internet --- Set up a new network interface ---- Wireless"

La interfaz sera reconocida como wlan0 pero recuerda que puede variar

Links relevantes
- rpmfind
- Linux Wireless

Eso es todo!

Como medir el ancho de banda de un enlace

Introduccion:
En repetidas oportunidades nos vemos en la necesidad de medir el ancho de banda de algun enlace, ya sea el mismo una red LAN, WAN, MAN utilizando satelite, microondas, fibra, etc y no sabemos como.
Para los conocedores del area tambien es comun que la gente de transmision nos indiquen que el enlace a nivel de capa 2 esta perfecto que no hay errores ni perdidas y que las pruebas de BERT salieron sin errores. Sin embargo al momento de probar dicho enlace con un router y transportando IP nos vemos con inconvenientes. Ahora bien, algo que es muy cierto es que el cliente tiene la ultima palabra, si el cliente dice que ve errores y/o que la aplicacion no funciona hay que revisar.


Objetivo
:
Vamos a medir el ancho de banda y calidad de un enlace. Cuando me refiero a enlace puede ser la comunicacion en un enlace WAN, entre dos equipos en una misma LAN. Para estas pruebas el medio fisico (wireless, satelite, fibra, microondas) es irrelevante.

Software necesario:
Linux y/o Windows
Iperf

Como hacer el estudio:
Vamos a basar nuestro estudio en el programa Iperf. Wikipedia en su pagina en Ingles define Iperf como un programa moderno para probar redes que es capaz de crear stream TCP y UDP y mide el ancho de banda de la red donde se ejecutan. Iperf fue realizado en C++
Iperf es un programa cliente - servidor por ello es necesario instalar el programa en al menos dos dispositivos. El mismo programa funciona tanto cliente como servidor. Su comportamiento varia segun las opciones que utilicemos al momento de ejecutarlo.
Una ventaja de Iperf es que hacemos la prueba en capa 3, es decir en IP, con Iperf podemos probar TCP y UDP y con distintos programas de paquete. Esto es sensacional.

Procedimiento:
Es necesario dos equipos donde uno es cliente y el otro sera el servidor. Por default Iperf mide el ancho de banda desde el cliente al servidor (sin embargo existe una opcion de medicion bi-direccional)

Ejemplos utiles:

1) Prueba mas basica. Opciones por default.
Lado server:

[root@monitor-2 root]# iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

Lado cliente:

[root@pemon ~]# iperf -c 10.1.1.1
------------------------------------------------------------
Client connecting to 10.1.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 3] local 10.1.1.2 port 51096 connected with 10.1.1.2 port 5001
[ 3] 0.0-10.0 sec 84.4 MBytes 70.8 Mbits/sec

2) Vamos a probar un Megabit entre el cliente y el servidor durante 15 segundo en paquetes UDP.
Lado server:
iperf -s -u

Lado cliente
[root@pemon ~]# iperf -c 10.1.1.1. -t 15 -u

3) Realizar una prueba de 2 Megabits de envio simultaneo entre el cliente y el servidor de paquetes UDP por 15 segundos
Lado server:
iperf -s -u

Lado cliente
[root@pemon ~]# iperf -c 10.1.1.1 -t 15 -u -d -b 2000000

{SUPRIMI UN POCO DE LA SALIDA}
[ ID] Interval Transfer Bandwidth Jitter Lost/Total Datagrams
[ 4] 0.0-15.0 sec 3.58 MBytes 2.00 Mbits/sec 0.180 ms 0/ 2553 (0%)
[ 3] 0.0-15.0 sec 3.58 MBytes 2.00 Mbits/sec 0.011 ms 0/ 2553 (0%)

Vamos a estudiar rapidamente el comando del cliente:
* con el -t 15 le indicamos 15 segundos
* -u que fuese UDP
* -d que fuese dual (envio y recepcion a la misma vez)
* -b 2000000 = 2 Mbits

Vamos a estudiar la salida tambien:
El intervalo fueron 15 segundos, se transfirio 3.58 Megabytes, el ancho de banda son 2 Mbits, el jitter es de 0.180 ms, se perdieron 0 datagramas de 2553 datagramas lo que representa 0 % de perdida

Recomendaciones:
Personalmente me agrada hacer mis estudios con Iperf utilizando UDP por diversas razones:
- Puedo indicar el ancho de banda
- No tengo inconvenientes con el Windows Size y/o perdida de algun acknowledge me baje drasticamente el Ancho de Banda
- Con la prueba de UDP yo mismo puedo calcular el impacto de las perdida de paquetes (imaginen la diferencia de perdida de paquetes (o errados) entre una red Wireless y una red cableada..

Salida del comado iperf --help para su referencia:

[root@monitor-2 root]# iperf --help
Usage: iperf [-s|-c host] [options]
iperf [-h|--help] [-v|--version]

Client/Server:
-f, --format [kmKM] format to report: Kbits, Mbits, KBytes, MBytes
-i, --interval # seconds between periodic bandwidth reports
-l, --len #[KM] length of buffer to read or write (default 8 KB)
-m, --print_mss print TCP maximum segment size (MTU - TCP/IP header)
-p, --port # server port to listen on/connect to
-u, --udp use UDP rather than TCP
-w, --window #[KM] TCP window size (socket buffer size)
-B, --bind bind to , an interface or multicast address
-C, --compatibility for use with older versions does not sent extra msgs
-M, --mss # set TCP maximum segment size (MTU - 40 bytes)
-N, --nodelay set TCP no delay, disabling Nagle's Algorithm
-V, --IPv6Version Set the domain to IPv6

Server specific:
-s, --server run in server mode
-D, --daemon run the server as a daemon

Client specific:
-b, --bandwidth #[KM] for UDP, bandwidth to send at in bits/sec
(default 1 Mbit/sec, implies -u)
-c, --client run in client mode, connecting to
-d, --dualtest Do a bidirectional test simultaneously
-n, --num #[KM] number of bytes to transmit (instead of -t)
-r, --tradeoff Do a bidirectional test individually
-t, --time # time in seconds to transmit for (default 10 secs)
-F, --fileinput input the data to be transmitted from a file
-I, --stdin input the data to be transmitted from stdin
-L, --listenport # port to recieve bidirectional tests back on
-P, --parallel # number of parallel client threads to run
-T, --ttl # time-to-live, for multicast (default 1)

Miscellaneous:
-h, --help print this message and quit
-v, --version print version information and quit

[KM] Indicates options that support a K or M suffix for kilo- or mega-

The TCP window size option can be set by the environment variable
TCP_WINDOW_SIZE. Most other options can be set by an environment variable
IPERF_, such as IPERF_BANDWIDTH.

Report bugs to


Links utiles:
http://www.noc.ucf.edu/Tools/Iperf/
http://sourceforge.net/projects/iperf/
http://en.wikipedia.org/wiki/Iperf

lunes, 1 de marzo de 2010

Comando snmpget para tomar tabla arp de Router o Switch Cisco

Objetivo: Tomar por snmp la tabla ARP de un router Cisco Solución: El OID para tomar la tabla arp del router Cisco es: .1.3.6.1.2.1.17.4.3.1.1 sin embargo para poder consultar toda la tabla arp es conveniente hacer un snmpwalk de la siguiente manera: Con Linux el siguiente comando es suficiente: snmpwalk 192.168.127.129 -c public .1.3.6.1.2.1.17.4.3.1.1 La salida del comando es por stdout y por ello podemos luego realizar algún tipo de filtro luego de pasarlo por un pipe de manera sencilla. Por ejemplo para buscar una MAC que sabemos que contiene parte del string 51 AB podemos hacer lo siguiente: snmpwalk 192.168.127.129 -c public .1.3.6.1.2.1.17.4.3.1.1 | grep "51 AB" Suerte!

martes, 23 de febrero de 2010

Realizar un ping en un equipo Cisco con SNMP. Script en bash

Objetivo:
Desde un equipo con Linux indicarle a un Routero LAN Switch Cisco que realice un ping a un destino

Motivo:
Pueden existir diversos motivos para realizar la tarea mencionada. Por ejemplo en este momento necesito revisar si en la tabla arp de un equipo se encuentra una MAC en especifico y no tengo acceso desde mi NMS.

Software necesario:
net-snmp
snmp-devel

Configuración del router Cisco:
Para llevar a cabo dicha tarea es necesario tener acceso RW vía SNMP al router. Por ejemplo en modo configuracion:
#snmp-server community acostanetwork RW

Script en Linux:
#!/bin/sh
###### We've chosen 333 at random. 333 will be the row instance to use for this particular
###### ping experiment. After the ping, the row will be deleted.
###### This keeps the table clean. Router_Source is the dns name of the device we are
###### working with, and public is its RW community string. The values for
###### ciscoPingEntryStatus status are as follows (see Ping MIB):

###### 1 - active
###### 2 - notInService
###### 3 - notReady
###### 4 - createAndGo
###### 5 - createAndWait
###### 6 - destroy

#DECLARACION DE LAS VARIABLES
COM="epale" #SNMP Community name
PINGER_ROUTER="10.3.4.5"
IP_TO_PING="0A 00 00 01" #The IP address to ping should be define in HEX
PACKET_COUNT=20
PACKET_SIZE=100

###### We will clear out any previous entries by setting ciscoPingEntryStatus = 6 (destroy)

snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.16.333 integer 6
###### We start building the row by setting ciscoPingEntryStatus = 5 (createAndWait)
echo

snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.16.333 integer 5

echo
echo "###### Now let's set the characteristics of the ping #######"

###### Only the first three sets below are REQUIRED. The rest have default
###### values.

#Set ciscoPingEntryOwner = any_name
snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.15.333 s anyname

#Set ciscoPingProtocol = 1 = ip (see CISCO-TC-V1SMI.my CiscoNetworkProtocol)
snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.2.333 i 1

#Set ciscoPingAddress = #.#.#.#--take Remote_Dest's ip & convert each octet to hex
snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.3.333 x "$IP_TO_PING"
#Set the packet count to 20 (ciscoPingPacketCount)
snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.4.333 i $PACKET_COUNT

#Set the packetsize to 100 (ciscoPingPacketSize)
snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.5.333 i $PACKET_SIZ

echo
echo "##### Now let's verify that the ping is ready to go and launch it #######"

#Get ciscoPingEntryStatus and make sure it is now equal to 2. This means
# notInService which indicates that we're ready to go.

snmpget -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.16.333

# Set ciscoPingEntryStatus = 1 to tell it to activate.

snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.16.333 integer 1

#Let's wait two seconds before looking the results
sleep 2

echo
echo "##### Let's look at the results. #####"

snmpwalk -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1

echo

echo "##### Now that we've gotten the results, let's destroy the row #####"
snmpset -c $COM $PINGER_ROUTER .1.3.6.1.4.1.9.9.16.1.1.1.16.333 integer 6



Funcionamiento:
- Declarar las variables de manera correcta al comienzo del script
- Notese que existe un sleep en el script. Este sleep sirve para esperar 2 segundos antes de continuar a ver los resultados. Es importante debido a que si se ejecuta el script sin la pausa el router probablemente no tendrá tiempo de tener los resultados.
- Recomiendo (pero no es necesario) instalar los MIBs ubicados en: http://tools.cisco.com/Support/SNMP/do/BrowseMIB.do?local=en&mibName=CISCO-PING-MIB

Ejemplo de resultado (con MIBs compilados):
CISCO-PING-MIB::ciscoPingProtocol.333 1
CISCO-PING-MIB::ciscoPingAddress.333 "0A 00 00 01 "
CISCO-PING-MIB::ciscoPingPacketCount.333 20
CISCO-PING-MIB::ciscoPingPacketSize.333 100
CISCO-PING-MIB::ciscoPingPacketTimeout.333 2000
CISCO-PING-MIB::ciscoPingDelay.333 0
CISCO-PING-MIB::ciscoPingTrapOnCompletion.333 2
CISCO-PING-MIB::ciscoPingSentPackets.333 20
CISCO-PING-MIB::ciscoPingReceivedPackets.333 20
CISCO-PING-MIB::ciscoPingMinRtt.333 1
CISCO-PING-MIB::ciscoPingAvgRtt.333 1
CISCO-PING-MIB::ciscoPingMaxRtt.333 1
CISCO-PING-MIB::ciscoPingCompleted.333 1
CISCO-PING-MIB::ciscoPingEntryOwner.333 "anyname"
CISCO-PING-MIB::ciscoPingEntryStatus.333 1
CISCO-PING-MIB::ciscoPingVrfName.333 ""

He colocado en negrillas e itálicas algunos valores importantes

Link importantes:


Espero sea de tu utilidad, suerte,

Compilar MIBs en Linux. Paso a Paso

Objetivo:
Instalar MIBs en Linux. En el presente caso utilizaremos unos MIBs de Cisco sin embargo el procedimiento es el mismo para cualquier otro MIBs.

Software necesario:
Necesitamos instalar net-snmp en nuestro equipo Linux. En mi caso con Mandriva:
urpmi snmp-devel

Tambien vamos a necesitar la linea devel de net-snmp:
urpmi lib64net-snmp-devel


y


rpm-build, es decir,
urpmi rpm-build

Procedimiento:
1) Averiguar donde SNMP almacena los repositorios MIBS:
net-snmp-config --default-mibdirs

2) Bajar los MIBS que queremos implementar. En este caso hay que tener mucho cuidado con los MIBS bajados en Internet, es importante que sean archivos de texto y que en la parte superior solo tengan comentarios y luego (como primera linea válida) contenga algo similar a: CISCO-RHINO-MIB DEFINITIONS ::= BEGIN" y la última linea debe decir END.
En el siguiente ejemplo bajaremos los siguientes MIBs:
ftp://ftp.cisco.com/pub/mibs/v2/CISCO-RHINO-MIB.my
ftp://ftp.cisco.com/pub/mibs/v2/CISCO-SMI.my

3) Copiar los MIBS en alguno de los directorios resultantes de: net-snmp-config --default-mibdirs
Por ejemplo:

cp /tmp/CISCO-*.my /usr/share/snmp/mibs

4) Ubicar el archivo de configuración global para snmp (no snmpd!)
Para mandriva: /etc/snmp/snmp.local.conf y agregar al final del archivo las siguientes lineas:

mibs +CISCO-RHINO-MIB
mibs +CISCO-SMI

5) Probar que los MIBs recien instalados funcionen:

[root@localhost ~]# snmptranslate -IR -On ciscoLS1010ChassisFanLed
.1.3.6.1.4.1.9.5.11.1.1.12

Comentarios:
Existe más de una manera de realizar la compilación de los MIBs en Linux, sin embargo yo solo quise mostrar una manera práctica, rápida y funcional de como realizar la tarea.

Links importantes:
El articulo arriba descrito es la suma de mi experiencia y de la traducción y resumen del articulo: http://www.net-snmp.org/wiki/index.php/TUT:Using_and_loading_MIBS

lunes, 22 de febrero de 2010

Realizar estudios de performance sobre un DNS Server

INTRODUCCION:

Recientemente tuve la necesidad de realizar algún estudio sobre el funcionamiento de dos servidores DNS los cuales soy responsable por su administración. Mis dudas
eran relacionadas al performance de los servidores.
En el mundo de los DNS el performance se mide de dos maneras:
* Throughput (numero de queries por segundo que el DNS Server es capaz de manejar)
* Latencia (tiempo de resolución de los queries)

En base a lo anterior uno mismo puede contruir unos scripts y apoyandonos en el comando DIG obtener gran información. Sin embargo durante mi investigación y
a través de una lista conseguí dos herramientas que pueden realizar un excelente estudio: dnsperf y resperf (http://www.nominum.com/services/measurement_tools.php)

OBJETIVO
Realizar y evaluar el performance de un DNS Server

SOFTWARE NECESARIO:
En mi caso hice todas las pruebas sobre un DNS Server en mandriva las herramientas sobre mandriva.
Software adicional: dnsperf y resperf. Se puede conseguir: http://www.nominum.com/services/measurement_tools.php
GNUplot

INSTALACION

wget ftp://ftp.nominum.com/pub/nominum/dnsperf/1.0.1.0/dnsperf-1.0.1.0-1-rhel-5-i386.tar.gz
tar -zxvf dnsperf-1.0.1.0-1-rhel-5-i386.tar.gz
cd dnsperf-1.0.1.0-1
rpm -ivh dnsperf-1.0.1.0-1.i386.rpm
urpmi gnuplot (MUY RECOMENDADO para generar unas gráficas más adelantes)

Los archivos binarios quedaran instalados en:
/usr/local/nom/bin

DOCUMENTACION:
Luego de la instalación del paquete existe una excelente documentación en formato pdf ubicada en:

/usr/local/nom/doc/dnsperf


FUNCIONAMIENTO:
En fin, basicamente lo que ambos programas hacen es tomar una enorme lista (un archivo de texto) donde existen miles de dominios separados por el tipo de query (A, AAAA, PTR, TXT, etc), lo envia a un servidor DNS (indicado por linea de comando) y luego empieza a recabar información para finalmente ofrecer un resumen de los resultados.
El archivo de texto puede ser editado, cambiado, modificado, etc por uno mismo sin inconveniente (archivo original: queryfile-example-100thousand).

EJEMPLOS:
Vamos a nombrar dos diferentes comandos con los cuales podemos hacer una evaluación. Recomiendo ampliamente leer la documentación oficial antes de proseguir. Estas herramientas consumen alto procesamiento de CPU, consumo de memoria y ancho de banda. Es muy sencillo saturar un servidor y dejarlo fuera de linea con estas herramientas. Adicionalmente hay que tener mucho cuidado con diversos firewalls que pueden encontrarse
en el medio entre el DNS Server y el cliente que ejecuta la aplicación.
Aquí van los ejemplos:

Comando 1: resperf
  • Ejemplo 1-1:
Query de 100000 consultas al DNS Server de localhost con un máximo de 100 consultas por segundo:

./resperf -s 127.0.0.1 -d queryfile-example-100thousand.orig -m 100

Ejemplo de la salida:

DNS Resolution Performance Testing Tool

Nominum Version 1.0.1.0

[Status] Sending
[Status] Waiting for more responses
^C
[root@localhost bin]# ./resperf -s 127.0.0.1 -d queryfile-example-100thousand -m 100

DNS Resolution Performance Testing Tool

Nominum Version 1.0.1.0

[Status] Sending
[Status] Waiting for more responses
[Status] Testing complete

Statistics:

Queries sent: 2999
Queries completed: 2985
Queries lost: 14
Ran for: 100.000002 seconds
Maximum throughput: 98.000000 qps
Lost at that point: 2.00%



  • Ejemplo 1-2:
Query de 100000 consultas al DNS Server de localhost con un máximo de 10 consultas por segundo pero con un reporte en una página Web:

./resperf-report -s 127.0.0.1 -d queryfile-example-100thousand.orig -m 10
Ejemplo de la página Web:




  • Ejemplo 1-3:
Query de 100000 consultas al DNS Server de localhost con un máximo de 100000 consultas por segundo pero con un reporte en una página Web:
./resperf-report -s 127.0.0.1 -d queryfile-example-100thousand.orig


Comando 2: dnsperf

Ejemplo 2-1:
Ejecutar 3 queries maximos al servidor localhost con un histograma de 20 por 10 segundos:

./dnsperf -d ../examples/dnsperf/queryfile-example-100thousand -q 3 -H 20 -l 10 -s 127.0.0.1

Salida del comando anterior:

[root@localhost bin]# ./dnsperf -d queryfile-example-100thousand -q 10 -H20 -l 10

DNS Performance Testing Tool

Nominum Version 1.0.1.0

[Status] Processing input data
[Status] Sending queries (to 127.0.0.1)
[Status] Testing complete


Statistics:

Parse input file: multiple times
Run time limit: 10 seconds
Ran through file: 144 times

Queries sent: 870 queries
Queries completed: 870 queries
Queries lost: 0 queries

Avg request size: 37 bytes
Avg response size: 161 bytes

Percentage completed: 100.00%
Percentage lost: 0.00%

Started at: Mon Feb 22 18:17:43 2010
Finished at: Mon Feb 22 18:17:53 2010
Ran for: 10.105866 seconds

Queries per second: 86.088614 qps

Latency: Min: 0.000284 s; Max: 1.121552 s; Avg: 0.111007 s; StdDev: 0.169328

Response latency distribution (total 870 responses):

Latency Success Fail |
<>= 1.000s 8 0 |#

Legend:

##### = success responses (RCODE was NOERROR or NXDOMAIN)
----- = failure responses (any other RCODE)


Ejemplo 2-2:

Ejecutar 20 queries maximos al servidor localhost con un histograma de 4 por 20 segundos con una cantidad máxima de 25 queries por segundo:
./dnsperf -d queryfile-example-100thousand -q 20 -H4 -l 20 -Q 25

Suerte, espero sea de tu utilidad

lunes, 25 de enero de 2010

Como unir varios archivos mp3 en uno solo. Linux

Caso:
Tengo varios archivos MP3 en Linux y deseo unirlos en uno solo

Solución:
Buscando en Internet conseguiremos que efectivamente se pueden unir/concatenar varios archivos MP3 en uno solo solo haciendo lo siguiente:

#cat archivo1.mp3 archivo2.mp3 archivo3.mp3 >> album.mp3

Lo anterior efectivamente funciona, sin embargo, esa no es la mejor manera de hacerlo. Recordemos que cada archivo binario (como un mp3) tiene una cabecera en el archivo que es quien realmente identifica el tipo de archivo, de igual manera contiene información extra (en el caso de los mp3 id3v2 tags). Por ello, al realizar el cat, quedará información de cabecera dentro del archivo!.., no tiene sentido. Adicionalmente, el método del cat puede traer algunos inconvenientes con algunos reproductores e incluso agregar algún tipo de ruido innecesario.

Por ello, la mejor manera de realizar la unión es utilizar la herramienta mp3wrap que hace especificamente la unión de los archivos.

Software instalado:
mpgtx
id3v2
mp3wrap-0.5-2.i586.rpm
id3lib

Procedimiento:

#mp3wrap archivo1.mp3 archivo2.mp3 archivoN.mp3

Ejemplo:
#mp3wrap -v album.mp3 1.mp3 2.mp3 3.mp3
Mp3Wrap Version 0.5 (2003/Jan/16). See README and COPYING for more!
Written and copyrights by Matteo Trotta -
THIS SOFTWARE COMES WITH ABSOLUTELY NO WARRANTY! USE AT YOUR OWN RISK!

33 % --> Wrapping 1.mp3 ... OK
66 % --> Wrapping 2.mp3 ... OK
100 % --> Wrapping 3.mp3 ... OK

Calculating CRC, please wait... OK

album_MP3WRAP.mp3 has been created successfully!
Use mp3splt to dewrap file; download at http://mp3splt.sourceforge.net!

Tu pre-album queda con el nombre:
album_MP3WRAP.mp3

Posteriormente se puede realizar:
#ffmpeg -i album_MP3WRAP.mp3 -acodec copy all.mp3
y
#id3cp 1.mp3 all.mp3

Parsing 1.mp3: done. Copying to all.mp3: done

y el album finalmente queda con el nombre all.mp3

En mp3wrap personalmente me gusta utilizar la opción -v porque me da más información y es más sencilla para descubrir algún problema y/o inconveniente.
mp3wrap también tiene otra opción útil que permite realizar appends a albunes existentes. El flag es -l

Espero te sea útil esta información

Link recomendados:
http://lyncd.com/2009/02/how-to-merge-mp3-files/
http://bbs.archlinux.org/viewtopic.php?id=63685

Colocar subtitulos a una pelicula

Caso:
En estos dias tenia una pelicula .avi y necesitaba colocarles subtitulos, en realidad no estaba familiarizado con el tema y por ello tuve que investigar un poco. Es muy facil, aqui el resultado. De hecho solo voy a indicar lo que necesitas (y algunos URLs donde conseguirlo), no voy a entrar en detalle de como usar el software ni mucho menos de como instalarlo

Situacion:
Tengo una pelicula y deseo colocarles subtitulos

Solucion:
La solucion es muy sencilla. Necesitamos:

1) Primero la pelicula en formato .avi, mpeg, asf, wmv, ogg
2) Los subtitulos en formato .srt (un buen sitio para conseguir subtitulos es: http://www.addic7ed.com/)
3) El programa que hace "la magia" de colocar los subtitulos es DEVEDE. Se puede conseguir para Windows y Linux, muy estable en ambos sistemas operativos. Devede para Windows, DVD para Linux. DEVEDE es una aplicacion 100% gratuita y de libre uso
4) Listo!.., ahora solo hay que instalar DEVEDE

Recomendación:
Si vas a colocar subtitulos en español utiliza el charset UTF-8, sino vas a tener inconvenientes con las tildes y otros caracteres

miércoles, 2 de diciembre de 2009

Bash Watchdog Script

Situación:
En algunas oportunidades es necesario tener un script que levante algún servicio/proceso cuando el mismo falla. Es decir, supongamos que tenemos un servidor web, mail, dns que falla, es necesario tener un script que sea capaz de levantarlo cuando sea necesario de manera automatica

Solución:
En mi caso, tengo el servicio snmpd que por alguna razón falla constantemente. Debido a que necesito tener el mismo levantando construí el siguiente script que luego coloqué en un crontab.

Ejemplo del SCRIPT:
#!/bin/bash
#FILENAME= /root/SCRIPTS/snmpd.Watchdog
# Reiniciar SNMPD cuando el servicio no se encuentra levantado
RESTART="/etc/init.d/snmpd restart"
#path to pgrep command
PGREP="/usr/bin/pgrep"
# Nombre del servicio (en en este caso snmpd)
SNMPD="snmpd"
# obtener el numero del PID del proceso
$PGREP ${SNMPD}
if [ $? -ne 0 ] # Si snmpd no esta corriendo
then
# reiniciar snmpd
$RESTART
fi

Ejemplo del crontab:
Cada minutos:
* * * * * /root/SCRIPTS/snmpd.Watchdog
Cada 5 minutos
*/5 * * * * /root/SCRIPTS/snmpd.Watchdog

Mas información:
El script anterior es basado en el que se encuentra en:
http://zedomax.com/blog/2008/07/28/linux-server-hack-how-to-setup-a-shell-script-to-auto-restart-apache-httpd-server/

miércoles, 25 de noviembre de 2009

Implementar DNSSEC sobre Linux. Solo resolver

*** POST OBSOLETO ****
*** FAVOR LEER LA VERSION 2 ***


Problema:

Montar un servidor DNS solo como resolver, es decir, sin funcionar como servidor autorizado para ciertas zonas


Que se necesita:

- Servidor Linux
- Bind 9.3 o superior (en mi caso utilicé 9.6)


Alcance

- Vamos a validar todo lo que sea .br
- Vamos a validar todo lo que sea udp53.org

Procedimiento:
1) Instalar bind en un servidor Linux. En mi caso utilizo Mandriva y con un sencillo urpmi bind fue suficiente. Es importante destacar que para que DNSSEC ande se necesita tener instalado openssl y sus librerias. Actualmente la inmensa mayoría de las distribuciones ya viene con openssl

2) En /var/named.conf se necesita:
options {
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside "." trust-anchor dlv.isc.org.;
};

La primera opción permite dnssec para las zonas autorizadas y la segunda opción para realizar recursividad utilizando DNSSEC. La tercera opción la veremos con detalle más adelante.


3) Es necesario obtener las llaves públicas de los registros .br y udp53.org (que son los dominios que queremos verificar en este momento). Para ello:

[root@localhost etc]# dig br DNSKEY

{...}

br. 21502 IN DNSKEY 257 3 5 AwEAAdDoVnG9CyHbPUL2rTnE22uN66gQCrUW5W0NTXJBNmpZXP27w7PM Npyw3XCFQWP/XsT0pdzeEGJ400kdbbPqXr2lnmEtWMjj3Z/ejR8mZbJ/ 6OWJQ0k/2YOyo6Tiab1NGbGfs513y6dy1hOFpz+peZzGsCmcaCsTAv+D P/wmm+hNx94QqhVx0bmFUiCVUFKU3TS1GP415eykXvYDjNpy6AM=

{...}


[root@localhost etc]# dig udp53.org DNSKEY

{...}

udp53.org. 5882 IN DNSKEY 257 3 5 BEAAAAMKj6IGc8E/bBW7i6zDGgnKUXwamtR9PlFiuTg0/oa4i1okCg4J vLEq7EVpxdDi4yc1Ym9kGTUngZ59iVleoL8O5Zq+oPAPCYSbtn+ASsL6 0iCp4PJ6LV0A9d2NE/BetXO/Re/NRsSG18yFZCWGfX8mBnb2zG7Mb+0t pUuRsu9dBN31ljsbTUGmkDbqEw2xaDAUXqDGD5+pgN0NGqcPg0/HzFv9

{...}

4) Necesitamos las llaves DLV que pueden ser conseguidas en la pagina de la ISC en:
http://ftp.isc.org/www/dlv/dlv.isc.org.key.
Las llaves DLV ((DNSSEC Look-aside Validation) son un recurso adicional utilizado en aquellos servidores DNSSEC con recursividad. La idea es apoyar al conglomerado de internet en las primeras etapas de DNSSEC en el mundo

5) Vamos a copiar esas llaves obtenidas en el archivo named.conf bajo la sección trusted-keys (si no existe dicha sección en el archivo la crearemos). Por ejemplo

trusted-keys {
"br." 257 3 5
"AwEAAdDoVnG9CyHbPUL2rTnE22uN66gQCrUW5W0NTXJB
NmpZXP27w7PMNpyw3XCFQWP/XsT0pdzeEGJ400kdbbPq
Xr2lnmEtWMjj3Z/ejR8mZbJ/6OWJQ0k/2YOyo6Tiab1N
GbGfs513y6dy1hOFpz+peZzGsCmcaCsTAv+DP/wmm+hN
x94QqhVx0bmFUiCVUFKU3TS1GP415eykXvYDjNpy6AM=";

"dlv.isc.org." 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2 brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+ 1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5 ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt TDN0YUuWrBNh";

"udp53.org." 257 3 5 "BEAAAAMKj6IGc8E/bBW7i6zDGgnKUXwamtR9PlFiuTg0/oa4i1okCg4J vLEq7EVpxdDi4yc1Ym9kGTUngZ59iVleoL8O5Zq+oPAPCYSbtn+ASsL6 0iCp4PJ6LV0A9d2NE/BetXO/Re/NRsSG18yFZCWGfX8mBnb2zG7Mb+0t pUuRsu9dBN31ljsbTUGmkDbqEw2xaDAUXqDGD5+pgN0NGqcPg0/HzFv9";

};

6) Listo!!., reiniciar el servidor named. Por ejmplo:
/etc/init.d/named restart (o con rndc, como tu desees)

Revisar que se encuentre funcionando bien

La mejor opción es utilizar el famoso comando dig y chequear el flag AD en al respuesta. Por ejemplo:

RESPUESTA SIN DNSSEC

[root@localhost etc]# dig +dnssec registro.br

; <<>> DiG 9.6.0-P1 <<>> +dnssec registro.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43771 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 5, ADDITIONAL: 5




RESPUESTA CON DNSSEC

[root@localhost etc]# dig +dnssec registro.br

; <<>> DiG 9.6.0-P1 <<>> +dnssec registro.br
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1063 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 6, ADDITIONAL: 1



Más información:

* www.isc.org/files/DNSSEC_in_6_minutes.pdf
* http://registro.br/info/dnssec.html

viernes, 30 de octubre de 2009

Linux. Utilizar celular como modem para conectarse a Internet

Necesidad:
Utilizar el celular para conectarse a Internet. En mi caso utilicé el motorola W6 y Linux Mandriva

Que se necesita:
- Celular motorola
- Cable de conexión telefono -- PC

Procedimiento:
1) Instalar wvdial para maneja y discado del modem:

#urpmi wvdial

2) Identificar el nombre con el que Linux reconoce el modem. Para ello, ejecutaremos:

# tail -f /var/log/message

y simultaneamente conectaremos el telefono al PC/Laptop. Conseguiremos un nombre como /dev/ttyACM0

3) Verificar que el device se haya creado correctamente:

#ls -lh /dev/ttyACM0

4) Recomiendo crear un link simbolico entre /dev/modem y /dev/ttyACM0:

#ln -s /dev/ttyACM0 /dev/modem

5) Posteriormente hay que configurar el wvdial (ya estamos casi listos!). Para ello edita /etc/wvdial.conf similar a:

[Dialer Defaults]
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2
Abort on No Dialtone = off
Password = ''
Check Def Route = off
Phone = *99#
Idle Seconds = 0
Abort on Busy = off
;Minimize = on
Modem Type = Analog Modem
Stupid Mode = on
Baud = 115200
Auto DNS = on
Dial Command = ATM1L3DT
Auto Reconnect = off
Ask Password = off
Init = ATX3
ISDN = off
Dial Attempts = 1
Username = ''
;Dock = on
Carrier Check = on
Init3 = AT+CGDCONT=1,"IP","gprsweb.digitel.ve"
Modem = /dev/ttyACM0

La configuración anterior sirve perfectamente para Digitel en Venezuela. Las partes más importantes corresponden a los DNS, baud rate y el APN de digitel (gprsweb.digitel.ve).

6) Por último, ejecuta wvdial desde la consola:

#wvdial

Debes obtener algo como:

[root@localhost etc]# wvdial
--> WvDial: Internet dialer version 1.60
--> Cannot get information for serial port.
--> Initializing modem.
--> Sending: ATX3
ATX3
OK
--> Sending: ATQ0 V1 E1 S0=0 &C1 &D2
ATQ0 V1 E1 S0=0 &C1 &D2
OK
--> Sending: AT+CGDCONT=1,"IP","gprsweb.digitel.ve"
AT+CGDCONT=1,"IP","gprsweb.digitel.ve"
OK
--> Modem initialized.
--> Sending: ATM1L3DT*99#
--> Waiting for carrier.
ATM1L3DT*99#
CONNECT
--> Carrier detected. Starting PPP immediately.
--> Starting pppd at Fri Oct 30 15:37:14 2009
--> Pid of pppd: 21573
--> Using interface ppp0
--> pppd: Connect: ppp0 <--> /dev/ttyACM0
--> pppd: PAP authentication succeeded
--> local IP address 10.251.89.163
--> remote IP address 192.168.100.101
--> primary DNS address 10.99.0.11
--> secondary DNS address 204.59.152.208

Espero esta información haya sido útil.

Suerte!

martes, 11 de agosto de 2009

Solucion caidas de llamadas de llamadas luego de transferir en Asterisk

Problema:
Luego de transferir una llamada de una extensión a otra con Asterisk la llamada se cae a los pocos segundos

Topología:






Solución:

La solución es muy sencilla y es configurar en el peer del Media Gateway la opcion canreinvite=no. Dicha opción viene por defecto en yes.
canreinvite=no fuerza al Asterisk a manejar ambos legs de la llamada y permanecer en el medio. Es decir, la comunicación del MediaGateway y del IPPhone pasarán siempre por el Asterisk. Existen otras opciones para evitar ello por ejemplo: utilizar diferentes protocolos y/o utilizar diferentes codecs entre ambos legs.

Procedimiento:
Editar /etc/asterisk/sip.conf y colocar la opción canreinvite=no en el peer. Por ejemplo:

[10.1.1.1]
context=from-internal
dtmfmode=rfc2833
host=10.1.1.1
insecure=very
type=friend
canreinvite=no


Suerte!,

domingo, 19 de julio de 2009

Proteccion de hotlink con Apache

Problema: 
   Poseer un website con contenido de imágenes u otro tipo de media y que existan otros website que hagan referencia a tu contenido. El punto mas negativo de esta situación es que estas gastando TU ANCHO de banda, memoria y recursos de tu servidor. Al problema anterior se le conoce como Hotlinking. 

Solución: 
   En el caso de Apache (existen soluciones similares en IIS) la solución es utilizar el archivo .htaccess con un código que veremos más abajo. Existen dos soluciones: a) bloquear la solicitud HTTP si el HTTP_REFERER no contiene el contenido que deseamos b) Devolver una imagen pre-configurada. En el siguiente artículo nos enfocaremos en devolver un código de error que es mi opción preferida debido a que de esta manera gastamos menos CPU y ahorramos de verdad ancho de banda 

Requerimientos: 
 Servidor Apache con el modulo Rewrite (mod_rewrite). 

Procedimiento: 
  Colocar el siguiente código en el archivo .htaccess 

 RewriteEngine on 
 RewriteCond %{HTTP_REFERER} . RewriteCond %{HTTP_REFERER} !^http://(www\\.)?chistesdevenezuela\\.com [NC] RewriteRule \\.(gif|jpe?g)$ - [NC,F] 

Explicación código anterior: 
  RewriteEngine on Este comando comienza el modulo rewrite, necesario para poder trabajar con los comandos rewrite 
  RewriteCond %{HTTP_REFERER} . Con este comando permitimos HTTP_REFERERs en blanco. Esto es muy util porque alguien puede escribir directamente el URL en el navegador, su navegador puede estar configurado para no enviar el referrer y/o incluso existen Firewalls capa 7 que eliminan el HTTP_REFERER de la solicitud HTTP RewriteCond %{HTTP_REFERER} !^http://(www\\.)?chistesdevenezuela\\.com [NC] Esta línea hace match con aquellas solicitudes que vengan del dominio chistesdevenezuela.com, incluso, no es necesario que lleve el www en el referer. El doble back-slash luego del dominio es para crear un carácter de escape y que el punto en .com se comporte realmente como un punto. Importante: 
Para permitir dominios adicionales solo duplica esta línea cambiando el dominio. RewriteRule \\.(gif|jpe?g)$ - [NC,F] Esta linea indica que tipo de archivos serán permitidos desde el dominio especificado en la linea anterior. Para permitir nuevos tipos de archivos solo agrega nuevos pipes seguidos por el tipo de archivo (por ejemplo png, bmps, etc). 


Eso es todo, 

Suerte.

miércoles, 17 de junio de 2009

Problemas con Postfix dsn= 4.4.2

En el dia de ayer, una empresa a la que a veces le presto servicios me llamo porque estaban teniendo fallas con su servicio de correo.

El primer paso que hice, fue revisar los logs, y al hacerlo me encontre con estos errores que ocurrian con varios Dominios:

dsn=4.4.2, status=deferred (lost connection with alt1.gmail-smtp-in.l.google.com[209.85.222.27] while sending message body)

dsn=4.4.2, status=deferred (lost connection with f.mx.mail.yahoo.com[98.137.54.237] while sending end of data -- message may be sent more than once)

Estos errores tienden a ser por problemas de latencia, que la transmision del correo se cierra debido al delay que se presenta, pero para mi sorpresa, el enlace estaba bien, no habia latencia en la red de la empresa.

Intente disminuir el MTU de la interfaz eth0:

debian:/home/xxxx# ifconfig eth0 mtu 1000
debian:/home/xxxx# ifconfig
eth0 Link encap:Ethernet HWaddr 00:1a:4b:5e:10:c8
inet addr:10.10.10.10 Bcast:192.168.127.255 Mask:255.255.255.0
UP BROADCAST MULTICAST MTU:1000 Metric:1

Pense que esto iba a solucionarlo, pero no fue asi, despues de correr "mailq -q" para forzar la salida de los correos en cola, los mismos se mantenian en las mismas condiciones.

Capaz era problema se relacionaba con el MTU discovery

"debian:/home/xxxx#echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc"

Luego de volver a correr "mailq -q", seguia dando el mismo error.


Por lo que procedi a instalar tcpdump "debian:/home/xxxx# aptitude install tcpdump" y sniffear el trafico del puerto 25.

"debian:/home/xxxx# tcpdump -i eth0 port 25"

Y lo deje corriendo un rato, mientras enviaba correos a la empresa y de la empresa enviaba correos a otros dominios. Luego de obtener bastante informacion procedi a analizarla con Wireshark (esta herramienta es lo mejor creado por el ser Humano, junto con nmap :P).

Comparte con ustedes lo que vi en Wireshark


Al ver el error que estaba teniendo en cuanto al "TCP checksum offload", procedi a deshabilitarlo en la interfaz eth0.

Esto se puede hacer con una herramienta que se llama ethtool, que te permite manipular las propiedades de la interfaz.


debian:/home/xxxx# ethtool --show-offload eth0
Offload parameters for eth0:
Cannot get device rx csum settings: Operation not supported
Cannot get device flags: Operation not supported
rx-checksumming: off
tx-checksumming: on <============
scatter-gather: off
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off
large receive offload: off

debian:/home/xxxx# ethtool --offload eth0 tx off

y luego

debian:/home/xxxx# ethtool --show-offload eth0
Offload parameters for eth0:
Cannot get device rx csum settings: Operation not supported
Cannot get device flags: Operation not supported
rx-checksumming: off
tx-checksumming: off <============ :)
scatter-gather: off
tcp segmentation offload: off
udp fragmentation offload: off
generic segmentation offload: off
large receive offload: off


Al hacer esto, los correos empezaron a salir :)....

Para quienes no tengan muy claro que es esto, les dejo una pequenha nota;

"If you are experiencing network problems and while trying to figure
it out with Wireshark you found these checksum errors, you may have a
network card with TCP checksum offload enabled and for some reason the
packet is not being fixed by the adapter (NAT, bridge or route
redirection is sending the packet to another interface). In this case,
you may want to check and disable checksum offload for the adapter, if
possible."

Mas detallado:

"tcp checksum offloading will not offer you very much performance wise
since it is so cheap to calculate it with the CPU. tcp checksum
offloading is dangerous for data however since it means that you will
send your packets across the least reliable component of your computer
(the pci bus) and without tcp checksum calculated by the stack you
will not detect bits being flipped/corrupted by the pci bus and thus
data might be corrupted. tcp checksum offloading is not as good as it
initially might be thought."

viernes, 5 de junio de 2009

Tips de Seguridad para Linux

A la hora de instalar un Servidor en Linux, el paso del tiempo me ha dado ciertas experiencia a la hora de ajustar politicas de seguridad. Muchas de ellas van a ayudar a que nuestro servidor se encuentre mas seguro.

A continuacion, comparto varias de las politicas que siempre mantengo en mente a la hora de configurar un servidor.

Siempre despues de instalar un servidor, aprovecho para hacer estos cambios.

1) Con el comando chkconfig, elimino los siguientes daemons:
ppp, bind9 ( a menos que sea un servidor DNS), lwresd, portmap, exim4, netatalk, samba, fam, nfs-common, atd, apache2.

E inclusive, sino son necesarios, los elimino

2) Me aseguro de que el siguiente parametro este en el archivo /etc/security/limits.conf

* hard core 0

3) Asegurarse tambien de que las siguientes lineas esten en el archivo /etc/pam.d/login

session required /lib/security/pam_limits.so

4) Comento la siguiente linea en el archivo /etc/inittab

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

ejm:

#ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

5) Las claves deben de expirar cada 90 dias, esto se hace editando el siguiente parametro en /etc/logins.def

MASS_MAX_DAYS 90

6) Elimino las siguientes cuentas (/etc/passwd, /etc/shadow)

games, lp, news, uucp, proxy, irc, gnats, list


7)Cambio el shell por defecto de los siguientes usuarios a /bin/false
bin, daemon, mail, nobody, sync, sys

8) Elimino cualquier informacion que contengan los archivos

/etc/issue
/etc/issue.net

9)Todo los ejecutables que tenga el setuid y setgid, por defecto, ninguno puede ser escrito por el grupo "others"

find / -perm -4000 -exec ls -l {} \;
find / -perm -2000 -exec ls -l {} \;

Ejm
-rwsr-xr-x 1 root root 31640 2008-11-22 11:01 /usr/bin/passwd
||



9) Modifico el parametro a continuacion en el archivo /etc/login.defs:

LOGIN_RETRIES 3

( crear el archivo /var/log/faillog para grabar todo los intentos de acceso)

10) Editamos el archivo /etc/pam.d/common-password y nos aseguramos de que la opcion min=8 este en la configuracion de pam_unix


Estos tips van a ayudar de cierta manera a asegurar el servidor, mas adelante, colocare unas herramientas que van a ayudarnos a realizar tareas sobre el sistema y verificar la integridad del mismo.

lunes, 4 de mayo de 2009

Listado de directorio en Apache

El día de hoy tuve la necesidad de que mi servidor Apache listara el contenido de los archivos y carpetas de un directorio. Es decir, por ejemplo, que al entrar a:
http://miservidor.com/mi/directorio/quedeseo/listar/ apareciera el listado del contenido.

Hay muchas maneras de lograr lo anterior. Te voy a dar el siguiente ejemplo y luego tu puedes colocarlo como quieras (en un .htaccess, virtualhost, global, etc).


Options indexes


Luego reinicias el apache como service httpd restart o /etc/init.d

En el ejemplo anterior, cuando entren a http://miservidor.com/mi/directorio/quedeseo/listar/ veran el contenido de la carpeta. OJO, en dicho directorio no puede haber ningún archivo index.html o index.php.

Suponiendo que en algún momento deseas revertir el comportamiento, puedes hacerlo de la siguiente manera:



Options -Indexes


Con el ejemplo anterior NO será listo el contenido de la carpeta.

Por último, recomiendo que tengas en httpd.conf el ServerSignature Off como pequeña medida de seguridad. El ServerSignature es información del Apache que será incluida en páginas auto-generadas por el Apache (como el listado, errores, etc), esta información puede ser de utilidad para un hacker.

Att.

Alejandro

Video: Revisando la nueva características AddPaths-Limit en FRR. Una mejora al tradicional AddPath de BGP

  En el video recorremos y realizamos un Demo sobre el draft "Paths Limit for Multiple Paths in BGP ". Un documento que viene a se...