viernes, 26 de julio de 2013

Proxy en Wget

Como siempre por cosas de trabajo me encuentro en la oportunidad de incluir esta nota sobre como configurar wget en una red que emplea proxy con autentificación.

El procedimiento en realidad es muy sencillo, basta simplemente con agregar los detalles del proxy a la configuración de Wget, para ello simplemente es necesario editar el archivo /etc/wgetrc y descomentar o agregar las siguientes lineas:

https_proxy = http://192.168.53.37:8080
http_proxy = http://192.168.53.37:8080
ftp_proxy = http://192.168.53.37:8080

proxy-user = e06827
proxy-passwd = @@Pplqm51ed/9

use_proxy = on






En el caso que nuestro proxy no emplee autentificación podemos omitir proxy-user y proxy-passwd.

lunes, 22 de julio de 2013

NFS

Compartir archivos por la red es hoy en dia una tarea trivial; tanto, que incluso en GNU/Linux disponemos de gran variedad de opciones, cada una a medida de las diferentes necesidades.

En esta oportunidad voy a hablar sobre una de ellas NFS, uno de mis tantos pendientes en el Blog y que al fin tengo oportunidad de saldar gracias al día a dia del trabajo. En cualquier caso, de manera sencilla podemos decir que NFS es:

"es un protocolo de nivel de aplicación, según el Modelo OSI. Es utilizado para sistemas de archivos distribuido en un entorno de red de computadoras de área local. Posibilita que distintos sistemas conectados a una misma red accedan a ficheros remotos como si se tratara de locales. Originalmente fue desarrollado en 1984 por Sun Microsystems, con el objetivo de que sea independiente de la máquina, el sistema operativo y el protocolo de transporte, esto fue posible gracias a que está implementado sobre los protocolos XDR (presentación) y ONC RPC (sesión).1 El protocolo NFS está incluido por defecto en los Sistemas Operativos UNIX y la mayoría de distribuciones Linux. "

Wikipedia.

Existen tres versiones de NFS que se utilizan hoy en día:

  • NFSv2: Es la versión más antigua y mejor soportada.
  • NFSv3: Tiene más características que NFSv2, como el manejo de archivos de tamaño variable y mejores informes de errores. Sólo es parcialmente compatible con los clientes para NFSv2.
  • NFSv4: Es la versión más moderna, y, entre otras cosas, incluye soporte para seguridad a través de Kerberos, soporte para ACL y utiliza operaciones con descripción del estado.
En general, hay serias consideraciones que debemos realizar al momento de optar por esta solución, sobre todo en lo relacionado con la seguridad (no voy a entrar en detalles sobre esto en el articulo). En todo caso para aquellos que ya han decidido ir adelante con la solución veamos el proceso de Setup de NFS.

Equipamento Necesario:


En la mayoria de las distribuciones linux, el paquete nfs-utils (el paquete necesario para instalar tanto el cliente como el servidor NFS) viene incluido por default, pero en caso de no ser así simplemente debemos instalarlo con nuestro manejador de paquete. En mi caso:

# yum install nfs-utils

Alternativamente, si son de las personas que prefieren realizar todo por entorno gráfico, seguramente les gustara instalar:

# yum install system-config-nfs

Con esta aplicación pueden ejecutar de manera grafica cada uno de los pasos que voy a comentar aca (la configuración por esta utilidad la dejare fuera del articulo).

Definir los puertos:

En entornos RHEL es necesario definir los puertos que utilizara NFS, debido a que el firewall es incapaz de abrir dinámicamente los puertos aleatorios que de un modo predeterminado utiliza este.

Para esto, lo que debemos es editar el archivo /etc/sysconfig/nfs, habilitando o modificando los siguientes parametros:

RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662

* Este paso lo podemos omitir en caso de que vallamos a ejecutar NFS sin Firewall en una red local.

Iniciar NFS:

NFS requiere los servicios rpcbind y nfslock para ejecutarse, por lo tanto estos deben estar activos y funcionando:

# service rpcbind start
# service nfslock start

Para iniciar nfs:

# service nfs start

Para evitar ejecutar estos pasos cada vez que se inicie el equipo y hacer que el sistema autoinicie los servicios ejecutamos:

# chkconfig nfs on
# chkconfig rpcbind on
# chkconfig nfslock on

Modificando host permitidos y denegados:

Con el objeto de hacer el servicio un poco mas seguro, es posible configurar una lista de host permitidos y denegados; de esta manera no todos en la red pueden acceder a nuestro recurso compartido. Para hacer esto es necesario que:

Editar el archivo /etc/hosts.deny y añadir el siguiente contenido:

portmap: ALL
lockd: ALL
mountd: ALL
rquotad: ALL
statd: ALL

Posteriormente, vamos a modificar /etc/hosts.allow para de esta manera indicar cuales hosts tendrán permitida la conexión:

portmap: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
lockd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
mountd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
rquotad: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29
statd: 192.168.70.0/25, 172.16.1.0/28, 10.0.1.0/29

* Esto asumiendo que se permitirá acceso a las redes 192.168.70.0/25, 172.16.1.0/28 y 10.0.1.0/29 (se debe personalizar en base a nuestras necesidades).

Modificaciones en el Firewall:

Para servidores de NFSv4, en realidad sólo es necesario abrir en el muro cortafuegos el puerto 2049/TCP (nfs), pues es esta versión dejó de depender del servicio de mapa de puertos (portmap). Sin embargo, para poder trabajar con compatibilidad para NFSv2 y NFSv3, es necesario abrir los puertos 111/UDP, 111/TCP, 662/TCP, 662/UDP, 875/TCP, 875/UDP, 892/TCP, 892/UDP, 2029/TCP, 2049/UDP, 32803/TCP y 32769/UDP. Los puertos que se abran para los servicios lockd, mountd, rquotad y statd deben corresponder con los mismo puertos definidos el archivo /etc/sysconfig/nfs.

Para aplicar estos cambios de forma definitiva modificamos el archivo  /etc/sysconfig/iptables asi:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 662 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 32769 -j ACCEPT

Finalmente, para que todo surja efecto reiniciamos las reglas iptables:

# service iptables restart

Exportando:

NFS funciona simplemente agregando los recursos a compartir y sus reglas en el archivo /etc/exports. Este archivo tiene una estructura simple, pero rigida:

/directorio/a/compartir  EquiposQueConectaranAlRecurso(Reglas)

Podemos obtener un buen listado de ejemplos acá.

Montando el filesystem en el cliente:

Para montar el sistema de archivos NFS se emplea el comando mount:

# mount -t nfs servidor:/directorio /punto/de/montaje/local

Para hacer permanente este punto editamos el /etc/fstab agregando una entrada así:

servidor:/directorio   /punto/montaje   nfs4   opciones  0 0



miércoles, 13 de febrero de 2013

Single User RHEL

Una entrada muy corta sobre el modo Single User en RHEL, el modo 1 o la base para ejecutar el recovery en sistemas. En fin, una de las mejores formas para solucionar problemas en el sistema, siempre y cuando por lo menos podamos llegar al nivel del grub en el momento del arranque.

Para iniciar en modo a prueba de fallo simplemente debemos:

  1. Seleccionar una de las entradas de sistema operativo desde el menú del Grub.
  2. Presionar la tecla "e", para ingresar a la opción de edición de los parametros.
  3. Agregar a los parámetros del kernel la opción "single". Alternativamente, si queremos podemos también agregar la opción de indicar nuestro bash (init=/bin/bash).
  4. Finalmente para botear con nuestra modificación desde el menú del grub seleccionamos y tecleamos "b".
  5. Si todo ha ido bien nos dejara en una consola de sistema, en modo mono-usuario sin acceso a la red desde el cual podemos iniciar la reparación de nuestro sistema.

lunes, 28 de enero de 2013

SELinux

La verdad, no voy a entrar en polemica alguna sobre SELinux, por ahora; solo voy a comentar como saber el estatus de SELinux en nuestro RHEL.

El comando sestatus nos retorna la información básica del SELinux, si esta siendo usado y las politicas:


Adicionalmente, podemos conocer el estado del SELinux, con el comando getenforce, el cual nos retornara el Status/Current Mode.


Ip's Virtuales en RHEL

En linux, es posible asignarle mas de una dirección ip a una interfaz física haciendo uso de las llamadas Virtual Ip (VIP). Hoy me veo en la necesidad de configurar algunas y noto que no he hablado de eso por acá, por lo que me tomo un momento para realizar la nota.

