Bueno, despues de mucho tiempo de no publicar nada en mi blog y ver que ya era necesario de agregar algo, pues aquí esta.
dansguardiancm (dansguardian console manager), ;) hasta suena bonito y todo jjeje, esto no es mas que una iniciativa propia al ver que dansguardian no cuenta con un configurador amigable y todo toca a través de los archivos de configuración (claro soluciones como ipcop, clearos, entre otros traen estas interfaces pero todas web).
A esta ves fui un poco mas lejos y subi mi script a sourceforge jejeje, espero poder ir mejorando este script con miras a que se convierta en una opción de confiar y de utilidad a la hora de manipular dansguardian desde consola.
Pues no es mas aquí dejo en enlace a la url:
https://sourceforge.net/projects/dansguardiancm
Por el momento no lo e documentado pero a grosso modo cuenta con una sección de configuración al inicio y eso es todo el script se encarga de el resto.
Saludos y pues espero criticas de cualquier tipo a fin de cuenta si es critica es constructiva ;).
domingo, 12 de mayo de 2013
martes, 4 de septiembre de 2012
Agregar Scripts al autoarranque de systemd
Hace mucho que no escribía nada por cuestiones personales y pues me coloque a revisar mi nuevo fedora 17 y vi que necesitaba agregar un script al inicio del sistema, lo lógico hubiese sido buscar /etc/rc.d/rc.local o similar /etc/rc.local pero o sorpresa este archivo ya no existe en fedora 16 y 17 , asi que decidi documentarme al respecto y en la documentación de fedora [1] nos dicen que creemos el archivo /etc/rc.d/rc.local, le demos permisos de ejecución y ya podemos utilizar normalmente ya que el sistema revisa si existe el archivo mencionado anteriormente y si existe que tenga permisos de ejecución y lo podrá utilizar. Pero la pregunta real es si hay un nuevo sistema de arranque por que seguir con los viejos métodos?, teniendo esta pregunta en la cabeza pues vamos a aprender como escribir nuestros script para que arranquen con el sistema haciendo uso de systemd.
Lo primero que debemos tener en cuenta es en donde van a quedar ubicados nuestros scripts, estos van a estar ubicados en /etc/systemd/system.
Como systemd controla otros aspectos del sistema operativo necesita un poco mas de información que no es muy compleja en sus aspectos básicos, para invocar un script necesitamos colocarlo como un demonio del sistema por lo tanto debemos escribirlo de tal forma que systemd lo entienda, lo primero que debemos tener en cuenta es el nombre del script que debe ser algo similar a esto "ejemplo.service" para una mayor información podemos ver la documentación de la nomenclatura utilizada por el sistema [2], ahora debemos crear el contenido del script, podemos tomar como ejemplo otro script que este dentro del directorio donde residen los scripts de systemd, básicamente esta compuesto de tres partes:
[Unit]
Description=Daemon of axample
After=syslog.target
En esta sección se da información básica del script, una descripción básica de la tarea que ejecuta el script y en donde va a estar ubicado en el orden de arranque.
[Service]
ExecStart=/usr/sbin/example
Type=forking
En esta sección se da la ruta en donde realmente esta el script a ejecutar y el tipo de script o demonio que va a ser para esto ver mas detalladamente la documentación de systemd
[Install]
WantedBy=multi-user.target
Y por ultimo la sección Install que nos dice en que runlevel se ejecutará en el modo multiusuario o en el clásico sysv seria el runlevel 3.
Con esto ya tenemos todo listo para agregar nuestro script al inicio del sistema, el archivo final sería algo como lo siguiente.
--------------------/etc/systemd/system/ejemplo.service-----------------------
[Unit]
Description=Daemon of axample
After=syslog.target
[Service]
ExecStart=/usr/sbin/example
Type=forking
[Install]
WantedBy=multi-user.target
----------------------------------------------
pero primero tenemos que refrescar al systemd para que lea de nuevo las configuraciones, esto lo hacemos con systemctl daemon-reload, ahora podemos probar con systemctl start ejemplo.service lo cual nos inicia el servicio (No debe mostrar errores), ahora verificamos que el servicio se este ejecutando con systemctl status ejemplo.service lo cual nos mostrará algo similar a lo siguiente:
ejemplo.service - Daemon of example
Loaded: loaded (/etc/systemd/system/ejemplo.service; enabled)
Active: activating (start) since Tue, 00 Sep 2010 10:04:02 -0600; 9s xx
Control: 23604 (lkl)
CGroup: name=systemd:/system/ejemplo.service
└ 23604 /usr/sbin/example
Sep 04 22:04:02 xxx ejemplo[23604]:
Ahora podemos verificar que el servicio esta activo, lo cual solo nos queda habilitar el servicio para el autoarranque, esto lo haremos con systemctl enable ejemplo.servicey lo cual nos mostrara algo como lo siguiente:
ln -s '/etc/systemd/system/ejemplo.service' '/etc/systemd/system/multi-user.target.wants/ejemplo.service'
Finalmente tenemos listo nuestro script ejecutándose al inicio del sistema y homologado al esquema de systemd.
[1] http://docs.fedoraproject.org/es-ES/Fedora/16/html/Release_Notes/sect-Release_Notes-Changes_for_Sysadmin.html
[2] http://0pointer.de/public/systemd-man/systemd.special.html
Lo primero que debemos tener en cuenta es en donde van a quedar ubicados nuestros scripts, estos van a estar ubicados en /etc/systemd/system.
Como systemd controla otros aspectos del sistema operativo necesita un poco mas de información que no es muy compleja en sus aspectos básicos, para invocar un script necesitamos colocarlo como un demonio del sistema por lo tanto debemos escribirlo de tal forma que systemd lo entienda, lo primero que debemos tener en cuenta es el nombre del script que debe ser algo similar a esto "ejemplo.service" para una mayor información podemos ver la documentación de la nomenclatura utilizada por el sistema [2], ahora debemos crear el contenido del script, podemos tomar como ejemplo otro script que este dentro del directorio donde residen los scripts de systemd, básicamente esta compuesto de tres partes:
[Unit]
Description=Daemon of axample
After=syslog.target
En esta sección se da información básica del script, una descripción básica de la tarea que ejecuta el script y en donde va a estar ubicado en el orden de arranque.
[Service]
ExecStart=/usr/sbin/example
Type=forking
En esta sección se da la ruta en donde realmente esta el script a ejecutar y el tipo de script o demonio que va a ser para esto ver mas detalladamente la documentación de systemd
[Install]
WantedBy=multi-user.target
Y por ultimo la sección Install que nos dice en que runlevel se ejecutará en el modo multiusuario o en el clásico sysv seria el runlevel 3.
Con esto ya tenemos todo listo para agregar nuestro script al inicio del sistema, el archivo final sería algo como lo siguiente.
--------------------/etc/systemd/system/ejemplo.service-----------------------
[Unit]
Description=Daemon of axample
After=syslog.target
[Service]
ExecStart=/usr/sbin/example
Type=forking
[Install]
WantedBy=multi-user.target
----------------------------------------------
pero primero tenemos que refrescar al systemd para que lea de nuevo las configuraciones, esto lo hacemos con systemctl daemon-reload, ahora podemos probar con systemctl start ejemplo.service lo cual nos inicia el servicio (No debe mostrar errores), ahora verificamos que el servicio se este ejecutando con systemctl status ejemplo.service lo cual nos mostrará algo similar a lo siguiente:
ejemplo.service - Daemon of example
Loaded: loaded (/etc/systemd/system/ejemplo.service; enabled)
Active: activating (start) since Tue, 00 Sep 2010 10:04:02 -0600; 9s xx
Control: 23604 (lkl)
CGroup: name=systemd:/system/ejemplo.service
└ 23604 /usr/sbin/example
Sep 04 22:04:02 xxx ejemplo[23604]:
Ahora podemos verificar que el servicio esta activo, lo cual solo nos queda habilitar el servicio para el autoarranque, esto lo haremos con systemctl enable ejemplo.servicey lo cual nos mostrara algo como lo siguiente:
ln -s '/etc/systemd/system/ejemplo.service' '/etc/systemd/system/multi-user.target.wants/ejemplo.service'
Finalmente tenemos listo nuestro script ejecutándose al inicio del sistema y homologado al esquema de systemd.
[1] http://docs.fedoraproject.org/es-ES/Fedora/16/html/Release_Notes/sect-Release_Notes-Changes_for_Sysadmin.html
[2] http://0pointer.de/public/systemd-man/systemd.special.html
jueves, 31 de mayo de 2012
squid NONE/417
Hoy trabajando con una de las tantas herramientas que se tiene (herramientas del gobierno que en su mayoria NO cumplen estandares) y una en especial que se llama efiquest, la cual tiene que pasar por un proxy empresarial para poder llegar a una base de datos en linea.
El problema en si era que en el log del squid mostraba:
127.0.0.1 NONE/417 886 POST http://www.rentec.com.co/rentecALic/rentecAlic.asmx - NONE/- text/html
lo cual investigando por la web me encontré con esta respuesta en una lista de correo (http://www.mail-archive.com/squid-users@squid-cache.org/msg83683.html) en donde se recomienda utilizar la directiva en la configuración del squid.
ignore_expect_100 ON
martes, 27 de diciembre de 2011
Backup buzones zimbra en intervalos de fechas
Esta ves escribo para comentar como hice para hacer backups a zimbra de forma tal que solamente haga backups a un determinado rango de fechas concretamente la ultima semana teniendo en cuenta que el scritp se ejecuta en el cron.weekly.
para este caso solamente tenemos un script llamado bweek.sh el cual ubicaremos en un directorio el cual pueda ser leido y ejecutado por zimbra.
antes de todo vamos a crear en /var/tmp una carpeta para mantener los archivos de control, logs y demás archivos que genera el script, entonces seria algo como lo siguiente:
mkdir /var/tmp/zimbra ; chown -R zimbra /var/tmp/zimbra
tambien necesitamos crear y dar permisos al directorio en conde vamos a enviar las carpetas del backup para este caso lo vamos a dejar en /mnt, entonces quedaría de la siguiente forma:
mkdir /mnt/backup ; chown -R zimbra /mnt/backup
pues bien ahora tenemos el script:
##################bweek.sh############
#!/bin/bash
PLOG=/var/tmp/zimbra/copia.log
DIRC=/var/tmp/zimbra
DIRB=/mnt/backup
# rutina para la verificar si ya existe un proceso de backup.
if [ -e $DIRC/copia.lock ] ; then
echo "$(date) ya hay un proceso de copia ejecutandose" >> $PLOG
exit 1
fi
# -----------------------------------
echo "$(date) Se inicia el proceso de copia de seguridad" >> $PLOG
touch $DIRC/copia.lock
if [ -e $DIRC/fecha.ctrl ] ; then
FECHA=`cat $DIRC/fecha.ctrl`
MESI=`cat $DIRC/datesback.ctrl | awk -F: '{print $1}'`
DIAI=`cat $DIRC/datesback.ctrl | awk -F: '{print $2}'`
MESF=`cat $DIRC/datesback.ctrl | awk -F: '{print $3}'`
DIAF=`cat $DIRC/datesback.ctrl | awk -F: '{print $4}'`
YEAR=`cat $DIRC/datesback.ctrl | awk -F: '{print $5}'`
else
FECHA="`date +%d%m%Y -d '1 week ago 1 day ago'`to`date +%d%m%Y -d 'now'`"
DIAI=`date +%d -d '1 week ago 1 day ago' | bc`
DIAF=`date +%d -d 'now' | bc`
MESI=`date +%m -d '1 week ago' | bc`
MESF=`date +%m -d 'now' | bc`
YEAR=`date +%Y -d 'now'`
fi
# rutina para verificar si la carpeta ya existe si no existe la crea.
if [ ! -e $DIRB/$FECHA ] ; then
mkdir $DIRB/$FECHA
/opt/zimbra/bin/zmprov -l gaa > $DIRC/users.txt
sed -i '/spam.*\|ham.*\|virus-*\|quarantine.*\|admin/d' $DIRC/users.txt
sed -i 's/@midominio.com.co//g' $DIRC/users.txt
fi
cat $DIRC/users.txt | while read usuario
do
echo "$(date) backup to $usuario" >> $PLOG #falta el filtro para tomar desde fechas el backup
/opt/zimbra/bin/zmmailbox -z -m $usuario@midominio.com.co getRestURL -o $DIRB/$FECHA/$usuario.tgz "//?fmt=tgz&query=before:$MESF/$DIAF/$YEAR and after:$MESI/$DIAI/$YEAR" 2> $DIRC/dumperr.log
ERR=$?
if [ "`cat $DIRC/dumperr.log | grep 'No data found'`" == "" ] ; then
if [ $ERR -eq 0 ] ; then
sed -i "/$usuario/d" $DIRC/users.txt
echo "$(date) Finalizó correctamente" >> $PLOG
else
echo "$(date) error en el backup del usuario $usuario" >> $PLOG
fi
else
sed -i "/$usuario/d" $DIRC/users.txt
echo "$(date) Finalizó, no se encontraron datos" >> $PLOG
fi
done
# crear rutina en caso que no haya terminado agregue una linea al cron para que automatice
if [ "`cat $DIRC/users.txt`" == "" ] ; then
echo "$(date) El proceso de copia de seguridad termino exitosamente para todos los usuarios" >> $PLOG
if [ -e $DIRC/fecha.ctrl ] ; then
rm -f $DIRC/fecha.ctrl
rm -f $DIRC/datesback.ctrl
crontab -l > /tmp/crontabzim.tmp
sed -i "/backup-semanal/d" /tmp/crontabzim.tmp
crontab /tmp/crontabzim.tmp
rm -f /tmp/crontabzim.tmp
fi
else
# echo "$(date) El proceso de copia de seguridad no termino para todos los usuarios.. agregando registro a crontab y capturando la fecha de copia" >> $PLOG
if [ ! -e $DIRC/fecha.ctrl ] ; then
echo "$(date) El proceso de copia de seguridad no termino para todos los usuarios.. agregando registro a crontab y capturando la fecha de copia" >> $PLOG
crontab -l > /tmp/crontabzim.tmp
echo "*/20 * * * * $DIRC/backup-semanal.sh" >> /tmp/crontabzim.tmp
crontab /tmp/crontabzim.tmp
rm -f /tmp/crontabzim.tmp
echo $FECHA >> $DIRC/fecha.ctrl
echo "$MESI:$DIAI:$MESF:$DIAF:$YEAR" >> $DIRC/datesback.ctrl
else
echo "$(date) El proceso de copia de seguridad no termino para todos los usuarios.. pero ya hay un archivo de control para continuar con el backup" >> $PLOG
fi
fi
rm -f $DIRC/copia.lock
############fin del script###############
Pues bien ya tenemos el script ahora vamos a comentar las partes mas importantes del script.
1) Las variables de las fechas, los días y los meses:
FECHA="`date +%d%m%Y -d '1 week ago 1 day ago'`to`date +%d%m%Y -d 'now'`"
DIAI=`date +%d -d '1 week ago 1 day ago' | bc`
DIAF=`date +%d -d 'now' | bc`
MESI=`date +%m -d '1 week ago' | bc`
MESF=`date +%m -d 'now' | bc`
YEAR=`date +%Y -d 'now'`
Estas variables lo que nos permite es capturar una fecha inmediata (la fecha final de la copia) y las fechas iniciales de copia es decir una semana antes de lanzarse el script.
2) la orden de copia del buzón en especifico:
/opt/zimbra/bin/zmmailbox -z -m $usuario@midominio.com.co getRestURL -o $DIRB/$FECHA/$usuario.tgz "//?fmt=tgz&query=before:$MESF/$DIAF/$YEAR and after:$MESI/$DIAI/$YEAR" 2> $DIRC/dumperr.log
aquí lo que se tiene es basicamente la cadena construida para el backup, en donde se enmarca el usuario al cual se le hará la copia $usuario@midominio.com.co, la ruta a donde se enviará la copia $DIRB/$FECHA/$usuario.tgz, el formato de compresión y la cadena de filtro o query //?fmt=tgz&query=before:$MESF/$DIAF/$YEAR and after:$MESI/$DIAI/$YEAR, En este segmento debemos tener muy en cuenta que el formato de fecha es MM/DD/YYYY ademas de esto en caso que un mes este compuesto por un solo dígito no se aceptará el anteponer 0, y por ultimo el capturar el resultado de la operación 2> $DIRC/dumperr.log, esto basicamente lo hacemos es para poder establecer si un buzón esta vacío, en caso de estar vacío lo tomamos como una backup exitoso.
3) la sección en donde se manipula el crontab de zimbra, esto lo hacemos para poder retomar un backup en caso tal que se hayan tenido errores durante el primer intento.
Muy bien esto a sido todo por el momento, estoy seguro que a alguien le va a ser util ;) por lo menos a mi me fue muy util..
PD: recomendaciones, insultos, quejas y otras son bienvenidas ;)
para este caso solamente tenemos un script llamado bweek.sh el cual ubicaremos en un directorio el cual pueda ser leido y ejecutado por zimbra.
antes de todo vamos a crear en /var/tmp una carpeta para mantener los archivos de control, logs y demás archivos que genera el script, entonces seria algo como lo siguiente:
mkdir /var/tmp/zimbra ; chown -R zimbra /var/tmp/zimbra
tambien necesitamos crear y dar permisos al directorio en conde vamos a enviar las carpetas del backup para este caso lo vamos a dejar en /mnt, entonces quedaría de la siguiente forma:
mkdir /mnt/backup ; chown -R zimbra /mnt/backup
pues bien ahora tenemos el script:
##################bweek.sh############
#!/bin/bash
PLOG=/var/tmp/zimbra/copia.log
DIRC=/var/tmp/zimbra
DIRB=/mnt/backup
# rutina para la verificar si ya existe un proceso de backup.
if [ -e $DIRC/copia.lock ] ; then
echo "$(date) ya hay un proceso de copia ejecutandose" >> $PLOG
exit 1
fi
# -----------------------------------
echo "$(date) Se inicia el proceso de copia de seguridad" >> $PLOG
touch $DIRC/copia.lock
if [ -e $DIRC/fecha.ctrl ] ; then
FECHA=`cat $DIRC/fecha.ctrl`
MESI=`cat $DIRC/datesback.ctrl | awk -F: '{print $1}'`
DIAI=`cat $DIRC/datesback.ctrl | awk -F: '{print $2}'`
MESF=`cat $DIRC/datesback.ctrl | awk -F: '{print $3}'`
DIAF=`cat $DIRC/datesback.ctrl | awk -F: '{print $4}'`
YEAR=`cat $DIRC/datesback.ctrl | awk -F: '{print $5}'`
else
FECHA="`date +%d%m%Y -d '1 week ago 1 day ago'`to`date +%d%m%Y -d 'now'`"
DIAI=`date +%d -d '1 week ago 1 day ago' | bc`
DIAF=`date +%d -d 'now' | bc`
MESI=`date +%m -d '1 week ago' | bc`
MESF=`date +%m -d 'now' | bc`
YEAR=`date +%Y -d 'now'`
fi
# rutina para verificar si la carpeta ya existe si no existe la crea.
if [ ! -e $DIRB/$FECHA ] ; then
mkdir $DIRB/$FECHA
/opt/zimbra/bin/zmprov -l gaa > $DIRC/users.txt
sed -i '/spam.*\|ham.*\|virus-*\|quarantine.*\|admin/d' $DIRC/users.txt
sed -i 's/@midominio.com.co//g' $DIRC/users.txt
fi
cat $DIRC/users.txt | while read usuario
do
echo "$(date) backup to $usuario" >> $PLOG #falta el filtro para tomar desde fechas el backup
/opt/zimbra/bin/zmmailbox -z -m $usuario@midominio.com.co getRestURL -o $DIRB/$FECHA/$usuario.tgz "//?fmt=tgz&query=before:$MESF/$DIAF/$YEAR and after:$MESI/$DIAI/$YEAR" 2> $DIRC/dumperr.log
ERR=$?
if [ "`cat $DIRC/dumperr.log | grep 'No data found'`" == "" ] ; then
if [ $ERR -eq 0 ] ; then
sed -i "/$usuario/d" $DIRC/users.txt
echo "$(date) Finalizó correctamente" >> $PLOG
else
echo "$(date) error en el backup del usuario $usuario" >> $PLOG
fi
else
sed -i "/$usuario/d" $DIRC/users.txt
echo "$(date) Finalizó, no se encontraron datos" >> $PLOG
fi
done
# crear rutina en caso que no haya terminado agregue una linea al cron para que automatice
if [ "`cat $DIRC/users.txt`" == "" ] ; then
echo "$(date) El proceso de copia de seguridad termino exitosamente para todos los usuarios" >> $PLOG
if [ -e $DIRC/fecha.ctrl ] ; then
rm -f $DIRC/fecha.ctrl
rm -f $DIRC/datesback.ctrl
crontab -l > /tmp/crontabzim.tmp
sed -i "/backup-semanal/d" /tmp/crontabzim.tmp
crontab /tmp/crontabzim.tmp
rm -f /tmp/crontabzim.tmp
fi
else
# echo "$(date) El proceso de copia de seguridad no termino para todos los usuarios.. agregando registro a crontab y capturando la fecha de copia" >> $PLOG
if [ ! -e $DIRC/fecha.ctrl ] ; then
echo "$(date) El proceso de copia de seguridad no termino para todos los usuarios.. agregando registro a crontab y capturando la fecha de copia" >> $PLOG
crontab -l > /tmp/crontabzim.tmp
echo "*/20 * * * * $DIRC/backup-semanal.sh" >> /tmp/crontabzim.tmp
crontab /tmp/crontabzim.tmp
rm -f /tmp/crontabzim.tmp
echo $FECHA >> $DIRC/fecha.ctrl
echo "$MESI:$DIAI:$MESF:$DIAF:$YEAR" >> $DIRC/datesback.ctrl
else
echo "$(date) El proceso de copia de seguridad no termino para todos los usuarios.. pero ya hay un archivo de control para continuar con el backup" >> $PLOG
fi
fi
rm -f $DIRC/copia.lock
############fin del script###############
Pues bien ya tenemos el script ahora vamos a comentar las partes mas importantes del script.
1) Las variables de las fechas, los días y los meses:
FECHA="`date +%d%m%Y -d '1 week ago 1 day ago'`to`date +%d%m%Y -d 'now'`"
DIAI=`date +%d -d '1 week ago 1 day ago' | bc`
DIAF=`date +%d -d 'now' | bc`
MESI=`date +%m -d '1 week ago' | bc`
MESF=`date +%m -d 'now' | bc`
YEAR=`date +%Y -d 'now'`
Estas variables lo que nos permite es capturar una fecha inmediata (la fecha final de la copia) y las fechas iniciales de copia es decir una semana antes de lanzarse el script.
2) la orden de copia del buzón en especifico:
/opt/zimbra/bin/zmmailbox -z -m $usuario@midominio.com.co getRestURL -o $DIRB/$FECHA/$usuario.tgz "//?fmt=tgz&query=before:$MESF/$DIAF/$YEAR and after:$MESI/$DIAI/$YEAR" 2> $DIRC/dumperr.log
aquí lo que se tiene es basicamente la cadena construida para el backup, en donde se enmarca el usuario al cual se le hará la copia $usuario@midominio.com.co, la ruta a donde se enviará la copia $DIRB/$FECHA/$usuario.tgz, el formato de compresión y la cadena de filtro o query //?fmt=tgz&query=before:$MESF/$DIAF/$YEAR and after:$MESI/$DIAI/$YEAR, En este segmento debemos tener muy en cuenta que el formato de fecha es MM/DD/YYYY ademas de esto en caso que un mes este compuesto por un solo dígito no se aceptará el anteponer 0, y por ultimo el capturar el resultado de la operación 2> $DIRC/dumperr.log, esto basicamente lo hacemos es para poder establecer si un buzón esta vacío, en caso de estar vacío lo tomamos como una backup exitoso.
3) la sección en donde se manipula el crontab de zimbra, esto lo hacemos para poder retomar un backup en caso tal que se hayan tenido errores durante el primer intento.
Muy bien esto a sido todo por el momento, estoy seguro que a alguien le va a ser util ;) por lo menos a mi me fue muy util..
PD: recomendaciones, insultos, quejas y otras son bienvenidas ;)
martes, 29 de noviembre de 2011
WPAD (Web Proxy Auto Discovery) ClearOS linux
Y seguimos con otra entrada esta ves relacionada a autoconfiguración de proxys, esta ves el caso es el siguiente:
La empresa tiene funcionarios que se estan desplazando continuamente por las sedes ubicadas en el país lo cual implica que cada ves que llegan a una oficina es necesario llamar al técnico para que configure el proxy (es obligatorio en toda sede el uso de proxy) a lo cual se exigió una solución.
La respuesta a este incidente es WPAD que básicamente consiste en que el navegador busque la configuración del proxy en caso de no encontrar nada deja al navegador sin proxy, pues bien para esto necesitamos varios componentes:
1) servidor web
2) servidor dns o DHCP
3) script
1) Pues inicialmente necesitamos el navegador web para publicar el script (javascript) para que el navegador lo lea y lo entregue al navegador, para este caso que estamos trabajando con ClearOS él ya tiene un servidor corriendo lo que se llama webconfig, por lo tanto no necesitamos instalar mas servicios, el cual el directorio de trabajo es /var/webconfig/htdocs/ ese es el directorio en donde colocaremos el script del paso 3.
2) En nuestro caso utilizaremos la configuración con dns ya que la configuración por DHCP no es reconocida por firefox solo por IE, una ves aclarado esto podemos continuar, vamos a las configuraciones del DNS, necesitamos una zona dedicada a la LAN en caso de tener en el mismo servidor zonas externas e internas, para el caso presente vamos a /var/named o en donde se tenga las configuraciones de las zonas DNS y agregamos los siguientes registros:
wpad IN A 192.168.0.1
IN TXT "service: wpad:!http://wpad.midominio.com:82/wpad.dat"
wpad.tcp IN SRV 0 0 80 wpad.midominio.com.
En esta configuración ya debemos tener varios aspectos en cuenta, primero es en donde va a estar ubicado el archivo de configuración "http://wpad.midominio.com:82/wpad.dat" la razón para que el puerto sea el 82 es que el webconfig de clearOS escucha por este puerto, lo otro es que la ip a la que apunta el registro wpad debe ser en donde este el servidor web (casi lógico) recargamos el servicio dns y con esto ya terminamos esta sección.
3) Ahora la parte mas importante es el script que autoconfigurará el navegador, este script en este caso se llama wpad.dat, estará ubicado en /var/webconfig/htdocs/ de ClearOS y tendrá el siguiente contenido:
function FindProxyForURL(url, host)
{
return "PROXY fw.midomonio.com.co:8080";
}
Con esto terminamos este minihowto el cual nos ahorrará mucho tiempo en la administración de las maquinas así como tiempo de los técnicos de soporte.
Referencias: http://boticati.wordpress.com/2009/11/04/implementar-wpad-dat-en-linux/
http://www.findproxyforurl.com/pac_functions_explained.html
La empresa tiene funcionarios que se estan desplazando continuamente por las sedes ubicadas en el país lo cual implica que cada ves que llegan a una oficina es necesario llamar al técnico para que configure el proxy (es obligatorio en toda sede el uso de proxy) a lo cual se exigió una solución.
La respuesta a este incidente es WPAD que básicamente consiste en que el navegador busque la configuración del proxy en caso de no encontrar nada deja al navegador sin proxy, pues bien para esto necesitamos varios componentes:
1) servidor web
2) servidor dns o DHCP
3) script
1) Pues inicialmente necesitamos el navegador web para publicar el script (javascript) para que el navegador lo lea y lo entregue al navegador, para este caso que estamos trabajando con ClearOS él ya tiene un servidor corriendo lo que se llama webconfig, por lo tanto no necesitamos instalar mas servicios, el cual el directorio de trabajo es /var/webconfig/htdocs/ ese es el directorio en donde colocaremos el script del paso 3.
2) En nuestro caso utilizaremos la configuración con dns ya que la configuración por DHCP no es reconocida por firefox solo por IE, una ves aclarado esto podemos continuar, vamos a las configuraciones del DNS, necesitamos una zona dedicada a la LAN en caso de tener en el mismo servidor zonas externas e internas, para el caso presente vamos a /var/named o en donde se tenga las configuraciones de las zonas DNS y agregamos los siguientes registros:
wpad IN A 192.168.0.1
IN TXT "service: wpad:!http://wpad.midominio.com:82/wpad.dat"
wpad.tcp IN SRV 0 0 80 wpad.midominio.com.
En esta configuración ya debemos tener varios aspectos en cuenta, primero es en donde va a estar ubicado el archivo de configuración "http://wpad.midominio.com:82/wpad.dat" la razón para que el puerto sea el 82 es que el webconfig de clearOS escucha por este puerto, lo otro es que la ip a la que apunta el registro wpad debe ser en donde este el servidor web (casi lógico) recargamos el servicio dns y con esto ya terminamos esta sección.
3) Ahora la parte mas importante es el script que autoconfigurará el navegador, este script en este caso se llama wpad.dat, estará ubicado en /var/webconfig/htdocs/ de ClearOS y tendrá el siguiente contenido:
function FindProxyForURL(url, host)
{
return "PROXY fw.midomonio.com.co:8080";
}
Con esto terminamos este minihowto el cual nos ahorrará mucho tiempo en la administración de las maquinas así como tiempo de los técnicos de soporte.
Referencias: http://boticati.wordpress.com/2009/11/04/implementar-wpad-dat-en-linux/
http://www.findproxyforurl.com/pac_functions_explained.html
jueves, 20 de octubre de 2011
REDIRECCIÓN DE TRAFICO ENTRE SERVIDORES INTERNOS
En la constante mejora que se lleva en la empresa a nacido la necesidad de redirigir trafico que llegaba a un servidor, la redirección no solamente es de puertos si no de ip..
entonces el trafico llega a un servidor 192.168.x.20 al puerto 8080 en este servidor no existe servicio en ese puerto. a lo cual hay que redirigir el trafico al servidor 192.168.x.30 al puerto 80
las reglas quedarian de la siguiente forma:
iptables -t nat -A PREROUTING -d 192.168.x.20 -p tcp --dport 8080 -j DNAT --to 192.168.x.30:80
iptables -t nat -A POSTROUTING -d 192.168.x.30 -j MASQUERADE
Es necesario también tener habilitado el reenvío de paquetes (en este caso para ipv4):
echo 1 > /proc/sys/net/ipv4/ip_forward
ó en /etc/sysctl.conf (para que tome los cambios sysctl -p)
agregar o modificar la siguiente linea y dejarla de la siguiente forma:
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
Seguidamente vamos a dejar las reglas para que sean permanentes, en este caso estamos trabajando con CentOS (RedHat) asi que procedemos a modificar el script de inicio de iptables /etc/sysconfig/iptables
y al final del archivo o en su respectiva sección de NAT agregamos (si ya tenemos la sección de nat, debemos omitir desde la linea 1 hasta la 4 y la ultima linea)
*nat
:PREROUTING ACCEPT [114:6773]
:POSTROUTING ACCEPT [628:39550]
:OUTPUT ACCEPT [628:39550]
-A PREROUTING -d 192.168.100.13 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.100.23:80
-A POSTROUTING -d 192.168.100.23 -j MASQUERADE
COMMIT
Una ves hecho esto ya debe redireccionar el trafico que llegue al puerto 8080 al segundo host al puerto 80.
fuentes:
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
http://adminuser.wordpress.com/2008/03/17/redirecting-network-traffic-to-a-new-ip-using-iptables/
entonces el trafico llega a un servidor 192.168.x.20 al puerto 8080 en este servidor no existe servicio en ese puerto. a lo cual hay que redirigir el trafico al servidor 192.168.x.30 al puerto 80
las reglas quedarian de la siguiente forma:
iptables -t nat -A PREROUTING -d 192.168.x.20 -p tcp --dport 8080 -j DNAT --to 192.168.x.30:80
iptables -t nat -A POSTROUTING -d 192.168.x.30 -j MASQUERADE
Es necesario también tener habilitado el reenvío de paquetes (en este caso para ipv4):
echo 1 > /proc/sys/net/ipv4/ip_forward
ó en /etc/sysctl.conf (para que tome los cambios sysctl -p)
agregar o modificar la siguiente linea y dejarla de la siguiente forma:
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
Seguidamente vamos a dejar las reglas para que sean permanentes, en este caso estamos trabajando con CentOS (RedHat) asi que procedemos a modificar el script de inicio de iptables /etc/sysconfig/iptables
y al final del archivo o en su respectiva sección de NAT agregamos (si ya tenemos la sección de nat, debemos omitir desde la linea 1 hasta la 4 y la ultima linea)
*nat
:PREROUTING ACCEPT [114:6773]
:POSTROUTING ACCEPT [628:39550]
:OUTPUT ACCEPT [628:39550]
-A PREROUTING -d 192.168.100.13 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.100.23:80
-A POSTROUTING -d 192.168.100.23 -j MASQUERADE
COMMIT
Una ves hecho esto ya debe redireccionar el trafico que llegue al puerto 8080 al segundo host al puerto 80.
fuentes:
http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables
http://adminuser.wordpress.com/2008/03/17/redirecting-network-traffic-to-a-new-ip-using-iptables/
martes, 12 de julio de 2011
GNU/Linux - Bloquear Ctrl + C y Ctrl + Z
Por estos días reviviendo viejos tiempos en donde me defendía un poco con bash me encuentro con la necesidad de hacer un menú de selección básico con el detalle de no permitir al usuario escapar de ese mené si no obligarlo a entrar a un programa.
Buscando en inet me encuentro con que esto se puede hacer con la instrucción "trap" que básicamente lo que hace es capturar una señal del sistema (algunas se llaman a través de combinaciones de teclas como las que queremos bloquear) y ejecuta una orden.
claro esto, la orden quedaría de la siguiente forma
trap "" 2 20
Colocamos esta instrucción al inicio del script que se quiera ejecutar y listo.
A continuación se deja la tabla de señales del sistema:
1) SIGHUP
2) SIGINT
3) SIGQUIT
4) SIGILL
5) SIGTRAP
6) SIGABRT
7) SIGBUS
8) SIGFPE
9) SIGKILL
10) SIGUSR1
11) SIGSEGV
12) SIGUSR2
13) SIGPIPE
14) SIGALRM
15) SIGTERM
16) SIGSTKFLT
17) SIGCHLD
18) SIGCONT
19) SIGSTOP
20) SIGTSTP
21) SIGTTIN
22) SIGTTOU
23) SIGURG
24) SIGXCPU
25) SIGXFSZ
26) SIGVTALRM
27) SIGPROF
28) SIGWINCH
29) SIGIO
30) SIGPWR
31) SIGSYS
34) SIGRTMIN
35) SIGRTMIN+1
36) SIGRTMIN+2
37) SIGRTMIN+3
38) SIGRTMIN+4
39) SIGRTMIN+5
40) SIGRTMIN+6
41) SIGRTMIN+7
42) SIGRTMIN+8
43) SIGRTMIN+9
44) SIGRTMIN+10
45) SIGRTMIN+11
46) SIGRTMIN+12
47) SIGRTMIN+13
48) SIGRTMIN+14
49) SIGRTMIN+15
50) SIGRTMAX-14
51) SIGRTMAX-13
52) SIGRTMAX-12
53) SIGRTMAX-11
54) SIGRTMAX-10
55) SIGRTMAX-9
56) SIGRTMAX-8
57) SIGRTMAX-7
58) SIGRTMAX-6
59) SIGRTMAX-5
60) SIGRTMAX-4
61) SIGRTMAX-3
62) SIGRTMAX-2
63) SIGRTMAX-1
64) SIGRTMAX
Extraído del siguiente post: http://nixcraft.com/shell-scripting/12605-shell-script-disable-ctrl-c-ctrl-z.html
Buscando en inet me encuentro con que esto se puede hacer con la instrucción "trap" que básicamente lo que hace es capturar una señal del sistema (algunas se llaman a través de combinaciones de teclas como las que queremos bloquear) y ejecuta una orden.
claro esto, la orden quedaría de la siguiente forma
trap "" 2 20
Colocamos esta instrucción al inicio del script que se quiera ejecutar y listo.
A continuación se deja la tabla de señales del sistema:
1) SIGHUP
2) SIGINT
3) SIGQUIT
4) SIGILL
5) SIGTRAP
6) SIGABRT
7) SIGBUS
8) SIGFPE
9) SIGKILL
10) SIGUSR1
11) SIGSEGV
12) SIGUSR2
13) SIGPIPE
14) SIGALRM
15) SIGTERM
16) SIGSTKFLT
17) SIGCHLD
18) SIGCONT
19) SIGSTOP
20) SIGTSTP
21) SIGTTIN
22) SIGTTOU
23) SIGURG
24) SIGXCPU
25) SIGXFSZ
26) SIGVTALRM
27) SIGPROF
28) SIGWINCH
29) SIGIO
30) SIGPWR
31) SIGSYS
34) SIGRTMIN
35) SIGRTMIN+1
36) SIGRTMIN+2
37) SIGRTMIN+3
38) SIGRTMIN+4
39) SIGRTMIN+5
40) SIGRTMIN+6
41) SIGRTMIN+7
42) SIGRTMIN+8
43) SIGRTMIN+9
44) SIGRTMIN+10
45) SIGRTMIN+11
46) SIGRTMIN+12
47) SIGRTMIN+13
48) SIGRTMIN+14
49) SIGRTMIN+15
50) SIGRTMAX-14
51) SIGRTMAX-13
52) SIGRTMAX-12
53) SIGRTMAX-11
54) SIGRTMAX-10
55) SIGRTMAX-9
56) SIGRTMAX-8
57) SIGRTMAX-7
58) SIGRTMAX-6
59) SIGRTMAX-5
60) SIGRTMAX-4
61) SIGRTMAX-3
62) SIGRTMAX-2
63) SIGRTMAX-1
64) SIGRTMAX
Extraído del siguiente post: http://nixcraft.com/shell-scripting/12605-shell-script-disable-ctrl-c-ctrl-z.html
Suscribirse a:
Entradas (Atom)