Archivo Mensual de Septiembre, 2005

Página 2 de 3

Mas sobre firewall y account

Antes de nada, decir que este es un tema que me gusta mucho. Si por casualidad das con este blog y tienes alguna sugerencia, dejame un comentario y no dudaré en intentar tratar el tema que me propongas. ¡Gracias! Dicho esto, completanto el post anterior sobre iptables , aquí os dejo dos sencillitos scripts que lo complementan. Sirven para ver cómo van las estadísticas en un momento dado. El primero de ellos es como sigue:

#!/bin/bash
START_TIME=`cat /var/run/firewall.start`
FINISH_TIME=`cat /proc/uptime | awk '{print $1}' | cut -d'.' -f 1`
UPTIME=`expr $FINISH_TIME - $START_TIME`
INPUT_TRAFFIC=`sudo iptables -L INPUT -v -x | grep \!localnet | awk '{print $2}'`
INPUT_RATE=`expr $INPUT_TRAFFIC / 1024 / $UPTIME`
OUTPUT_TRAFFIC=`sudo iptables -L OUTPUT -v -x | grep \!localnet | awk '{print $2}'`
OUTPUT_RATE=`expr $OUTPUT_TRAFFIC / 1024 / $UPTIME`
echo "Input rate: $INPUT_RATE KB/s (`expr $INPUT_TRAFFIC / 1048576` MB)"
echo "Output rate: $OUTPUT_RATE KB/s (`expr $OUTPUT_TRAFFIC / 1048576` MB)"

Para que funcione tenemos que tener el script del post anterior sobre iptables arrancado, ya que la información se obtiene a partir de él. Si ponemos este fichero en algún lugar del path (yo lo tengo en $HOME/bin) y le damos permisos de ejecucion (chmod a+x path_al_fichero ), (no olvideis hacer rehash en la terminal si usais tcsh), en cualquier momento podremos hacer algo como lo siguiente:

deigote@pielrapida:(Sun-Sep-05 12:11) ~> traffic_rates
Input rate: 12 KB/s (79 MB)
Output rate: 5 KB/s (32 MB)

Y ver cómo van las cosas por la red (siempre que hallamos llamado traffic_rates al script, claro). El otro programa funciona sin necesidad de tener el script del post anterior sobre iptables arrancado, y es como sigue:

#!/bin/sh
IP_PUB=`lynx -dump www.cualesmiip.net | grep Tu | awk '{print $5}'`
IP_PRIVS=`ifconfig | grep "inet addr" | cut -f2 -d: | cut -f1 -d' '`
export IP_PUB=$IP_PUB
export IP_PRIV=$IP_PRIVS
echo "Public IP"
echo $IP_PUB
echo "Private IPs"
echo $IP_PRIVS

En este caso, y haciendo lo mismo que antes, obtendremos lo siguiente:

deigote@pielrapida:(Sun-Sep-05 12:40) ~> ipfinder
Public IP
82.213.243.212
Private IPs
192.168.0.4 127.0.0.1

Siempre es interesante poder conocer nuestra dirección IP en un momento dado (aunque hay que tener en cuenta que si estamos detrás de un proxy-cache, dicha dirección IP será la del proxy-cache y no la nuestra. Pues esto es todo.

Una vez más, sólo para Linux :).

Technorati Tags: , ,

Firewalling/accounting con iptables, averiguar la IP y algunas cosas más

