Scripts Avanzados: Un script para manejar básicamente iptables

Y otra vez, hemos vuelto. Ésta vez, os mostraré un script para manejar funcionalidades básicas de IPTABLES. El objetivo de éste script, aparte de manejar IPTABLES, es el de enseñar el su uso, dado que cada vez que lo usemos, hará una traducción de lo que escribimos a lo que hace iptables, de modo que poco a poco nos iremos quedando con el funcionamiento de IPTABLES.

También se puede usar para aprender a hacer scripts en consola, ya que en él aparecen prácticamente todos los mandatos de la consola.

Aunque claro está, también puede usarse para no tener que aprender IPTABLES ;)

Script:


#!/bin/bash
# ########################
# IAL Script versión 2.5
# Daniel Perella
# ########################
complete_rule=iptables
part_rule=

function _aplicar
{
echo -e "Aplicar $part_rule a $complete_rule? (s/n)"
read a
if [[ $a = "s" ]]
then
complete_rule=$(echo $complete_rule $part_rule)
echo regla:$complete_rule
else
echo regla:$complete_rule
fi
}

function asistente # asistente: Ejecuta un asistente guiado para añadir una regla
{

echo "añadir o quitar norma?"
echo "añadir | quitar [INPUT|OUTPUT|FORWARD]"
echo -e "que hacer)\c"
read aa
$aa

echo "protocolos admitidos: tcp udp icmp all"
echo -e "protocolo)\c"
read pro
protocolo "$pro"

echo "seleccione política"
echo "acciones: aceptar | rechazar | ignorar "
echo -e "accion)\c"
read ac
$ac

echo "direccion: origen | destino [IP o host]"
echo -e "direccion)\c"
read di
$di

if test $pro = "tcp" -o $pro = "udp"
then
echo "puerto al que aplicar la norma"
echo -e "puerto)\c"
read pu
puerto $pu
fi

echo "Puede Aplicar la norma ahora o añadir"
echo "más propiedades en éste mismo CLI"
echo -e "Aplicar la norma ahora (s/n)?\c"
read ap
if [[ $ap = "s" ]]
then
aa=$(echo $aa | cut -d " " -f 1)
if [[ $aa = "añadir" ]]
then
ejecutar
else
echo -e "Desea borrar ésta norma?? (s/n)?\c"
read bbb
if [[ $bbb = "s" ]]
then
ejecutar
else
echo "No Borrada"
fi
fi
else
echo "Use la ayuda para ver que propiedades"
echo "tiene disponibles"
echo " "
fi

}

function añadir # añadir [INPUT|OUTPUT|FORWARD]: Añade al tipo de Norma
{
echo "-A"
part_rule="-A $1"
_aplicar
}

function quitar # quitar [INPUT|OUTPUT|FORWARD]
{
echo "-D"
part_rule="-D $1"
_aplicar
}

function protocolo # protocolo [tcp|udp|icmp|all]: Añade un tipo de protocolo
{
echo "-p $1"
part_rule="-p $1"
_aplicar
}

function puerto # puerto [n]: Define el puerto de la norma
{
echo Puerto: $1
part_rule="--dport $1"
_aplicar
}

function aceptar # aceptar: Aplica la norma ACCEPT a los paquetes
{
echo "-j ACCEPT"
part_rule="-j ACCEPT"
_aplicar
}

function rechazar # rechazar: Aplica la norma REJECT a los paquetes
{
echo "-j REJECT"
part_rule="-j REJECT"
_aplicar
}

function ignorar # ignorar: Aplica la norma DROP a los paquetes
{
echo "-j DROP"
part_rule="-j DROP"
_aplicar
}

function interfaz # interfaz [ethn] Define el interfaz para la norma
{
echo "-i $1"
part_rule="-i $1"
_aplicar
}

function numero # numero [n]: Define el número de norma (útil para borrar)
{
echo "-I $1"
part_rule="-I $1"
_aplicar
}

function origen # origen [IP o HOST]: Define el origen del paquete para la norma
{
echo "-s $1"
part_rule="-s $1"
_aplicar
}

function destino # destino [IP o HOST] Define el destino del pquete de la norma
{
echo "-d $1"
part_rule="-d $1"
_aplicar
}

