miércoles, 29 de abril de 2015

Como actualizar de Debian Wheezy Debian Jessie


Actualización de Debian Wheezy a Debian Jessie

/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*
--------------------------Repositorios de Debian Jessie-------------------------

 # Repositorios Seguridad
 deb http://security.debian.org/ jessie/updates main contrib non-free
 deb-src http://security.debian.org/ jessie/updates main contrib non-free

 # Repositorios Debian Oficial
 deb http://ftp.debian.org/debian/ jessie main contrib non-free
 deb-src http://ftp.debian.org/debian/ jessie main contrib non-free

 # Repositorios Multimedia
 # deb http://deb-multimedia.org jessie main non-free
 # deb-src http://deb-multimedia.org jessie main non-free.
 # deb-multimedia
 # apt-get install deb-multimedia-keyring
 deb http://www.deb-multimedia.org jessie main non-free

 # Debian Mozilla Team
 # deb http://cdn.debian.net/debian unstable main deb
 # http://cdn.debian.net/debian experimental main
/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*/*

1.- Verificamos que versión tenemos actualmente
# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 7.8 (wheezy)
Release: 7.8
Codename: wheezy

# cat /etc/issue
Debian GNU/Linux 7 \n \l

2.- Para bajar lo mas actualizado en APT - APTITUDE -DPKG
#apt-get install apt dpkg aptitude -V

2.- Para actualizar el sistema actual hasta que no quede nada por actualizar
#aptitude safe-upgrade 

3.- modificación de repositorios eliminamos los de Debian Wheezy y colocamos los de Debian Jessie

 # Repositorios de Debian Jessie 
 # Repositorios Seguridad
 deb http://security.debian.org/ jessie/updates main contrib non-free
 deb-src http://security.debian.org/ jessie/updates main contrib non-free

 # Repositorios Debian Oficial
 deb http://ftp.debian.org/debian/ jessie main contrib non-free
 deb-src http://ftp.debian.org/debian/ jessie main contrib non-free

 # Repositorios Multimedia
 # deb http://deb-multimedia.org jessie main non-free
 deb-src http://deb-multimedia.org jessie main non-free
 deb http://www.deb-multimedia.org jessie main non-free

 # Debian Mozilla Team
 # deb http://cdn.debian.net/debian unstable main deb
 # http://cdn.debian.net/debian experimental main

4.- Actualizamos con apt-get (en este caso, mejor usar apt-get, pero solo en este momento)
#apt-get update 

5.- aptitude update (otra vez, si)
#aptitude update

6.- Actualizar el sistema actual hasta que no quede nada por actualizar (otra vez, las veces que sea necesario hasta que no quede nada para actualizar)
#aptitude full-upgrade
#aptitude safe-upgrade

7.- Realizar la transición a la siguiente versión (esto prepara el sistema para hacer la transición a la siguiente versión, instalando y eliminando paquetes si fuera necesario)
#aptitude dist-upgrade

8.- Esto completa la transición
#aptitude full-upgrade

9.- Por ultimo se realiza las actualizaciones finales (este último, las veces que sea necesario también).
#aptitude update && aptitude safe-upgrade

10.- Verificamos que versión tenemos actualmente
# cat /etc/issue
Debian GNU/Linux jessie/sid

Luego de Instalar 


Para eliminar archivos de configuración y otros ya sin uso de los paquetes que han sido eliminados pero no purgados. Para ver qué paquetes han dejado archivos al ser desinstalados, se puede utilizar el siguiente comando:
#aptitude search '~c'

Y para purgarlos en forma definitiva:
#aptitude purge '~c'


También se debe ejecutar una nueva actualización, por si quedó algún paquete por renovar:
apt-get update && apt-get dist-upgrade -V

11.- Verificamos que versión tenemos actualmente
# lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie

# cat /etc/issue
Debian GNU/Linux 8 \n \l

martes, 28 de abril de 2015

Instalación de agentes Zabbix en clientes Linux

Los agentes pueden ser instalados en la mayoría de sistemas operativos existentes en el marcado ("Linux, Mac, Windows, AIX, Solaris entre otros).  Después de su instalación queda a esperas de las ordenes del "Servidor Recolector Zabbix".  El agente es muy liviano y consume un mínimo de recurso del equipo donde se instale.

Los agentes envía únicamente la información que les pida el "Servidor recolector Zabbix".  

En este articulo vamos a presentar como instalar Zabbix Agent en:
  • Linux Debian Ubuntu
Instalación Agente Zabbix en Linux Debian / Ubuntu
La instalación del Agente de Zabbix para Linux Debian/Ubuntu es bastante sencillo.  Primero, le recomendamos instalar desde el instalador server, esto le asegura una buena configuración.

Debian / Ubuntu

Creamos la carpeta donde vamos a descargar el archivo y entramos en ella
mkdir zabbixagent
cd zabbixagent

Bajamos la última versión del instalador Zabbix-Server.
wget -c http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.4.5/zabbix-2.4.5.tar.gz/download

tar --gzip --extract --verbose --file zabbix-2.4.5.tar.gz

cd zabbix-2.4.5

Preparamos el instalador para activar el agente y luego compilamos
sudo ./configure --enable-agent
sudo make -j$[$(cat /proc/cpuinfo| grep -c '^processor')+1]
sudo make install

Agregamos el usuario Zabbix y el archivo de configuración del Agente
sudo adduser zabbix
sudo cp conf/zabbix_agentd.conf /usr/local/etc

Vamos a modificar algunos parámetros del archivo de configuración del Agente para que pueda comunicarse con el servidor Zabbix.

Entramos en el siquiente archivo
nano /usr/local/etc/zabbix_agentd.conf

Procedemos a cambiar:
Server=       <-----  IP del "Servidor Zabbix"
ServerActive=       <-----  IP del "Servidor Zabbix"
Hostname=        <-----  Nombre de la máquina donde esta instalando el Agente de Zabbix
ListenIP=        <-----  La IP de la máquina donde esta instalando el Agente de Zabbix

Configuramos los script necesario para que Zabbix arranque automáticamente

cp misc/init.d/debian/zabbix-agent /etc/init.d/zabbix-agent

chmod 755 /etc/init.d/zabbix-agent
chmod 755 /usr/local/sbin/zabbix_agentd
update-rc.d zabbix-agent defaults

Iniciamos Zabbix Agente

sudo /etc/init.d/zabbix-agent start

El siguiente paso es registrarlo en el "Servidor recolector Zabbix".

Finalizada la instalación de Zabbix agente para Linux / Debian

lunes, 27 de abril de 2015

Instalación y Configuración de Zabbix en Debian Wheezy


******* Instalación de Zabbix *******

Instalar debian por defecto. Y actualizarlo. La ip de nuestro equipo, debe ser fija.
#aptitude update
#aptitude upgrade

Vamos a necesitar ssh nmap mc
#aptitude install nmap ssh mc

Instalamos el paquete que contiene la información del repositorio.
# wget http://repo.zabbix.com/zabbix/2.4/debian/pool/main/z/zabbix-release/zabbix-release_2.4-1+wheezy_all.deb
# dpkg -i zabbix-release_2.4-1+wheezy_all.deb
# apt-get update

Instalar mysql
#aptitude install mysql-server

Ingresamos la contraseña deseada para MySQL. Luego nos volverá a pedir para confirmar.
**clave: ZABBIX**

Seteamos en /etc/mysql/my.conf, el encode por defecto para mysql.

/etc/mysql/my.conf

...
...
[mysqld]
...
...
character-set-server=utf8
...
...

Instalamos phpMyAdmin y apache2
aptitude install phpmyadmin apache2

Nos preguntará si queremos configurar nuestra base de datos usando dbconfig-common ... elegimos NO.

Y sobre que tipo de webserver vamos a usar, apache2.

Instalar zabbix.
aptitude install zabbix-server-mysql zabbix-frontend-php

De nuevo preguntará si queremos configurar nuestra base de datos usando dbconfig-common ... elegimos NO.

Instalamos el agente de zabbix
aptitude install zabbix-agent

Instalar la base de datos para zabbix.
En /usr/share/zabbix-server-mysql tenemos los scripts para generar la base de datos para zabbix. Es necesario ejecutar los scripts en el mismo orden que aquí describimos.

Primero, creamos la base de datos.
# mysql -u root -p
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> quit;

Ahora, procedemos a instalar la base en sí desde los scripts.
# mysql -uroot -p zabbix < ./schema.sql
# mysql -uroot -p zabbix < ./images.sql
# mysql -uroot -p zabbix < ./data.sql

Instalación y Configuración Web

Configurar el frontend de zabbix.

Debemos editar /etc/apache2/conf.d/zabbix
...
...
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value date.timezone America/Caracas
...
...


A continuación, es necesario sintonizar PHP intérprete y ajustar algunos valores con el fin de ejecutar Zabbix Server. Así, Apache abierto php.ini archivo de configuración para la edición emitiendo el siguiente comando:

#nano /etc/php5/apache2/php.ini

Ahora, se debe buscar los siguientes parametros y colocar los siguientes valores de PHP como sigue:

 post_max_size = 16M
 max_execution_time = 300
 max_input_time = 300
 date.timezone = America/Caracas  
 always_populate_raw_post_data = -1

Luego editamos el fichero de configuración del servidor Zabbix para declarar los parámetros de conexión a la base de datos MySQL. Para ello como root ejecutamos los siguientes comandos:

/etc/zabbix/zabbix_server.conf

DBHost=localhost

DBName=zabbix
DBUser=root
DBPassword=nuestro-pass-para-mysql

Reiniciamos apache
# service apache2 restart


Navega con tu navegador si la instalación es local asi: http: // localhost / zabbix o http: // Dirección IP / zabbix o http: // Nombres de Dominio / zabbix y volverá a dirigir a http: //localhost/zabbix/setup.php 


Nota: Si no se muestra nada en el navegador debe realizar los siguientes pasos:
El directorio se debe copiar a:
mkdir /var/www/zabbix
cd /tmp/zabbix-2.0.6/frontends/php/

cp -a . /var/www/zabbix/

Nota: En caso de no tener la carpeta en /tmp puede descargarla en colocando el siguiente comando en el terminal 
wget http://repo.zabbix.com/zabbix/2.4/debian/pool/main/z/zabbix/zabbix_2.4.0.orig.tar.gz

Una vez que se descargue se debe descomprimir y copiar a /var/www/zabbix
tar xfz zabbix_2.4.0.orig.tar.gz
cd zabbix-2.4.0
cp -R frontends/php/* /var/www/zabbix

Reiniciamos apache
# service apache2 restart

y se vuelve a realizar la busqueda en el navegador.

Pantalla 1: Pantalla de Bienvenida , damos click en aceptar.



Pantalla 2: Pantalla para chequeo de requisitos, damos click en Next.



Pantalla 3: Pantalla de la configuración de la Base de Datos , se debe colocar la clave de root que se coloco
al instalar mysql, damos click en siguiente.



Pantalla 4: Pantalla de los detalles del servidor , opcional: colocar el nombre del servidor, damos click en siguiente.



Pantalla 5: Pantalla del resumen de la instalación, damos click en siguiente.



Pantalla 6: Pantalla de fin de la instalación satisfactoriamente. 



Luego editamos el siguiente archivo /etc/zabbix/zabbix_server.conf y colocamos lo siguiente en cada linea
DBHost=localhost
DBName=zabbix
DBUser=root
DBPassword=nuestro-pass-para-mysql

Reiniciamos el server zabbix y recargamos el frontend
#/etc/init.d/zabbix-server restart
[ ok ] Stopping Zabbix server: zabbix_server.
[ ok ] Starting Zabbix server: zabbix_server.



Como instalamos Zabbix si tenemos el proyecto en una maquina virtual de un contenedor


Una vez que terminamos la instalación en una maquina virtual debemos configurar en la maquina virtual y en el 
contenedor el servicio Web para eso debemos seguir los siguientes pasos...


Paquetes que se necesitan en la maquina virtual
***Estos paquetes ya fueron instalados***
apache2

Instalación de apache en la maquina virtual
aptitude install apache2

Configuración de los sites-available
nano /etc/apache2/sites-available/monitoreo.canaima.net.conf

y colocamos el siguiente codigo y guardamos la configuración
<VirtualHost *:80>
    ServerAdmin plataforma@gmail.com
    DocumentRoot "/usr/share/zabbix"
    ServerName monitoreo.canaima.net
    ErrorLog "${APACHE_LOG_DIR}/localhost_sitio1-error_log"
    CustomLog "${APACHE_LOG_DIR}/localhost_sitio1-access_log" common
    <Directory "/usr/share/zabbix>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
 Leyenda: 
DocumentRoot "/usr/share/zabbix" --->> Ruta donde por defecto se instala zabbix
ServerName monitoreo.canaima.net --->> Nombre del Servidor
<Directory "/usr/share/zabbix>        --->> Ruta donde por defecto se instala zabbix

Activamos el sitio
a2ensite monitoreo.canaima.net.conf

Una vez se han guardado esos cambios, habrá que ejecutar un comando que es el enlace simbólico de la siguiente manera:
#ln -s /etc/apache2/sites-available/monitoreo.canaima.net.conf /etc/apache2/sites-enabled/monitoreo.canaima.net.conf

Por ultimo hay que reiniciar el servidor Apache para que tome las nuevas configuraciones:
#/etc/init.d/apache2 restart


Paquetes que se necesitan en el contenedor 
nginx

Instalación de nginx
aptitude install nginx

Configuración de los sites-available
nano /etc/nginx/sites-available/zabbix

y colocamos el siguiente codigo y guardamos la configuración
server {
  listen  80;
  server_name monitoreo.canaima.net;

   access_log  /var/log/nginx/zabbix-net.access.log; 
  error_log   /var/log/nginx/zabbix-net.error.log;  

   location / {
      proxy_pass       http://192.168.1.101;        
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }


   error_page   500 502 503 504  /50x.html;
  location = /50x.html {
          root   /var/www/nginx-default;
  }
 }
Leyenda:
server_name monitoreo.canaima.net; --->> Nombre del Servidor
access_log  /var/log/nginx/zabbix-net.access.log; -->> Nombre y ruta de log de acceso
error_log   /var/log/nginx/zabbix-net.error.log;        -->> Nombre y ruta de log de errores
proxy_pass       http://192.168.1.101;                         -->> Ip de la MV del proyecto zabbix

Una vez se han guardado esos cambios, habrá que ejecutar un comando que es el enlace simbólico de la siguiente manera:
#ln -s /etc/nginx/sites-available/zabbix /etc/nginx/sites-enabled/zabbix

Por ultimo hay que reiniciar el servidor nginx para que tome las nuevas configuraciones:
#etc/init.d/nginx restart


Como acceder desde una red externa (CLIENTE) a ese proyecto.

Entras en /etc/hosts de tu equipo (CLIENTE) y colocas la ip publica del servidor o contenedor donde se encuentra la maquina virtual el proyecto y el dominio 

10.16.106.122   monitoreo.canaima.net



y listo ya desde un equipo externo podras entrar colocando http://monitoreo.canaima.net/

viernes, 17 de abril de 2015

Control de Acceso con Squid

Documentación sobre control de Acceso con Squid

El filtrado de accesos es un tema que genera polémica en cuanto algunos lo pueden interpretar como una restricción o censura mientras que otros lo consideran como una protección. Esta no es la discusión que nos ocupa, aquí sólo pretendo dar una visión técnica sobre como establecer filtros de contenidos con la esperanza de que se haga buen uso de ella.

El filtrado de accesos es también una herramienta para mantener la seguridad y privacidad de los usuarios de nuestra red en tanto que podremos protegerlos de ciertos programas de spyware, popup y otras prácticas molestas de la web.

Para controlar los accesos primero, tenemos que saber definir las propiedades de las conexiones sobre las que queremos establecer algún tipo de control. Las acl de Squid permiten especificar acl según muy diversos criterios, por ejemplo:
  1. Una dirección de red
  2. Una dirección de máquina
  3. Un rango de direcciones
  4. Una url de una conexión
  5. Una franja horaria
Concepto de ACL en Squid


Un ACL es una definición de control de acceso, que en Squid se especifica mediante el parámetro acl según la siguiente sintaxis:

acl nombre_acl tipo_acl descripción ...

acl nombre_acl tipo_acl "fichero_de_descripciones" ...

Cuando usamos un "fichero_de_descripciones", cada descripción se corresponde con una línea del fichero.

Tipos de ACL


1.-src
Especifica una dirección origen de una conexión en formatio IP/máscara.

Por ejemplo, utilizaremos una acl de tipo src para especificar la red local:

acl red_local src 192.168.1.0/24

También podemos especificar rangos de direcciones mediante una acl de tipo src:

acl jefes src 192.168.1.10-192.168.1.25/32

2.-dst
Especifica una dirección destino de una conexión en formatio IP/máscara.

acl google_es dst 216.239.0.0/24

También podemos especificar hosts concretos mediante una acl de tipo dst:

acl google_es2 dst 216.239.59.104/32 216.239.39.104/32 216.239.57.104/32

Las definiciones son idénticas a las acl de tipo src salvo que se aplican al destino de las conexiones, no al origen.

3.-srcdomain y dstdomain

Estos tipos de acl especifican un nombre de dominio.

En el caso de srcdomain es el dominio origen y se determina por resolución DNS inversa de la IP de la máquina, es decir, tendremos que tener bien configurado el DNS de la red local.

En el caso de dstdomain el nombre del dominio se comprueba con el dominio que se haya especificado en la petición de página web.

Por ejemplo:

acl google_com dstdomain google.com

4.-srcdom_regex y dstdom_regex

Especifican una expresión regular que verifican los dominio origen o destino. La expresión regular hace distinción entre mayúsculas y minúsculas salvo que incluyamos la oción "-i" que evita dicha distinción.

Por ejemplo

acl google_todos dstdom_regex -i google\..*

Observamos como al incluir "-i" estamos indicando que no haga distinción entre mayúsculas y minúsculas.

5.-time
Este tipo de acl permite especificar una franja horaria concreta dentro de una semana. La sintaxis es la siguientes

acl nombre_acl_horaria time [dias-abrev] [h1:m1-h2:m2]

Donde la abreviatura del día es:

S - Sunday (domingo)

M - Monday (lunes)

T - Tuesday (martes)

W - Wednesday (miércoles)

H - Thursday (jueves)

F - Friday (viernes)

A - Saturday (sábado)

además la primera hora especificada debe ser menor que la segunda, es decir h1:m1 tiene que ser menor que h2:m2

Por ejemplo

acl horario_laboral time M T W H F 8:00-15:00

Estarímos especificando un horario de 8 a 15 y de lunes a viernes.

6.-url_regex
Permite especificar expresiones regulares para comprobar una url completa, desde el http:// inicial.

Por ejemplo, vamos a establecer una acl que se verifique con todos los servidores cuyo nombre sea adserver:

url_regex serv_publicidad ^http://adserver.*

En otro ejemplo podemos ver una acl que verifique las peticiones de ficheros mp3:

url_regex ficheros_mp3 -i mp3$

Nota: ver expresiones regulares

7.-referer_regex
Define una acl que se comprueba con el enlace que se ha pulsado para acceder a una determinada página. Cada petición de una página web incluye la dirección donde se ha pulsado para acceder. Si escribimos la dirección en el navegador entonces estaremos haciendo una petición directa.

Por ejemplo vamos a establecer uan acl para todas las páginas a las que hayamos accedido pulsando en una ventana de búsqueda de google:

acl pincha_google referer_regex http://wwww.google.*

8.-req_mime
Las acl de tipo req_mime se utilizan para comprobar el tipo de petición mime que realiza un cliente, y se puede utilzar para detectar ciertas descargas de ficheros o ciertas peticiones en túneles HTTP.

Esta acl sólo comprueba las peticiones que realiza el cliente, no comprueba la respuesta del servidor. Esto es importante para tener claro qué estamos haciendo y qué no.

Por ejemplo

acl subida req_mime_type -i ^multipart/form-data$

acl javascript req_mime_type -i ^application/x-javascript$

acl estilos req_mime_type -i ^text/css$

acl audiompeg req_mime_type -i ^audio/mpeg$

9.-rep_mime_type
Este tipo de acl se utiliza para verificar el tipo de respuesta recibida por el proxy. Este tipo de acl, analiza una respuesta del servidor por lo que sólo le afectas las reglas de respuesta como http_reply_access y no las reglas http_access que se aplican a las peticiones.

Por ejemplo

acl javascript rep_mime_type -i ^application/x-javascript$

acl ejecutables rep_mime_type -i ^application/octet-stream$

acl audiompeg rep_mime_type -i ^audio/mpeg$

Ejemplos de ACL

1.-acl todos

Una acl que verifica todos los equipos de la red. Puede parecer un poco tonta, pero se va a utilizar posteriormente para establecer una politica preestablecida para denegarlo o aceptarlo todo.

acl todos src 0.0.0.0/0.0.0.0

2.-acl localhost

Nuestra propia maquina como origen de conexiones

acl localhost src 127.0.0.1/255.255.255.255

Nuestra propia máquina como destino de las conexiones

acl localhost_destino dst 127.0.0.0/8

3.-http_access

Este es el parámetro que permite o deniega accesos a una o más acl.

La sintaxis de uso es:

http_access allow|deny [!]acl ...

Observamos como cada acl puede ir precedida por un signo "!" que indicaría que la acl no se verifica.

Por ejemplo, para permitir acceso fuera del horario laboral, según una acl que definimos anteriormente:

http_access allow ! horario_laboral

Para denegar el acceso en horario laboral

http_access deny horario_laboral

Para dar acceso completo a la red local

http_access allow red_local

4.-Características de http_access
Si no hay ninguna línea de acceso la acción predeterminada es denegar la petición.

Si una petición no ha verificado ninguna línea de acceso, la ación que se realiza es la opuesta a la última línea de la lista. Si la última línea deniega entonces el valor predeterminado es permitir. Por este motivo es conveniente incluir una línea "deny all" o "allow all" al final de las listas de accesos para tener las cosas claras.

Es importante la forma en la cual añadimos los distinto parámetros http_access para determinar la forma en la que se comprueba. En primer lugar, todas las acl incluidas en en una cláusula http_access se comprueban y todas ellas tendrán que verificarse conjuntamente, es decir, como si estuvieran unidas por un operador AND. Después, los sucesivos parámetros http_access se evalúan individualmente, es decir, como si estuvieran unidos mediante un operador OR.

Por ejemplo

acl red1 src 192.168.0.0/24

acl red2 src 192.168.1.0/24

http_access allow red1 red2

permitiría el acceso a todas aquellas conexiones que procedieran a la vez de red1 y de red2, que probablemente no es lo que pretendemos. Para permitir acceso a las dos redes podríamos:

acl red1 src 192.168.0.0/24

acl red2 src 192.168.1.0/24

http_access allow red1

http_access allow red2

o también, de forma más simple:

acl redes src 192.168.0.0/24 192.168.1.0/24

http_access allow redes

5.-Ejemplos de Acl y http_access
Denegar las peticiones de ficheros de tipo exe, pif, bat y cmd

acl tipoexe url_regex -i exe$ pif$ bat$ cmd$

http_access deny tipoexe

Denegar el acceso a todos los servidores cuyo nombre comience por "popup", "banner" o "ads"

acl incordios url_regex http://popup.* http://ads.* http://ads.*

http_access deny incordios

Denegar todos los ficheros de tipo exe que provengan de virus_fijo.com

acl anti_exe url_regex -i exe$

acl vfijo dstdomain virus_fijo.com

http_access deny anti_exe vfijo

Denegar las conexiones a las url completas o incompletas que hay en el fichero "/etc/squid/lista_negra_1.txt"

acl ln1 url_regex "/etc/squid/lista_negra_1.txt"

http_access deny ln1

Proteger el ancho de banda
Cada usuario tiene tendencia a utilizar el 100% del ancho de banda disponible, no sé si esto es una ley escrita, si no debería estarlo.
Pues ahora que tenemos instalada la red y el acceso mediante proxy cache vamos a intentar regular el consumo de ancho de banda. Resulta interesante que nadie pueda cometer abusos y consumir todos los recursos de la red a costa del resto de usuarios. La regulación del ancho de banda se puede llevar a cabo utilizando distintos criterios: la máquina origen, la dirección o página destino o el tipo de transferencia.
Por un lado podemos intentar discriminar el origen de los datos, resumiendo que los jefe dispongan de mejor conexión que los "pringaos". Resumiendo, vamos a asignar distintos anchos de banda a distintos rangos de direcciones IP.
También se no puede dar el caso de que haya consultas masivas a unos determinados dominios o páginas y puede ser práctico delimitar el ancho de banda asignado a ese dominio.
En general el volumen de tráfico que genera el acceso a páginas web en html es bastante bajo, lo que realmente consume un volumen apreciable del ancho de banda son ficheros de sonido e imagen y una medida posible podría ser limitar de alguna forma la transferencia de estos tipos de ficheros.
Otra posibilidad sería que limitar el ancho de banda sólo para descargas de ficheros grandes y dejar un mayor ancho de banda a ficheros pequeños para que la navegación por páginas html sea más rápida.
Mediante Squid podemos establecer límites al ancho de banda mediante una de sus características de configuración denominada "delay pools". Establecemos una definición de regulación de ancho de banda, establecemos una ACL y asociamos la regulación a la ACL.

Parámetros de configuración
Cada una de las reglas de regulación está definida por un número entero que vamos a utilizar para indentificarlo en los distintos parámetros.
delay_pools

Esta parámetro se utiliza para definir cuantas reglas de regulación vamos a definir.
delay_class

Este parámetro toma dos argumentos el primero el identificador de la regla y en segundo lugar el tipo (clase) de la regla.
El primero argumento es un número entero para identificar la regla.
El segundo argumento puede ser 1,2 ó 3 para indicar uno de estos tipos de reglas.
delay_parameters

establece los valores de la regla. Los argumentos de este parámetro son parejas de valores velocidad/tamaño, donde velociad es un número entero que indica una velocidad en bytes por segundo (B/s), y tamaño indica el número de bytes de reserva que se transmiten antes de aplicar la velocidad de transferencia.
Es decir cada pareja especifica el número de bytes de margen que se permiten antes de se haga efectiva la restricción de velocidad.
Los valores no tienen por qué ser múltiplos de 2.

Tipos de reglas
Hay tres clases de regulaciones, con características diferentes.

Clase 1
La clase uno consiste en un canal individual compartido por todos los usuarios. Es la clase más simple, todas las tasas de descarga van juntas y lo único que tenemos que especificar es la velocidad, en bytes por segundo, y el número de bytes a partir de los cuales tiene que retardar la descarga.
Ejemplo: Supongamos que queremos que la velocidad de descarga de los ficheros .wmv que ocupen más de 1Mb sea de 8k/s.
delay_pools 1
delay_class 1 1
delay_parameters 1 8192/1048576
acl ficheros_wmv url_regex \.wmv$
delay_access 1 allow ficheros_wmv

Cuando en esa red, algún equipo haya bajado más de 1Mb correspondiente a ficheros .wmv entonces la descarga total de ficheros .wmv se hará a una velocidad de 8k/s. Si quisiéramos establecer este límite para los hosts de una red deberíamos elegir la clase 2.
En el anterior ejemplo hemos supuesto que hay un único canal de regulación en el parámetro delay_pools. Ahora vamos a ver un ejemplo con dos canales de clase 1. Queremos que el tráfico de la red local no tenga límite de transferencia, mientras que para las conexiones a internet vamos a utilizar un total de 256Kbits/s.
delay_pools 2
delay_class 1 1
delay_parameters 1 -1/-1
acl red_local src 192.168.0.0/24
delay_access 1 allow red_local
delay_class 2 1
delay_parameters 2 32768/1024
acl resto all src 0.0.0.0/0.0.0.0
delay_access 2 allow resto
La tasa de transferencia viene especificada en bytes por segundo, por ejemplo convirtiendo a otras unidades uno de los parámetros de delay_parameters:
32768 B/s = 32 KB/s = 32 x 8 Kb/s (bits) = 256 Kb/s = 256 Kbits/s
El valor 1024 es un número de bytes lo suficientemente pequeño para que se alcance pronto y se estabilice el ancho de banda.
El valor -1 indica ilimitado.
Las regulaciones de clase 1 están diseñadas para evitar que la acl correspondiente consuma todo el ancho de banda, es decir definen la suma máxima de los anchos de banda de todos los clientes, pero no evita que un cliente pueda consumir ese ancho de banda a costa de otro; todos os clientes comparten un máximo ancho de banda.
Clase 2
La clase dos que consiste en un canal común con 256 canales individuales. Es decir tenemos un canal global y dentro de él otros 256 canales que se aplican a las máquinas de una red de clase C.
Ahora vamos a ver otro ejemplo con dos canales, en este caso ambos de de clase 2. Ahora también que el tráfico de la red local no tenga límite de transferencia, ni global ni por IP, mientras que para las conexiones a internet vamos a utilizar un total de 256Kbits/s y a cada máquina de la red le asigna un máximo de 64kbits/s.
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
acl red_local src 192.168.0.0/24
delay_access 1 allow red_local
delay_class 2 2
delay_parameters 2 32768/1024 8192/1024
acl resto all src 0.0.0.0/0.0.0.0
delay_access 2 allow resto
Este ejemplo es muy parecido al anterior de clase 1, sólo tenemos que agregarle una pareja de valores al parámetro "delay_parameters". La primera pareja de este parámetro especifica el ancho de banda global, mientras que la segunda pareja especifica el ancho de banda por host.
Hay que tener en cuenta que los clientes están limitados por el tamaño del canal más pequeño, por lo que no tiene sentido que el canal común tenga un tamaño menor que los canales individuales.
Clase 3
La clase tres que define un canal común que contiene 256 canales de red, 65536 canales individuales. Muy parecida a la clase dos pero par redes de clase B.
Hay que tener en cuenta que los clientes están limitados por el tamaño del canal más pequeño, por lo que no tiene sentido que el canal común tenga un tamaño menor que los canales individuales.
Ejemplos de control de ancho de banda
Limitación global del ancho de banda
Tenemos una conexión con internet de 4Mbits y queremos que el ancho de banda dedicado a consulta de páginas web desede las IP comprendidas entre 192.168.5.100 hasta 192.168.5.199 sea de 1Mbits máximo.
1Mb/s = 128kB/s = 131072 B/s
4Mb/s = 512kB/s = 524288 B/s
delay_pools 1
delay_class 1 1
delay_parameters 1 131072/8192
acl lista src 192.168.5.100-192.168.5.199/32
delay_access 1 allow lista

Limitación de ancho de banda por red y host
Tenemos una conexión con internet de 4Mbits y queremos que el ancho de banda dedicado a consulta de páginas web desede las IP comprendidas entre 192.168.5.100 hasta 192.168.5.199 sea de 1Mbits máximo, de forma que cada una de las máquinas no pueda consumir más de 512Kbits/s.
Es como el ejemplo anterior, pero añadiendo restricciones adicionales a cada una de las máquinas, por lo que tendremos que elegir la clase 2:
delay_pools 1
delay_class 1 2
delay_parameters 1 131072/8192 65536/8192
acl lista src 192.168.5.100-192.168.5.199/32
delay_access 1 allow lista

Limitación de ancho de banda por servidor
Queremos limitar el ancho de banda a 4KB/s y que cada máquina consuma a lo sumo 2KB/s para todas las conexiones que se hagan a los servidores de banner cuyo nombre empieza por ad.
delay_pools 1
delay_class 1 2
delay_parameters 1 4096/4096 2048/2048
acl publicidad url_regex http://ad.*
delay_access 1 allow publicidad

Ancho de banda ilimitado para la red local
Garantizar un ancho de banda ilimitado para los accesos a la red local
delay_pools 1
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
acl redlocal url_regex -i 192.168
delay_access 1 allow redlocal
Establecer privilegios de acceso
Establecer privilegios en la red
delay_pools 3
delay_class 1 1
delay_class 2 1
delay_class 3 1
delay_parameters 1 -1/-1
delay_parameters 2 131072/8192
delay_parameters 3 65536/8192
acl jefes src 192.168.5.1-192.168.5.50/32
acl subjefes src 192.168.5.51-192.168.5.99/32
acl resto src 0/0
delay_access 1 allow jefes
delay_access 2 allow subjefes
delay_access 3 allow resto

Ancho de banda en horarios distintos
Limitar el ancho de banda en una franja de horario
acl todos src 0/0
acl laboral time 08:30-16:30
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
delay_access 1 allow todos
delay_class 2 2
delay_parameters 2 131072/8192 65536/8192
delay_access 2 allow laboral
delay_access 2 deny !laboral
delay_access 2 allow todos

Configuración de los navagadores clientes
Esta configuración exige que cada navegador esté configurado para utilizar el proxy. Pero claro, por una lado es un engorro tener que configurar uno a uno todos los equipos de la red y por otro, tenemos la posibilidad de que la configuración TCP/IP le da salida a través de una pasarela.
Si a pesar de todo queremos esta configuración, tendremos que decirle al navegador que utilice como proxy el equipo que alberga Squid y el puerto el 3128. El puerto se puede cambiar en el fichero de configuración. Otro puerto que se suele usar para proxy es el 8080, pero ¿para qué cambiarlo?

Proxy Transparente
Como queremos evitar tener que configurar los navegadores cliente y queremos evitar posibles puertas traseras de salida vamos a configurar un proxy transparente.

¿Qué es un proxy transparente? 
Es un proxy que no necesita ninguna configuración especial en los clientes. Se denomina transparente porque el cliente en realidad no sabe que lo está usando, es transparente para él.
Cómo configurar el proxy transparente, pues en primer lugar tenemos que configurar el cortafuegos para que reenvíe todas las peticiones que se hagan a un puerto 80 hacia el puerto 3128 que utiliza Squid. Es decir, capturamos todas las peticiones que se hagan a un servidor http y se las enviamos a Squid para que él se encarge del resto.
Estas son las reglas de iptables. La primera para redrigir las peticiones al proxy la siguiente para rechazar el resto de los reenvíos.

Si queremos que las páginas web pasen por el proxy con squid que está en 192.168.5.254, pero el resto siga con acceso normal, pondríamos:
iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.5.254:3128

Si el equipo con squid está en la misma pasarela entonces podemos poner:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

Cuidado, de las opciones anteriores sólo debemos escoger una de ellas.
Si sólo queremos salida para visitar págias web, entonces pondremos:
Primero garantizamos el tráfico DNS:
iptables -A FORWARD -p tcp -m tcp --dport 53 -j ACCEPT
optables -A FORWARD -p udp -m udp --dport 53 -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --sport 53 -j ACCEPT
iptables -A FORWARD -p udp -m udp --sport 53 -j ACCEPT

En el siguiente caso suponemos que el equipo con squid está en 192.168.5.254:
iptables -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.5.254:3128
iptables -t nat -A FORWARD -j REJECT --reject-with icmp-port-unreachable

Si el equipo con squid está en la misma pasarela entonces podemos poner:
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128

iptables -A FORWARD -j REJECT --reject-with icmp-port-unreachable


martes, 14 de abril de 2015

Servidor Squid en Debian Wheezy


Vamos a configurar el servicio Squid en Debian Wheezy

Squid es un servidor proxy para web con caché. Es una de las aplicaciones más populares y de referencia para esta función,software libre publicado bajo licencia GPL. Entre sus utilidades está la de mejorar el rendimiento de las conexiones de empresas y particulares a Internet guardando en caché peticiones recurrentes a servidores web y DNS, acelerar el acceso a un servidor webdeterminado o añadir seguridad realizando filtrados de tráfico.

1. Instalación

# aptitude install squid3

2. La configuración de squid3 se almacena en el archivo /etc/squid3/squid.conf.

3. Squid3 acepta, por defecto, conexiones en el puerto 3128.  Sin embargo, esto puede modificarse colocando otro puerto por ejemplo el conocido 8080.

etc/squid3/squid.conf
#[...]

# Squid normally listens to port 3128
http_port 3128

#[...]

http_port 3128 --> Puerto por el cual escuchará las peticiones el Proxy.

4. Por seguridad, squid3 sólo responderá a pedidos de la red local o en el propio servidor. Esta restricción es conseguida definiendo una lista de control de acceso oACL (Access Control List) (acl plataforma.linux.org.ve src 192.168.10.0/24) y autorizando el acceso sólo a los sistemas incluidos en esa lista (http_access allow plataforma.linux.org.ve):

etc/squid3/squid.conf
# [...]

#  TAG: acl
#       Defining an Access List

# [...]

#Default:
# acl all src all
#
#
# Recommended minimum configuration:
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
#acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
#acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
#acl localnet src 192.168.0.0/16        # RFC1918 possible internal network
#acl localnet src fc00::/7       # RFC 4193 local private network range
#acl localnet src fe80::/10      # RFC 4291 link-local (directly plugged) machines

acl plataforma.linux.org.ve src 192.168.10.1/24

# [...]

5.  Definición de permisos de acceso a la sección http_access:

/etc/squid3/squid.conf
# [...]

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
#http_access allow localnet
http_access allow localhost

http_access allow plataforma.linux.org.ve

# And finally deny all other access to this proxy
http_access deny all

# [...]

6. Modificamos el  tamaño total de la cache de squid3 a un valor adecuado ejemplo 2048Mb:

# [...]

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid3 100 16 256
cache_dir ufs /var/spool/squid3 2048 16 256

# [...]

7.  También podemos definir la identificación de nuestro servidor proxy

# [...]

#  TAG: visible_hostname
#       If you want to present a special hostname in error messages, etc,
#       define this.  Otherwise, the return value of gethostname()
#       will be used. If you have multiple caches in a cluster and
#       get errors about IP-forwarding you must set them to have individual
#       names with this setting.
#Default:
# visible_hostname localhost
visible_hostname proxy.plataforma.linux.org.ve

# [...]

visible_hostname proxy.plataforma.linux.org.ve ---> Nombre del Servidor Proxy

8. De manera opcional, también se puede configurar el límite máximo de los objetos que se guarden en el cache, al definir el parámetro maximum_object_size con un valor en Kbytes:

/etc/squid3/squid.conf
# [...]

#  TAG: maximum_object_size     (bytes)
#       Objects larger than this size will NOT be saved on disk.  The
#       value is specified in kilobytes, and the default is 4MB.  If
#       you wish to get a high BYTES hit ratio, you should probably
#       increase this (one 32 MB object hit counts for 3200 10KB
#       hits).  If you wish to increase speed more than your want to
#       save bandwidth you should leave this low.
#
#       NOTE: if using the LFUDA replacement policy you should increase
#       this value to maximize the byte hit rate improvement of LFUDA!
#       See replacement_policy below for a discussion of this policy.
#Default:
# maximum_object_size 4096 KB
maximum_object_size 20480 KB

# [...]

9. Reiniciamos el servicio squid

# /etc/init.d/squid3 restart

Con esto funcionara nuestro servidor squid básico hay una serie de funciones que se le pueden agregar como por ejemplo bloqueo de paginas y usuarios a continuación mostraremos como hacerlo.

Creando bloqueos

1. Crearemos una carpeta llamada bloqueos y en ella 2 archivos donde colocaremos paginas seguras y paginas a bloquear

Crearemos una carpeta llamada bloqueos
# mkdir /etc/squid3/bloqueos

Crearemos el primer archivo y lo llamaremos sitios-seguros
# nano /etc/squid3/bloqueos/sitios-seguros

Una vez creado el archivo, lo editamos y colocamos las paginas a la cual pueden tener acceso
#/etc/squid/bloqueos/sitios-seguros    

www.banco.com
www.otros.com
www.otros.com

guardamos y cerramos el archivo

Ahora...

Crearemos el segundo archivo y lo llamaremos sitios-denegados
# nano /etc/squid3/bloqueos/sitios-denegados

Una vez creado el archivo, lo editamos y colocamos las paginas a las que no se tendrán acceso
#/etc/squid/bloqueos/sitios-denegados

www.youtube.com
www.twitter.com
www.facebook.com

guardamos y cerramos el archivo

Ya tenemos los sitios que tendrán acceso y los sitios que están denegados el acceso, ahora se van a crear los usuarios de la red

2. Vamos a crear los usuarios para nuestra red

Crearemos una carpeta llamada usuarios y en ella 2 archivos donde colocaremos jefes y usuarios

Crearemos una carpeta llamada usuarios
# mkdir /etc/squid3/usuarios

Crearemos el primer archivo y lo llamaremos jefes
# nano /etc/squid/usuarios/jefes

Una vez creado el archivo, lo editamos y colocamos las IP de los equipos de los jefes
/etc/squid/usuarios/jefes     

192.168.10.2
192.168.10.3
192.168.10.4 

Crearemos el segundo archivo y lo llamaremos usuarios
# nano /etc/squid/usuarios/usuarios

192.168.10.20
192.168.10.21
192.168.10.22

Con esto tenemos un bloqueo básico ahora debemos aplicar nuestras reglas en el archivo de configuración del squid

#Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32

#configuracion de sitios
acl sitios-seguros url_regex "/etc/squid/bloqueos/sistios-seguros"
acl sitios-denegados url_regex "/etc/squid/bloqueos/sistios-denegados"

Lista de control de acceso llamada “sitios-seguro y sitios-denegados” de tipo url_regex  esta ubicado en un archivo con las paginas que queramos acceder o negar.

#configuracion de usuarios
acl jefes    src    "/etc/squid3/usuarios/jefes"
acl usuarios    src    "/etc/squid3/usuarios/usuarios"

ahora habilitaremos las reglas para controlar la navegación por los sitios seguros y la denegación por los sitios-denegados

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

#mis reglas#
http_access allow sitios-seguros
http_access allow jefes
http_access allow usuarios !sitios-denegados
    
Por medio del comando http_access y el nombre de la lista de control de acceso podenos permitir(allow) o denegar (deny) el servicio a dichas listas.

Ahora reiniciamos el servicio squid para que funcionen las reglas creadas
# /etc/init.d/squid3 restart