Bueno. Creo que ya va tocando un poco de iptables, mi tema linuxero favorito :P. Pues nada, simplemente después de cierta pereza me he decidido a hacer un “firewall” con iptables para mi máquina. Pongo “firewall” entre comillas porque no hago filtrado en absoluto: estoy detrás del router, así que pocos ataques recibo. Encima los switches que comunican mis PC’s , al ser precisamente switches y no hub’s, separan los dominios de colisión y no recibo trafico ethernet de ninguna otra máquina. En fin, que no hay lugar para mucha experimentación. Sin embargo, un amante de las estadísticas de red como yo no puede dejar pasar la ocasión que brinda iptables de contar todo el tráfico que pasa por mi PC , por lo que he hecho el siguiente firewall, que pongo a continuación a trozos para comentar el propósito de cada cosa.

  • Para empezar, algunas variables. El nombre del script, la localización del mandato iptables, el puerto que uso para el emule y los puertos que uso para el bittorrent. Poca cosa :):
    
    #!/bin/sh
    # An extended firewall script.
    # Diego Toharia
    
    # Some vars
    N=/etc/init.d/firewall
    IPTABLES=/sbin/iptables
    EMULE_PORT=6889
    BT_PORT=6881:6888
    
  • Aquí esta la chicha de iptables. Las reglas, metidas dentro de una función. Como se puede ver hay poca cosa, y ni una sola acción de salto (-j, jump ). Así, por cada regla sólo se cuentan los paquetes que enlazan con la misma. Si quisíeramos filtrar alguna de ellas, añadimos -j DROP y listo :). Principalmente lo que hago es, primeramente, crear contadores de conexiones entrantes (es decir, el número de paquetes/bytes que generan las nuevas conexiones de clientes a programas con socket en estado LISTEN o en escucha), y luego añado varios contadores del tráfico generado tanto entrante como saliente por el emule, bittorrent, web, y globales (dentro y fuera de la LAN y en total). Como ya he comentado, no hay mucho más, ya que es una máquina detrás de un router y que no es router a su vez:
    
    # Rules definitions
    rules_def() {
        ############ CONNECTIONS COUNTERS ##################################
        # Count Emule connections
        $IPTABLES -A INPUT -m state --state NEW -p tcp --dport $EMULE_PORT
        # Count Bittorrent connections
        $IPTABLES -A INPUT -m state --state NEW -p tcp --dport $BT_PORT
        # Count Ssh connections
        $IPTABLES -A INPUT -m state --state NEW -p tcp --dport ssh
        # Count Http connections
        $IPTABLES -A INPUT -m state --state NEW -p tcp --dport http
        ############ TRAFIC COUNTERS #######################################
        # Count Emule input traffic
        $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED         -p tcp --dport $EMULE_PORT
        # Count Bittorrent input traffic
        $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED         -p tcp --dport $BT_PORT
        # Count Http traffic
        $IPTABLES -A INPUT  -p tcp --sport http
        $IPTABLES -A OUTPUT -p tcp --dport http
        # Count LAN traffic
        $IPTABLES -A INPUT -s 192.168.0.0/24
        $IPTABLES -A OUTPUT -d 192.168.0.0/24
        # Count inet traffic
        $IPTABLES -A INPUT -s ! 192.168.0.0/24
        $IPTABLES -A OUTPUT -d ! 192.168.0.0/24
        # Count all traffic
        $IPTABLES -A INPUT
        $IPTABLES -A OUTPUT
        ####################################################################
    }
    
  • Aquí pongo una función que averigua cuál es la dirección IP con la que navegamos por Internet, y cuales son las direcciones IP configuradas en nuestra máquina. Para hacerla, he usado la información del siguiente enlace: http://blog.enrique.barbeito.org/. Lo he encontrado usando Google, como no. Muchas gracias a Enrique Barbeito y su blog.
    
    # IP finder
    ipfinder() {
            IP_PUB=`lynx -dump www.cualesmiip.net | grep Tu | awk '{print $5}'`
            IP_PRIVS=`ifconfig | grep "inet addr" | cut -f2 -d: | cut -f1 -d' '`
            export IP_PUB=$IP_PUB
            export IP_PRIV=$IP_PRIVS
            echo "Public IP"
            echo $IP_PUB
            echo "Private IPs"
            echo $IP_PRIVS
    }
    
  • A continuación hago una función que, a partir de información guardada por el resto del script, calcula unas tasas de transferencia desde que se puso en marcha el script hasta que se paró (siempre que estas operaciones se hagan de forma correcta, es decir, arrancando y parando el script con las propias opciones del script). Esta funcionalidad, es, sin duda, la que más me gusta :P, todos los días consulto el trafico del dia anterior y me congratulo, jejeje:
    
    # Traffic rates
    traffic_rates() {
        START_TIME=`cat /var/run/firewall.start`
        FINISH_TIME=`cat /proc/uptime | awk '{print $1}' | cut -d'.' -f 1`
        UPTIME=`expr $FINISH_TIME - $START_TIME`
        INPUT_TRAFFIC=`sudo iptables -L INPUT -v -x | grep \!localnet | awk '{print $2}'`
        INPUT_RATE=`expr $INPUT_TRAFFIC / 1024 / $UPTIME`
        OUTPUT_TRAFFIC=`sudo iptables -L OUTPUT -v -x | grep \!localnet | awk '{print $2}'`
        OUTPUT_RATE=`expr $OUTPUT_TRAFFIC / 1024 / $UPTIME`
        echo "Input rate: $INPUT_RATE KB/s (`expr $INPUT_TRAFFIC / 1048576` MB)"
        echo "Output rate: $OUTPUT_RATE KB/s (`expr $OUTPUT_TRAFFIC / 1048576` MB)"
    }
    
  • Por último, el “programa principal” del script. Está hecho a modo de script de los del init.d, para ser arrancado por el mismo (luego explicaré cómo hacerlo). Se encarga de coordinar lo anterior para, por cada start y stop, guardar en un log el accounting, la direccion IP , y las tasas de tráfico del intervalo de tiempo entre los mismos:
    
    case "$1" in
      start)
            cat /proc/uptime | awk '{print $1}' | cut -d'.' -f 1             > /var/run/firewall.start
            echo "Firewall: setting up iptables rules.."
            echo "###############################################"             > /var/run/firewall
            echo -n "Traffic from " >> /var/run/firewall
            date +%k:%M" of "%A' '%D >> /var/run/firewall
            rules_def
            ipfinder >> /var/run/ipfinder
            ;;
        stop)
            echo "Firewall: saving counters.."
            echo -n "To " >> /var/run/firewall
            date +%k:%M" of "%A' '%D >> /var/run/firewall
            echo "###############################################"             >> /var/run/firewall
            iptables -L -v >> /var/run/firewall
            echo "###############################################"             >> /var/run/firewall
            ipfinder >> /var/run/firewall
            echo "###############################################"             >> /var/run/firewall
            traffic_rates >> /var/run/firewall
            echo "###############################################"             >> /var/run/firewall
            mv /var/run/firewall /var/log/firewall/log.`date +%d_%m_%y_%H_%M`
            echo "Firewall: flushing iptables rules.."
            iptables -F
            iptables -X
            rm /var/run/ipfinder
            rm /var/run/firewall.start
            ;;
        reload|restart|force-reload)
            $N stop
            $N start
            ;;
      *)
            echo "Usage: $N {start|stop|restart|force-reload}" >&2
            exit 1
            ;;
    esac
    
    exit 0
    