function normas # normas: Hace un listado de las normas existentes
{
echo "Norma que está siendo editada"
echo $complete_rule
echo "Ultima parte aplicada o no a la norma"
echo $part_rule
echo " "
echo " "
i=$(whoami)
if [[ $i != "root" ]]
then
echo "No eres root, no se puede hacer iptables"
else
iptables -n -L
fi

}

function nueva # nueva: Empieza a hacer una norma nueva
{
complete_rule="iptables"
part_rule=""
echo "Nueva norma iniciada"
}


function ejecutar # ejecutar: Aplica la norma
{
echo "Aplicando norma: $complete_rule"
$complete_rule
echo "Hecho"
}

function guardar # guardar Volca en un archivo las normas
{
echo "Guardar normas en fichero"
if test -n $1
then
nom=$1
else
echo -e "nombre del fichero)\c"
read nom
fi
iptables-save > $nom
echo "Guardado como $nom"
}

function cargar # cargar Lee un fichero de normas y lo aplica
{
echo "Cargar Normas IPTABLES"
if test -n $1
then
nom=$1
else
echo -e "nombre del fichero)\c"
read nom
fi
cat $nom | grep "-" | grep -v "#" | while read lin
do
echo -e "Cargando: $lin\r\c"
complete_rule=$(echo $complete_rule $lin)
ejecutar
nueva
done;
}

function vaciar # vaciar [INPUT|OUTPUT|FORWARD] Vacia del todo un juego de normas
{
if test -n $1
then
iptables -F $1
echo Normas de $1 Limpio
else
echo "Vaciar Normas de: INPUT OUTPUT FORWARD"
echo -e "normas)\c"
read nor
iptables -F $nor
echo Normas de $nor Limpio
fi
}

function _backup
{
guardar backup_normas
}

function _restore
{
cargar backup_normas
}
# exit 0 : sale del script

case $1 in

--directo|-d)
$2 $3 $4 $5 $6 $7 $8 $9
;;
--backup|-b)
_backup
;;
--restore-backup|-r)
_restore
;;
*)
while [[ $? ]]
do
i=$(whoami)
if [[ $i != "root" ]]
then
echo "No eres root, no se aplicará ningún cambio"
fi
echo "Use: ayuda"
echo -e "root)\c"
read rul
if [[ $rul = "ayuda" ]]
then
cat blacklist.sh | grep "#" | grep -v "grep" | grep -v "_" | grep -v "bash" | cut -d "#" -f 2

else
$rul
fi
done;
;;
esac

_backup


Uso:

Ejecutaremos el script con permisos de root y accederemos a su consola. Podemos usar la orden "ayuda" para obtener ayuda acerca de las funciones que podemos usar.

La idea es ir completando una variable con las posibles opciones que podemos usar en iptables, claro está, el script nos dice en cada momento lo que podemos introducir. Después ésa variable se le pasa a IPTABLES y es aplicada.

Para empezar, podemos usar la órden "asistente" y cuando cojamos soltura iremos probando las funciones sueltas.

Si tenéis dudas, ya sabéis donde estamos!

Suerte

HOW TO: Incompatibilidad Hotmail Live, Office Live,.. + Firefox Ubuntu (Actualizado)

El Problema
Como muchos usuarios de Ubuntu habreis notado, siempre que intentemos acceder a cualquiera de los servicios Live! de Microsoft desde Firefox con Ubuntu, nos encontramos con mensajes del estilo:

OFFICE LIVE (http://www.officelive.com):


HOTMAIL (http://www.hotmail.com):

En dicho momento las alarmas propietarias se activan y piensas... ¿Sera posible que Microsoft haya utilizado tenologias propietarias para sus portales, dejando asi de lado a los usuarios de linux?

La respuesta es, en parti si, y en parte no. Para poder usar "Office Live" al completo si que necesitaremos instalar ciertos programas (plugins) exclusivamente para Windows, sin los cuales el uso de Office Live se ve limitado a la lectura de documentos. Por lo que la emocion inicial de no tener que volver a Windows o usar el Office a traves de Wine, para editar los documentos de word, excel, etc.. fue disipada muy rapidamente. Y ademas como anotacion al lector, todos sabemos que OpenOffice, puede leer documentos de Word, Excel, etc..pero la mayoria de las veces los documentos adaptados no son 100% fieles al original, pues el caso de "Office Live" es de los mas encandaloso que he visto jamas, dado que al abrir documentos originales en el nuevo portal de Microsoft, estos son mostrados peor que con OpenOffice.

Reseñas aparte, para poder llegar a ver documentos y/o ver nuestro correo de Hotmail, necesitamos un paso previo, engañar los portales de Hotmail y Office Live haciendoles creer que navegamos en Firefox (pero desde Windows).
Voy a obviar el tema de lo triste que es para una empresa como Microsoft bloquear sistematicamente a los usuarios de Linux, por el simple hecho de usar ese sistema operativo, dado que los portales son completamente funcionales cambiando simplemente el user agent
La Solucion
Para navegar como si estuvieramos usando el sistema operativo Windows (Cualquiera de sus versiones nos vale) nos valemos de una simple herramienta llamada UserAgentSwitcher con el que podremos hacer creer al navegador en cuestion de segundos que estamos navegando con diferentes sistemas operativos y navegadores, con un gesto tan simple como el que veis en la imagen.Por defecto esta herramienta viene con las opciones Internet Explorer 7, Netscape 4.8 y Opera 9.25 (Windows Vista), pero la mas interesante para nosotros es Firefox para Windows, dado que queremos que Hotmail, siga cargando su interfaz para el navegador de Mozilla, pero saltandonos el cansino mensaje y asegurandonos la maxima compatibilidad con nuestro navegador al igual que en Windows.
  1. Instalamos la extension de firefox disponible aqui.
  2. Abrimos las opciones de la extension y hacemos click en "User Agents -> Import" (Podeis hacer una copia de seguridad de las actuales haciendo click en Export")
  3. Ahora solo teneis que importar el siguiente fichero xml: Firefox_Win32_UserAgent
  4. Y listo! Ya deberiais tener en vuestra lista de user agents, la version: "Firefox (Windows XP)"
Ya podeis entrar en vuestro correo de Hotmail y en Office Live, siempre y cuando activeis previamente, con el UserAgentSwitcher, la version de "Firefox (Windows XP)".

Que lo disfruteis.

Corrección: Parece que desde Redmond se han dado cuenta de la importacia y la importante cuota de mercado que pueden ganar ofreciendo esta version de Office Live para todas las plataformas, anunciando que para finales de este año estara disponible para Windows, Linux y Mac (La posibilidad de gestionar documentos de Office en cualquier plataforma asegura que los usuarios de Linux dependeremos cada vez menos del sistema operativo de Redmond, es una gran noticia para el mundo linux)
Fuente: The Inquirer ES

Script de Instalación Para nuestra Distribución

Que parte del equipo de ubuntu Linux estaba trabajando en una metadistribución de Ubuntu no es nada nuevo.

Pues bien, hemos dado un paso más. Se ha creado el instalador de la Distribución. Sé que estamos lejos de tener una distribución propia, pero andar es andar y, aunque sea despacio, siempre se acorta el camino.

Os acordaréis de una entrada que hicimos sobre cómo haceros vuestra propia distribución de Ubuntu, para Netbooks, ahora os enseñaré como hacer un instalador para ella.

Necesitamos (entrando ya en materia) dos scripts. El primero, generará una imágen de la distribución que se esté ejecutando, el segundo, habrá que incluirlo en el CD de instalación de Ubuntu Mini.

Script de Generación:

#!/bin/bash
me=$(whoami)
echo "Obteniendo Listado de Paquetes...."
dpkg-query -W -f='${Package}\n' > packages.txt
echo "Listado de paquetes obtenido"
echo "Obteniendo Configuración de Usuario"
cd /home/$me
cp /etc/apt/sources.list .
tar -cvvf installer/home.tar . --exclude=installer --exclude=.ssh --exclude=*.mozilla --exclude=.aptitude

Éste script obtiene la lista de paquetes instalados y los archivos de configuración del home del usuario actual. Los tres archivos que genera (home.tar, packages.txt y sources.list) Habrá que ponerlos en la misma ruta del instalador, en el CD de instalación.

Script de Instalación:

#!/bin/bash
me=$(whoami)

if [[ $me = "root" ]]
then
echo "Comprobando Lista de Paquetes"
if test -e packages.txt
then
echo "Lista de Paquetes encontrada, empezando la Instalación..."
cat packages.txt | while read package
do
echo aptitude --assume-yes install $package
done
echo "Paquetes Instalados, Empezando configuración de Usuario"
echo "Escriba un Nombre de usuario en minúsculas y sin acentos:"
echo -e "Nombre de usuario: \c"
read user
adduser $user
adduser $user admin

tar -xvvf home.tar -C /home/$user
cp /home/$user/sources.list /etc/apt/sources.list
chown -R $user.$user /home/$user

else
echo "No se ha encontrado la lista de paquetes, no se instala"
fi
else
echo "No Eres root, no se hace nada"
fi


Y éso es todo. Es decir, de momento, lo que hay que hacer es, bajarse el ubuntu mini, instalarlo y ejecutar el script "install.sh"

Me dejo para otra entrada como hacer el CD de instalación.

Cuidaros!

Opinión: Ubuntu Linux, el día a día, futuro o Moda

Hoy vamos a hacer una entrada distinta. No es que nos falten entradas técnicas, es que a veces, también me gusta reflexionar sobre lo que hacemos.

Haciendo un poco de memoria, no me cuesta recordar la primera vez que oí hablar de Ubuntu. Por aquél entonces era estudiante y ni siquiera estaba en la rama de informática, era el año 2004. Un amigo me trajo unos CD's en una envoltura de cartón y me dijo que era una nueva distribución de Linux que acababa de salir.

Obviamente mi primera impresión fue lamentable. Poca documentación, soporte pésimo, etc, etc. Nunca imaginé la proyección que alcanzaría aquella "versión recortada de Debian"

Hoy, Ubuntu se ha convertido, casi sin duda, en la distribución más famosa (y mediática) de la informática, tirando del carro de Linux. Vayas por donde vayas, hace días que se habla de Ubuntu. Cada vez que alguien dice que le ha entrado un virus por el messenger, no muy lejos, alguien sonríe de forma condescendiente.

No deja de ser curioso que ésto, hasta hace poco era al revés. Linux era un programa que usaban los hackers informáticos para robar información, a cualquiera que se le hablase de éste sistema operativo se le dibujaba una sonrisa paternal y condescendiente en la cara y asistía sin el menor interés a las explicaciones que se le diesen. Pero mira, cada vez somos más, y ahora los que sonríen son los usuarios que cada vez que entran en internet, lo hacen de forma más segura, sin tener que comprar un equipo nuevo cada dos años ni pagar licencias de software.

Desde éste punto de vista, se ha mejorado la vida de mucha gente. Lo que era inpensable hace unos años, hoy puede ser una realidad. por ejemplo, Aquí, en el laboratorio de Ubuntu Linux a Fondo, como en tantos otros, se gestan ideas para que ésto sea una realidad. Instalar Linux en máquinas antiguas, o personalizar un sistema operativo para hacer que sea un SO prácticamente bajo demanda son algunos de los ejemplos que ya tenemos, otros que vendrán, como por ejemplo instalar un escritorio libre sobre Darwin (la distribución que lleva OS X por debajo)

Pero todo no puede ser bueno y siempre hay gente que intenta hacer de lo famoso, algo lucrativo.

Actualmente, las empresas se están volcando con el código abierto y todas (las que quieren aprovechar la buena publicidad) sacan productos basados en soluciones de código abierto. Se empeñan en ofertar servicios adicionales para rentabilizar un fenónemo que viene de atrás pero que ahora se ha puesto de moda.

Mucho se ha hablado sobre la aportación de Ubuntu al código abierto y al fenómeno Linux en general, se ha especulado sobre si el tirón actual viene de la mano de ciertas distribuciones o era una consecuencia absolutamente inevitable.

Lo que sí es cierto (y puede que me crucifiquen por ésto) es que Canonical (Por nombrar la que nos ataña, aunque otras distros también tienen soporte privado) es una empresa y en el fondo, sigue la filosofía de una empresa.

Si bien es cierto que probablemente una comunidad de desarrolladores "a ratos libres" no lograse soportar un número significativo de distribuciones, es cierto que lograse mantener al menos un par de ellas.

Lo que queda por ver es cómo terminará todo ésto, quiero decir ¿Acabaremos pagando por Ubuntu?

Ahí queda.