viernes, 18 de marzo de 2011

Instalar y configurar proxy Squid en Debian y Ubuntu

Un proxy básicamente es un programa o dispositivo que recibe las peticiones de una red y en base a diferentes reglas que tiene configuradas las permite o no.
Por ejemplo, si mi PC sale a internet directamente a traves de un router standard va a poder acceder a todas las paginas que desee. El diagrama sería algo así:

PC > ROUTER > INTERNET

Ahora, con un proxy en el medio la salida a internet estaría limitada por las reglas que le configuremos:

PC > PROXY > ROUTER > INTERNET

Si en el proxy configuramos una regla donde, por ejemplo, nadie pueda acceder a youtube al intentar hacerlo aparecerá un mensaje como éste:


Para instalarlo solo necesitamos a nuestro querido apt-get:

sudo apt-get install squid

Una vez instalado procedemos a configurarlo, para ello editamos el siguiente archivo:

sudo nano /etc/squid/squid.conf

1. Con Ctrl + W buscamos la siguiente linea: http_port 3128


En esta linea configuramos el puerto por el cual Squid "escuchará" las peticiones. Por defecto viene el 3128, podemos cambiarlo por ejemplo al 8080. En mi caso, dejo el que viene por defecto.

2. Nuevamente con Ctrl + W buscamos la siguiente linea: cache_mem 8 MB