Si poneis cada parte del código seguida, tendreis el script completo. Durante la ejecución del mismo podeis encontrar vuestra ip en el fichero /var/run/ipfinder, quedando los logs almacenados en el directorio /var/log/firewall que previamente debeis crear. Poniendo este fichero en /etc/init.d/ con el nombre firewall y ejecutando rcconf, o el mandato update_rec.d firewall defaults, lo tendreis todo funcionando, y podreis disponer de unas sencillas estadísticas para los que no queremos complicarnos la vida (para los que si quieran, a conjugar iptables con ntop, que me ha parecido potentisimo, y snort, que no lo he usado más que como sniffer pero es un potente detector de intrusos). Sigo buscando cómo hacer accounting del resto de máquinas, ya que aunque ponga la interfaz en modo promiscuo, iptables no procesa el tráfico que llega de otros PC’s . Mis posteriores descubrimientos, aquí, en próximas ediciones ;). No puedo terminar el artículo sin agradecer a Oskar Andreasson su magnifico trabajo con el tutorial de iptables, con el que yo me inicie y que es mi referencia para este tema.

Por supuesto, sólo para Linux.

Añadido contador, licencia y algo de publicidad

Pues eso. He añadido un contador, que siempre queda divertido, para que dejeis alguna firmilla cuando querais :D, la licencia bajo la que publico el blog (realmente, la pongo un poco por poner, por poder tocar los güevos si alguien me copia lo que hay sin respetar la licencia y ese alguien no me cae bien :P), y un poco de publicidad de esta de google, por si a alguien le resulta interesante (cosa poco probable) y así me llevo algún euro que otro (cosa aún menos probable, ya que la publicidad tendría que ser clickada muchas veces antes de que eso ocurra, pero por intentarlo que no quede :-). Respecto a la licencia, si leeis el resumen al que se accede pinchando en ella, vereis que es una licencia bastante razonable y libre, o sea que realmente no estoy poniendo ninguna restricción a los posibles copiadores (nuevamente, dudo que los haya) excepto la de no hacer negocios con lo que yo pongo aquí de forma gratuita y de libre uso, y reconocerme la autoría. Respecto a la publicidad de Google, pues eso, no molesta mucho e igual sirve para algo, ya veremos :P. También he añadido un buscador de Google, para que no tengais que cargar su página si ya estais en la mía y sea todo más rápido. Pos nada más.

EDITO: los de google me han bloqueado la publicidad, porque se piensan que he hecho trampas. Con su pan se la coman :-)
EDITO: he vuelto a poner la publicidad a ver que pasa. Con mi pan me lo como.

A vueltas con las minimotos

Bueno! después del increible exito que tuvo el post de ayer (!hasta hay comentarios xD!) he decidido repetir tema :P. Lázaro me ha enviado unas fotos de las minimotos en acción, con ellos de protagonistas, así que voy a colgar algunas para que las veais, ya que son curiosas. Aquí van!

Aqui podemos ver a Beto equipado con un casco que haría las delicias de los autos locos xD

Aquí vemos de nuevo a Beto con su moto amarilla, rodeado de toda la fauna local xD

En esta foto vemos a Lázaro borroso de la increible velocidad a la que va ;-)

Y por último vemos a un guerrero del medievo que se ha colado en el post.. ah no! es Chumbo equipado con el kit antiraspones (una caida a ras de suelo a 50 km/h debe doler un rato…).

Pues nada, esto es todo. Espero que dentro de algunos meses pueda incluir alguna foto mía, pero de momento no puedo porque no tengo minimoto :-(. Espero que esa situación cambie dentro de no mucho..

Technorati Tags: , ,