En Distros basadas en RHEL este proceso es muy sencillo, basta simplemente con copiar el archivo de configuración que ya tengamos con un nuevo nombre del tipo ifcfg-ethX:X

ifcfg-eth0:
 
DEVICE=eth0 
BOOTPROTO=static 
HWADDR=00:22:ñe:3c:3w:72 
IPADDR=192.168.0.110 
NETMASK=255.255.255.0 
ONBOOT=yes 
GATEWAY=192.168.0.1 
TYPE=Ethernet
 
 
ifcfg-eth0:

DEVICE=eth0:0 
BOOTPROTO=static 
HWADDR=00:22:ñe:3c:3w:72 
IPADDR=192.168.0.111 
NETMASK=255.255.255.0 
ONBOOT=yes 
GATEWAY=192.168.0.1
 TYPE=Ethernet


De similar manera si tenemos configurado un bonding:

ifcfg-bond0:

DEVICE=bond0 
BOOTPROTO=none 
IPADDR=10.200.1.14 
NETMASK=255.255.255.0 
BONDING_OPTS="miimon=100 mode=1 primary=eth0" USERCTL=no
ONBOOT=yes

ifcfg-bond0:0

DEVICE=bond0:0 
BOOTPROTO=none 
IPADDR=10.200.1.118 
NETMASK=255.255.255.0 
ONBOOT=yes

jueves, 10 de enero de 2013

habilitando Mod_Rewrite Apache

En esta pequeña entrada, voy a comentar la forma de habilitar Mod_Rewrite en un Servidor Apache instalado en Fedora 17. El proceso es realmente muy sencillo:

  • Acceder al archivo de configuración del apache (/etc/httpd/conf/httpd.conf) y modificar la linea "AllowOverride", cambiando el parametro de "Limit" a "All". Esto debe hacerse para la directiva "Directory /" y la directiva "Directory /var/www/html".
  • De igual forma, vamos a localizar en el archivo la linea "LoadModule rewrite_module modules/mod_rewrite.so" y verificamos que no se encuentre comentada (no inicia con"#").
  • Luego de realizado el cambio, reiniciamos el servidor apache (service httpd restart) y listo.
Finalmente, podemos realizar una prueba ejecutando el procedimiento comentado en este site.

martes, 8 de enero de 2013

Esteganografía con Tomb

Tomb también cuenta con una serie de herramientas muy interesantes para la seguridad, una de ellas la de hacer esteganografía (ocultar contenido en imagenes) para ocultar la llave y aumentar aun mas la seguridad de la tumba.

Para poder realizar este proceso, Tomb requiere tener instalado steghide, por lo que es necesario instalar este pre-requisito antes de ejecutar cualquier cosa.

Haciendo esteganografía:


tomb bury

Extrayendo la clave:


tomb exhume


Tomb - Tumbas Criptograficas

No hay secreto alguno al decir que nos encontramos en la era de la información, una época en la que la media de datos por persona es muy alta y en la que llevamos toda clase de información con nosotros; alguna de carácter general otra de carácter privado.

En cualquiera de los casos, casi siempre tenemos toda esta información conviviendo en nuestros dispositivos sin mayor protección, almacenados allí esperando que nada nunca ocurra, pero seamos realistas esto no es lo correcto. Cuantas veces hemos oido de robos de equipos, estravios de dispositivos de almacenamiento, clonación de dispositivos y un largo etcetera que debe llevarnos a la paranoia.

Ante este panorama, lo correcto es iniciar la toma de medidas, empesar a generar para nosotros mismos estandares de proteción, que nos permitan cierta tranquilidad a la hora de manipular nuestra información.

Dicho esto, vamos al grano, Señoras y Señores Tomb:

TOMB

Tomb, tal como se lee en su pagina Web es una utilidad 100% libre que nos permite generar directorios cifrados. Tomb permite encriptar directorios, los cuales pueden incluso transportarse de manera segura ya sea en un dispositivo de almacenamiento externo o a través de la red.

Una de las principales ventajas de tomb es que es bastante simple de usar; este genera directorios tumbas utilizando un  algoritmo llamado "Secreto de Shamir". Estos directorios pueden ser abiertos solamente utilizando una llave que además es protegida por una contraseña elegida por el usuario.