Aquí configuraremos la cantidad de memoria asignada para la caché de Squid. Ésta valor va a depender de la cantidad de RAM de la máquina, pero si tenemos 1GB podemos asignarle unos 256 MB. No olviden descomentar las líneas (quitar el simbolo #)

3. Buscamos la linea: cache_dir ufs /var/spool/squid 100 16 256


Este parámetro se encarga de asignar un espacio en el disco para almacenar la caché de Squid. Ufs es el formato con el que Squid guarda la caché en disco, luego viene la ruta donde se almacenará la misma y, por ultimo, aparece el tamaño máximo en disco que Squid utilizará.
Al primer valor (100) le asignaremos 1000 (MB), este valor no puede ser menor que el que hemos asignado antes a la memoria caché. Luego vienen los parámetro de directorio primario (16) y directorio secundario (256) en niveles. Establecerá 16 directorios de primer nivel y 256 subdirectorios de segundo nivel. Estos valores conviene dejarlo por defecto.

Hasta fue la configuración del proxy. Ahora seguimos con las listas de control de acceso:

1. Buscamos la linea: acl CONNECT method CONNECT
Aquí crearemos la primera regla que luego permitiremos (o denegaremos). La regla debe comenzar con "acl" y luego elegiremos el nombre de la misma, el metodo de acceso y por ultimo el rango de acceso. Por ejemplo:

acl redlocal src 192.168.1.0/24

En ésta regla indicamos cual es el origen de las conexiones. En este caso es la dirección de red 192.168.1.0 con mascara 255.255.255.0. Lo que abarca el rango de IP desde 192.168.1.0 hasta 192.168.1.255 (tener en cuenta que la primer dirección y la última no deben utilizarse).
Ahora crearemos otra regla para denegar la conexión a distintas paginas:

acl denegado url_regex "/etc/squid/denegado"

El método url_regex es para que el proxy analice las direcciones de acuerdo a las palabras que anotemos en una lista. En éste ejemplo luego del método colocamos una ruta con un archivo que Squid chequeará antes de permitir la conexión. Ese archivo estará formado por todas las palabras que queremos denegar. En lugar de la ruta podríamos escribirlas todas una al lado de la otra, separadas por espacios, pero si son muchas quedaría bastante desprolijo. Entonces, las 2 reglas que creamos quedaron de la siguiente forma:


2. Para permitir o denegar las reglas que creamos en el paso anterior debemos buscar la siguiente linea: http_access y debajo de la linea que dice # Only allow cachemgr access from localhost agregamos:

http_access deny denegado
http_access allow redlocal

Con esto denegamos el listado de palabras situado en "/etc/squid/denegado" y permitimos las conexiones de nuestra red.


Ya con esto estaría configurado el archivo squid.conf. Presionamos Ctrl + O para guardar, ENTER para mantener el nombre del archivo y Ctrl + X para salir.

Ahora crearemos el archivo con las palabras que deseamos denegar, para ello escribimos en la terminal:

sudo nano /etc/squid/denegado

Acá ingresamos todas aquellas palabras que queremos denegar una debajo de la otra. Guardamos con Ctrl + O, presionamos ENTER para mantener el nombre del archivo y Ctrl + X para salir.

3. Para activar el servicio escribimos en la terminal:

sudo /etc/init.d/squid restart

También podemos usar el parámetro "reload" en lugar de "restart" si en lugar de reiniciar el servicio solo queremos "recargar" la configuración del archivo squid.conf. Otros parametros posibles son "start" para iniciar el servicio o "stop" para detenerlo.
Aclaración: Cuando seguí estos pasos con Ubuntu 10.10 a la hora de reiniciar el servicio me encontré con que no estaba en /etc/init.d/squid sino en /etc/default/squid. Así que si no les llega a funcionar el paso anterior prueben escribiendo directamente "sudo squid restart" (si les dice que "Squid is already running!" deberán primero "matarlo" con "sudo kill NumeroProcessID" . En Debian 6.0 Squeeze funciona todo tal cual fue descripto.

Para hacer efectivo la configuración de nuestro proxy debemos configurarlo en el navegador.

1. Para Internet Explorer vamos a "Herramientas" > "Opciones de internet" > Pestaña "Conexiones" > "Configuración LAN"


Tildamos "Usar un servidor proxy para la LAN", en dirección escribimos la direccion IP de la máquina en la que está corriendo Squid y en puerto el 3128 (si es que no lo cambiamos). También debemos tildar la opción "No usar servidor proxy para direcciones locales".


Y listo, ya no deberia permitirnos ingresar a las palabras claves del archivo "denegado" ubicado en "/etc/squid/"

2. Por supuesto que el proxy se puede configurar en cualquier navegador. Por ejemplo para Chromium con Debian / Ubuntu debemos ir a "Herramientas" > "Opciones" ("Preferencias") > "Avanzadas" > "Cambiar la configuración del proxy" > "Configuración manual del proxy".


3. Para Firefox: "Herramientas" > "Opciones" o "Editar" > "Preferencias" > "Avanzadas" > Pestaña "Red" > "Configuración" > "Configuracion manual del proxy"


Y así con todos :)

Para que el proxy nos devuelva los mensajes de error en español debemos editar el archivo de configuración:

sudo nano /etc/squid/squid.conf

Luego buscamos la linea "error_directory /usr/share/squid/errors/en" la descomentamos y al final en lugar de "en" (inglés) escribimos "es" (español).


Guardamos con Ctrl + O, presionamos ENTER para mantener el nombre del archivo y Ctrl + X para salir.

Para que haga efecto la nueva configuración ejecutamos en la terminal:

sudo /etc/init.d/squid reload

Si deseamos editar los mensajes de error debemos seguir la ruta "/usr/share/squid/errors/es" y editar el mensaje que queramos. Dentro de esa carpeta aparecen todos los archivos con los mensajes de error que al ser abiertos a traves de un editor de texto podremos ver que están hechos con HTML con lo cual podremos editarlas facilmente y dejar el mensaje como queramos. Por ejemplo, yo edité el mio y quedó así:


Por ultimo, y ya para finalizar el tutorial, decirles que si desean ver el log con los intentos de acceso a las palabras clave denegadas pueden hacerlo abriendo el archivo ubicado en /var/log/squid/access.log.

Eso ha sido todo, a denegar! :P

Referencia: Instalación de un servidor proxy Squid en Ubuntu

IMPORTANTE: Si lo que queres es bloquear una sola página, o unas pocas, quizás te convenga hacerlo editando el archivo hosts como expliqué una vez aquí. Ahí no vas a tener que instalar ni configurar nada, basta con editar un solo archivo.

lunes, 14 de marzo de 2011

Apagar Ubuntu por terminal y quitar confirmación de apagado

A mi particularmente no me molesta que al apagar Ubuntu desde el menú me aparezca lo siguiente:


Pensandolo bien generalmente suelo apagar el sistema desde la terminal y medio que me acostumbré a eso. Y cuando apagas desde allí no aparece ningún cartel de confirmación ni nada, simplemente se apaga. Por si les interesa, se hace de la siguiente forma:

- Abrimos la terminal pero con la comodísima combinación de teclas que trae Ubuntu por defecto que es: Ctrl + Alt + T. Y allí tenemos varias opciones para apagar el sistema. Si bien solo usaremos una les dejo varias para que se fijen cual les resulta mas cómoda y fácil de recordar:

Apagado rápido:
sudo halt
sudo shutdown -h now
sudo init 0
sudo poweroff

Reiniciado rápido:
sudo reboot
sudo shutdown -r now
sudo init 6

Apagado programado:
sudo shutdown -h 5
(5 son la cantidad de minutos que esperará antes de apagarse)
sudo shutdown -h 16:20
(16:20 es la hora a la que se apagará)

Reiniciado programado:
sudo shutdown -r 5
sudo shutdown -r 16:20

Si sigue sin convencerte ésta forma y aún querés seguir apagando con el mouse y eliminar el cartel de confirmación te explico 2 formas de hacerlo:

Desde terminal:

gconftool-2 -s '/apps/indicator-session/suppress_logout_restart_shutdown' --type bool true

Desde el editor de Gnome:

Presionamos Alt + F2 y escribimos gconf-editor.

Luego vamos a apps > indicator-session y tildamos la opción "suppress_logout_restart_shutdown"


Listo, de ahora en más el cartel de confirmación no volverá a aparecer.
Para los que prefieren la opción del apagado por consola, en esa misma ruta tienen la opción "suppress_shutdown_menuitem" que al ser tildada elimina el icono de apagado :)