Las llaves creadas por tomb para cada una de las tumbas pueden (y deben) ser cambiadas de lugar para ofrecer mayor seguridad, por ejemplo, puedes crear una tumba y guardar su llave en tu memoria usb para así incrementar la seguridad.

Instalando:

La fuente de Tomb se encuentra disponible desde la pagina del proyecto, en debian o derivados, se puede hacer uso de un repositorio para su instalación (instrucciones), y en arch de dispone de un paquete (aquí). Para el resto de las distros, el procedimiento es instalar directamente de la fuente:

  1. Instalamos en nuestro sistema los pre-requisitos (gcc, gtk2, gtk2-devel, libnotify, zsh).
  2. Descargamos la fuente desde la pagina del proyecto (aquí).
  3. Descomprimimos el archivo (tar -xvf Tomb-xx.tar.gz).
  4. Ingresamos al directorio generado (Cd Tomb-XX).
  5. Configuramos (./configure).
  6. Si todo ha ido bien preparemos la instalacion (make).
  7. Nuevamente, si todo esta correcto entonces instalamos (make install).
Luego de la Instalación ya podemos crearnos nuestra tumba, para ello simplemente debemos:

Creando la Tumba:

  1.  Si no tenemos la Swap cifrada debemos desactivarla (swapoff -a).
  2. Creamos la Tumba (tomb create -s [tamañoDeLaTumba]
    --ignore-swap [nombreDeLaTumba]).
  3. Al terminar de crear la Tumba, se nos pedirá que indiquemos la contraseña para la tumba.
  4. Reconfirmamos la clave.
  5. Listo, obtendremos 2 archivos (la tumba y su llave).

Abriendo la tumba:


  1. tomb -k [rutaALaLlave] open [rutaALaTumba]
  2. Se nos solicitará la contraseña para la tumba
  3. Si todo va correcto, entonces se montara un nuevo dispositivo al cual podemos agregarle todos los archivos que necesitemos.

Cerrando la tumba:

  1. tomb close [nombreDeLaTumba]

Algunas opciones de Tomb


Argumentos:

  • create: crear un nuevo ARCHIVO tomb junto con sus llaves.
  • open: abre un ARCHIVO tomb ya existente en un LUGAR.
  • list: lista todos las tumbas o archivos tomb abiertos o aquel llamado ARCHIVO.
  • close: cierra una tumba llamada ARCHIVO (o todas).
  • slam: cierra la tumba ARCHIVO y mata todos los pids que utilice.
  • passwd: cambia la contraseña de la llave de algún ARCHIVO de tumba.

Opciones:

  •  -s: indica el tamaño del archivo tomb durante su creación (en MB).
  •  -k: ruta al archivo a utilizar para abrir una tumba.
  •  -n: no procesa los ganchos encontrados en la tumba.
  •  -o: opciones especiales para montaje (por default: rw,noatime,nodev).
  •  -h: muestra esta ayuda.
  •  -v: sobre la versión de la herramienta.
  •  -q: se ejecuta silenciosamente sin mostrar información.
  •  -D: muestra información (debugging) del proceso durante el arranque. 

viernes, 4 de enero de 2013

Proxy en consola

Hace un momento me acabo de ver en la necesidad de setear un proxy para navegar en un equipo que no tiene interfaz gráfica, la sentencia es muy sencilla, pero suelo olvidar el orden por lo que decidí dar un ojo para refrescar; pero mayor sorpresa me lleve al encontrar que no he escrito un post sobre esto... "Yo y mis pendientes", en fin ....

Desde la consola es muy fácil utilizar la variable "http_proxy", para conectarnos desde la sesión/aplicación en modo texto al Internet. Para ello simplemente debemos:

Ejecutar el siguiente comando para configurar el servidor proxy:

$ export http_proxy=http://servidor-ip:port/
  
 
Si nuestro proxy requiere autentificación entonces ejecutamos:

$ export http_proxy=http://user:password@server-ip:port/

Finalmente, podemos configurar el proxy para todos los usuarios; para ello simplemente basta con copiar cualquiera de los comandos antes descritos en el archivo "/etc/profile".