miércoles, 9 de marzo de 2011

SSH: Cambio de identidad de un host remoto

La otra vez cuando intenté acceder vía SSH a una PC con Debian me apareció el siguiente mensaje:

ardillasenlared@ardillasenlared-desktop:~$ ssh -l ardillasenlared 192.168.1.10
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!  @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
c6:ef:4c:8a:2f:8b:c0:ee:e8:be:c3:4c:b5:ab:c8:86.
Please contact your system administrator.
Add correct host key in /home/ardillasenlared/.ssh/known_hosts to get rid of this message.
Offending key in /home/ardillasenlared/.ssh/known_hosts:2
RSA host key for 192.168.1.10 has changed and you have requested strict checking.
Host key verification failed.

Yo, solo en virtud de perder el tiempo, en lugar de leer lo que decía el mensaje me puse a buscar en Google. Y si bien encontré una respuesta que me sirvió enseguida la misma ya estaba en el mensaje que tenía frente a mis ojos.

Este mensaje aparece porque la clave pública del host al que nos estamos intentando conectar es diferente que la nuestra (supongo que la razón habrá sido que había cambiado la IP privada de mi máquina).
La solución es borrar la clave pública que está almacenada en la máquina "cliente" (o máquina desde la que estamos intentando acceder). Para ello tenemos 2 opciones:

1. Borrar la segunda linea del archivo ubicado en /home/ardillasenlared/.ssh/known_hosts

sudo nano /home/ardillasenlared/.ssh/known_hosts

2. Borrar la dirección IP que está registrada en la clave. En este caso 192.168.1.10:

ssh-keygen -R 192.168.1.10

Listo. Luego de esto podremos acceder vía SSH ;)

viernes, 4 de marzo de 2011

DenyHosts: bloquear intentos fallidos de ssh y enviar reporte vía mail

DenyHosts es un script escrito en Python que lo que hace es prevenirnos de los ataques por fuerza bruta en SSH. Para ello, monitorea el archivo /var/log/auth.log en busca de intentos de login fallidos y bloquea las direcciones IP de aquellos equipos de donde proviene el ataque.
Lo primero que debemos verificar antes de instalar es si tenemos Python instalado en nuestro sistema (casi seguro que si). Para ello escribiremos en una terminal lo siguiente:


Con el primer comando veremos los paquetes disponibles, y con el segundo la versión instalada
Luego de confirmar esto procedemos a la instalación con nuestro amado apt-get:

sudo apt-get install denyhosts

Una vez instalado podemos revisar la configuración del mismo editando el siguiente archivo:

sudo nano /etc/denyhosts.conf

Aquí se pueden configurar muchas cosas, destaco algunas puntuales:

PURGE_DENY =
Nos permite configurar el tiempo en el cual se borrarán las IPs bloqueadas.
BLOCK_SERVICE =
Nos permite definir que servicios serán bloqueados para los Hosts que nos "ataquen". Por defecto bloquea solo el SSH, pero se puede bloquear otro servicio o todos.
DENY_THRESHOLD_INVALID = 
Nos permite configurar el numero de intentos fallidos de login para una cuenta de usuario inexistente.
DENY_THRESHOLD_VALID = 
Tiene la misma función que DENY_THRESHOLD_INVALID = pero para usuarios que existen (root se cuenta aparte).
DENY_THRESHOLD_ROOT = 
También tiene la misma función que DENY_THRESHOLD_INVALID = pero para el root.

Además, podemos ver los valores predeterminados para eliminar los usuarios denegados:
AGE_RESET_VALID=5d (Para usuarios con cuentas existentes 5 días)
AGE_RESET_ROOT=25d (Para root 25 días)
AGE_RESET_RESTRICTED=25d (Para los usuarios restringidos definidos en el archivo /var/lib/denyhosts/restricted-usernames 25 días)
AGE_RESET_INVALID=10d (Para los usuarios con cuentas inexistentes 10 días)

Para iniciar el servicio:

sudo /etc/init.d/denyhosts start

Para reiniciar usamos "restart" y para detener "stop".

Por otro lado tenemos la opción de elegir algún host (o rango de IPs) sobre el cual no se ejecute ningún tipo de restricción. Para ello editamos el siguiente archivo:

sudo nano /etc/hosts.allow

Allí añadimos la IP que no será bloqueada y el servicio. Por ejemplo:

sshd: 192.168.1.15 

Ésto permitirá que los intentos fallidos de login para la IP 192.168.1.15 no bloqueen el servicio de SSH.
Para no bloquear ningun servicio:

ALL: 192.168.1.15

En caso de querer desbloquear un host tenemos que detener el servicio de DenyHosts:

sudo /etc/init.d/denyhosts stop

Y editamos los siguientes archivos con sudo nano. En esos archivos van a aparecer todas las IPs bloqueadas, solo tenemos que eliminarlas y guardar:

/etc/hosts.deny
/var/lib/denyhosts/hosts
/var/lib/denyhosts/hosts-restricted
/var/lib/denyhosts/hosts-root
/var/lib/denyhosts/hosts-valid
/var/lib/denyhosts/user-hosts

Luego iniciamos nuevamente el servicio:

sudo /etc/init.d/denyhosts start

En el caso de estar utilizando una distro diferente a Debian / Ubuntu podes buscar los archivos donde DenyHosts guarda sus datos de la siguiente forma:

cat /etc/denyhosts.conf | grep "WORK_DIR ="

También podrías buscar por IP bloqueada así:

grep direccionip ./*

Y para terminar, también tenemos la opción de configurar una cuenta de mail y un SMTP para que nos llegue un reporte por esa vía:

ADMIN_EMAIL = ardillasenlared@gmail.com (Acá va la dirección de destino)
SMTP_HOST = smtp.dominio.com
SMTP_PORT = 25

Si el SMTP requiere autenticación también hay que habilitar:
SMTP_USERNAME= Usuario de autenticación
SMTP_PASSWORD= Password de SMTP

Para configurar remitente:
SMTP_FROM =

Para configurar asunto del mail:
SMTP_SUBJECT =

Con esto mas o menos queda decente, puede revisar mas configuraciones para realizar en /etc/denyhosts.conf. Ojalá les sirva! ;)

Referencias: UserLinux y MegaLinux

martes, 1 de marzo de 2011

Instalar drivers NVIDIA en Debian 6.0 Squeeze

Recuerdo la primera vez que instalé Ubuntu que tratando de instalar los drivers de NVIDIA terminé por reinstalar todo el sistema operativo. Esa vez, no sé como, los pude instalar lo cual en cierto punto me puso contento, pero a su vez debía tener mucho cuidado de que no pasara nada. En los "Ubuntus" de ahora la cosa está mas fácil, y casi que lo hace solo, pero en Debian no tenía idea, y pensé que sería complicadísimo. Pero me equivoqué =)
Explico paso a paso como instalar los drivers de NVIDIA en Debian 6.0 Squeeze partiendo de la base que ya intentaron hacerlo, se quedaron sin entorno gráfico (o no) y tienen residuos de drivers por todas partes. Por lo menos, ésta era mi situación y haciendo lo que les digo a continuación me anduvo:

Paso 1: Eliminamos todo resto de driver NVIDIA que ande dando vueltas:

sudo apt-get remove --purge nvidia*

Luego eliminamos el driver libre nouveau ya que podría causar conflicto:

sudo apt-get remove --purge xserver-xorg-video-nouveau

Para asegurarnos de que no presente ningún tipo de conflicto a futuro lo agregamos también a la blacklist en /etc/modprobe.d/blacklist.conf. Escribimos como root en una terminal:

nano /etc/modprobe.d/blacklist.conf

Y al final del archivo añadimos:

blacklist nouveau

Guardamos con Ctrl + o, presionamos ENTER para mantener el nombre del archivo y salimos con Ctrl + x.

Paso 2: Una vez que tenemos todo desinstalado y limpito procedemos a bajar los drivers de nuestra placa NVIDIA desde acá:

http://www.nvidia.es/Download/index.aspx?lang=es

Al poner descargar va a aparecer una página con letras, números, caracteres y código. Esperan que se termine de cargar y luego van a "Archivo" >> "Guardar como" y lo salvan con extensión ".run". En mi caso: NVIDIA-Linux-x86-173.14.27-pkg1.run (yo tengo una modesta Geforce FX 5200).
Recuerden la ubicación donde lo guardan que es importante para después ubicar el archivo. En mi caso lo guardé en /home/ardillasenlared/.

Paso 3: Antes de instalar el driver hay que tener instalados algunos paquetes. Nos logueamos como root y escribimos en la terminal:

aptitude install build-essential linux-headers-`uname -r` gcc make libstdc++6 fakeroot

Donde uname -r es la versión del kernel (Pueden probar escribir ese comando en una terminal y verán que les aparece la versión completa del kernel que están utilizando).
Aclaración: Si después de escribir headers- presionan la tecla "tab" van a ver que se completa solo (en general esto pasa con todos los comandos o nombres de archivos).

Paso 4: El paso siguiente es terminar con el entorno gráfico:

sudo /etc/init.d/gdm3 stop

En mi caso no hizo falta porque ya lo había roto :P

Paso 5: Se loguean como root, y van a la ruta donde guardaron el archivo .run. Una vez allí le dan los permisos de ejecución de la siguiente forma:

chmod +x (nombre_del_controlador)

En mi caso fue:

chmod +x NVIDIA-Linux-x86-173.14.27-pkg1.run

Paso 6: Por ultimo instalan el driver escribiendo:

sh NVIDIA-Linux-x86-173.14.27-pkg1.run

. Se abrirá una especie de asistente que nos pedirá aceptar la licencia (lo cual haremos).
. En la siguiente pantalla nos aparecerá que el compilador es de una versión distinta y nos pregunta si queremos abortar la instalación, le decimos que NO.
. Luego empieza la instalación de los archivos.
. Al final nos pregunta si queremos que corra el nvidia-xconfig para configurar nuestro Xorg en el /etc/X11/xorg.conf. Ponemos que SI.

Y listo, todo configurado =)

Nota Final: Antes de publicar éste tutorial volví a probarlo en otra instalación de Debian (pero esta vez limpia, es decir, sin haber intentado instalar los drivers antes) y funcionó correctamente =)

Fuente: Deb Linux