Bloquear sitios por horario con Squid


Se configurara Squid de tal forma que filtre contenido Web en horario especifico.

1- Solo se permitirá el acceso a ciertas paginas Web.
  • (Paginas permitidas)

  • 2- Solo se permitirá el acceso a la web en un horario especifico.
  • (Horario establecido)

  • 3- Solo se permitirá el acceso a ciertos sitios en horario establecido.
  • (Paginas tipo ocio en horario de descanso).

  • Sistema Operativo: Debian Squeeze
    Version de Squid: Version 3.0.STABLE


    Editamos el archivo de configuración del Squid, ubicando las Lista de Control de Acceso
    #vim /etc/squid3/squid.conf
    ===========================
    acl red_local src 192.168.1.0/255.255.255.0
    acl paginas_permitidas url_regex "/etc/squid3/paginas_permitidas"
    acl paginas_descanso url_regex "/etc/squid3/paginas_descanso"
    acl horario_descanso time MTWHF 12:00-13:00
    acl horario_laboral time MTWHF 06:00-20:00


    Ahora se debe crear los archivos paginas_permitidas y paginas_descanso, estos archivos contienen los sitios a los que permitiremos el acceso.

    Después nos ubicamos en las Reglas de Control de Acceso
    ===========================
    http_access deny !red_local
    http_access deny !horario_laboral
    http_access allow paginas_permitidas
    http_access allow paginas_descanso horario_descanso


    Hemos definido que:

    1- paginas_permitidas: Son los sitios a los cuales se podrán visitar sin ningún tipo de restrincion.

    2- paginas_descanso y horario_descanso: Solo se podrá visitar ciertos sitios en horario establecido.

    Con esto se definen los 3 Items que se mencionaron anteriormente.

    Las Lista de Control de Acceso quedaran de esta forma:
    Y las Reglas de Control de Acceso quedaran así
    De esta forma solo se permitirá el acceso los días Lunes, Martes, Miércoles, Jueves y Viernes a URLs definidas por nosotros y solo se podrán visitar ciertas paginas en horario especifico.

    SNMP sobre Debian Squeeze


    Según la Wikipedia SNMP es un protocolo de la capa de aplicación que facilita el intercambio de información de administración entre dispositivos de red. Es parte de la familia de protocolos TCP/IP. SNMP permite a los administradores supervisar el funcionamiento de la red, buscar y resolver sus problemas, y planear su crecimiento.

    En este caso se instalara el servicio SNMP sobre Debian Squeeze.
    Procedemos a instalar el Demonio SNMPD con:


    #apt-get install snmp snmpd

    Después de descargar el Servicio editamos el archivo ubicamos esta línea y quitamos la dirección de Loopback, con el fin que el servicio escuche en todas las interfaces.

    #vim /etc/default/snmpd
    =======================
    SNMPDOPTS='-Lsd -Lf /dev/null -u snmp -g snmp -I -smux -p /var/run/snmpd.pid'
    =======================
    Podemos observar que; después de reiniciar el Servicio ahora no solo escucha por la interfaz Loopback

    #netstat -ano | grep ":162"
    ===============
    udp 0 0 0.0.0.0:162 0.0.0.0 off (0.00/0/0)

    #netstat -ano | grep ":161"
    ===============
    udp 0 0 0.0.0.0:161 0.0.0.0 off (0.00/0/0)


    Procedemos a configurar el archivo principal del servicio SNMP
    #vim /etc/snmp/snmpd.conf
    =====================================================================
    com2sec local localhost public
    com2sec localnet 192.168.1.0/24 public

    group MyRWGroup v1 local
    group MyRWGroup v2c local
    group MyRWGroup usm local

    group MyRWGroup v1 localnet
    group MyRWGroup v2c localnet
    group MyRWGroup usm localnet

    view all included .1 80
    view system included .iso.org.dod.internet.mgmt.mib-2.system

    access MyRWGroup "" any noauth exact all all none
    =====================================================================

    En donde:
    ====================
    com2sec local localhost public
    com2sec localnet 192.168.1.0/24 public

  • Se crea ACL, que servirán para definir quien tendrá acceso hacia el servicio snmpd, estos parámetros se configuran según la necesidad que tenga el admin de red.

  • ====================
    group MyRWGroup v1 local
    group MyRWGroup v2c local
    group MyRWGroup usm local

    group MyRWGroup v1 localnet
    group MyRWGroup v2c localnet
    group MyRWGroup usm localnet

  • Se asocia el grupo a la ACL creada con anterioridad, de esta manera tanto la ACL localnet como local se le asignan los permisos de Escritura y Lectura, estos parámetros se configuran según la necesidad que tenga el admin de red.

  • ====================
    view all included .1 80
    view system included .iso.org.dod.internet.mgmt.mib-2.system

  • Se especifican las ramas que se van a permitir ver a través del servicio. (Si se lee la documentación acerca de este protocolo entenderá este paso).

  • ====================
    access MyRWGroup "" any noauth exact all all none
  • Se especifica los permisos que tiene los grupos credos en esta caso localnet y localhost

  • Opcional se puede agregar estas dos lineas:

  • syslocation Locación del equipo (Preferiblemente el FQDN de la maquina)
    syscontact Correo electrónico del encargado del sistema

  • Pruebas:

  • 1- Instalamos el Software SCLI
    #apt-get install scli
    Copiamos en una terminal
    ===========
    #scli IP_del_cliente_SNMP Nos aparecerá la consola de SCLI, con este monitoreamos atreaves de SNMP
    Copiamos dentro de la consola monitor
    Para ver mas información atraves de SNMP pulsamos la tecla "q"

    2- Con la herramienta nativa de SNMP SNMPWALK.
    #snmpwalk -v 1 192.168.1.254 -c public
    SNMPWALK es usada para leer todos los valores de un agente SNMP especificado por el hostname. Community especifica la comunidad lectora para el agente.

    Instalación de OCS Inventory


    Según la Wikipedia OCS inventory es.

    Para la instalación de OCS Inventory es necesario tener
    LAMP instalado, procedemos a instalar los siguientes paquetes.
    #apt-get install apache2 php5 libapache2-mod-php5

    Se usara el motor de Bases de Datos MySQL.
    #apt-get install mysql-server mysql-client php5-mysql (Durante la instalacion nos solicitorá la contraseña del admon de la BD).

    Por último procedemos a instalar PhpMyAdmin.

    #apt-get install phpmyadmin

    Ahora procedemos a instalar OCS Inventory.
    #apt-get install ocsinventory-server ocsinventory-reports (Nos aparecerá un asistente para la configuración de OCS Inventory, configurar OCS Inventory con "dbconfig-common" señalamos “Si”)

    Durante el proceso de instalación se solicitara la contraseña del admon de la Bases de Datos.

    Antes de ingresar a la consola de OCS primero debemos cambiar la contraseña del usuario admin, realizamos esto con:
    #htpasswd /etc/ocsinventory/htpasswd.setup admin

    Ahora accedemos con un navegador http://ip_del_server/ocsreports, nos aparecerá un pequeño asistente para terminar la instalación de OCS.

    -En la primera pagina:
    =================================
    MySql login: ocs
    MySql password: **********
    MySql Hostname: localhost
    =================================

    -Luego se nos solicita la contraseña que cambiamos ahora.
    -Finalizamos instalando la Base de Datos con clic en
    submit query.

    Para ingresar a la consola se nos solicitara unas credenciales ingresamos usuario admin contraseña admin.




    MultiTail


    Aveces es necesario ejecutar varias terminales para poder visializar Logs de servicios o del sistema.

    Por esta razon se ha creado MultiTail

    #apt-get install multitail

    Y para visualizar varios Logs en una sola terminal ejecutamos:

    #multitail /var/log/Losgs1.log /var/log/Logs2.log


    Integrar un equipo Linux a Active Directory


    El propósito del siguiente es integrar un equipo Linux con Active Directory, para realizar esto debemos cumplir con los siguientes requerimientos:

    1- Se debe tener instalado correctamente Active Directory.
    2- En el equipo Linux debe de tener instalado el demonio Samba (mas actual).
    3- Se debe contar con conexión a Internet, si para llegar a la nube primero se debe pasar
    por un Firewall, verificar que este no bloquee el puerto 123 de NTP.

    La configuración con la que contamos es la siguiente:
    Obviamente debe de existir comunicación entre el Windows y Linux, el A.D debe resolverle al
    Linux las zonas del DNS.

    Ahora descargamos los siguientes paquetes, con:

    #apt-get install samba smbclient winbind krb5-user krb5-config

    Luego nos ubicamos en /etc/hosts y agregamos esto:

    127.0.1.1 ad.prueba.local ad
    192.168.159.130 linux.prueba.local linux

    Ojo, agregamos estas líneas pues me sirvieron, recordemos que prueba.local es el dominio y
    que la dirección IP 192.168.159.131 es la dirección IP del equipo que tiene instalado Active
    Directory.

    [libdefaults]
    default_realm = PRUEBA.LOCAL
    clockskew = 300

    [realms]
    PRUEBA.LOCAL = {
    kdc = 192.168.159.131
    default_domain = prueba.local
    admin_server = 192.168.159.131
    }
    prueba.local = {
    kdc = 192.168.159.131
    default_domain = prueba.local
    admin_server = 192.168.159.131
    }
    prueba = {
    kdc = 192.168.159.131
    default_domain = prueba
    admin_server = 192.168.159.131
    }

    [logging]
    kdc = FILE:/var/log/krb5/krb5kdc.log
    admin_server = FILE:/var/log/krb5/kadmind.log
    default = SYSLOG:NOTICE:DAEMON

    [domain realm]
    .prueba = prueba
    .prueba.local = PRUEBA.LOCAL

    [appdefaults]
    pam = {
    ticket_lifetime = 1d
    renew_lifetime = 1d
    forwardable = true
    proxiable = false
    retain_after_close = false
    minimum_uid = 0
    try_first_pass = true
    }
    Ahora creamos un ticket de Kerberos, ejecutando lo siguiente, acá nos pedirá la contraseña del
    administrador del dominio:

    #Kinit Administrador@prueba.local

    Ahora sigue Samba, otra vez recomiendo, hacer el backup del archivo original, luego borramos
    el contenido del archivo smb.conf y agregamos estas líneas:

    [global]
    security = ADS
    netbios name = debian
    realm = PRUEBA.LOCAL
    password server = ad.prueba.local
    workgroup = PRUEBA
    log level = 1
    syslog = 0
    idmap uid = 10000-29999
    idmap gid = 10000-29999
    winbind separator = *
    winbind enum users = yes
    winbind enum groups = yes
    winbind use default domain = yes
    template homedir = /home/%D/%U
    template shell = /bin/bash
    client use spnego = yes
    domain master = no
    server string = linux como cliente de AD
    encrypt passwords = yes

    ##compartir el home del usuario solo para él cuando se encuentre en
    otro equipo de la red

    [homes]
    comment = Home Directories
    valid users = %S
    browseable = No
    read only = No
    inherit acls = Yes

    [profiles]
    comment = Network Profiles Service
    path = %H
    read only = No
    store dos attributes = Yes
    create mask = 0600
    directory mask = 0700

    ##compartir una carpeta para todos los usuarios
    [users]
    comment = All users
    path = /home/samba/
    read only = No
    inherit acls = Yes
    veto files = /aquota.user/groups/shares/

    ##compartir carpeta solo para el usuario
    [PEPE]
    comment = Prueba con usuario del dominio PEPE
    inherit acls = Yes
    path = /home/pepe/
    read only = No
    available = Yes
    browseable = Yes
    valid users = prueba*pepe

    ¡Creo que no hay que explicar nada de cómo se comparte archivos con Samba… y las opciones
    nuevas no es si no leerlas son fáciles de comprender!.

    Después se reinicia Samba y se ejecuta el comando testparm, el cual no da un resumen de la
    configuración de Samba y el rol que este cumple (PDC, Grupo de trabajo, miembro de dominio
    etc.)

    #/etc/init.d/samba restart && testparm

    Ahora agregamos el Linux al dominio, con:

    #net ads join -S ad.pruebas.local -U administrador

    Nos apareció esto cierto!! Fallamos.

    Administrador's password:
    [2009/05/31 16:58:33, 0]
    libsmb/cliconnect.c:cli_session_setup_spnego(785)
    Kinit failed: Clock skew too great
    Failed to join domain!

    Lo que pasa es que Kerberos es muy exigente con la hora lo cal de nuestro Linux si no nos
    apareció esto no hay por qué preocuparse, para arreglar esto digitamos.

    #ntpdate pool.ntp.org

    Esta línea significa que para poder gestionar la fecha y hora en el servidor de manera correcta
    con respecto a los servidores de hora en Internet, debemos de tener instalado el demonio
    NTP.

    Después de hacer esto nos debería unir el Linux al dominio, y si no es porque algo fallo en la
    configuración de Kerberos.

    Para poder resolver nombres de usuarios y grupos del dominio editamos “/etc/nsswitch.conf”,
    nos debe de quedar igual a esto:

    passwd: files winbind
    group: files winbind
    shadow: files winbind
    hosts: files dns winbind

    Con estas líneas los usuarios y los grupos pueden ser resueltos.
    Reiniciamos Winbind.

    #/etc/init.d/winbind restart

    Para ver si nuestro Linux está bien integrado al dominio, escribimos.

    #net rpc testjoin
    ---------
    Join to 'PRUEBA' is OK

    Ahora par ver información del dominio.

    #net ads info
    -----------
    LDAP server: 192.168.159.131
    LDAP server name: ad.prueba.local
    Realm: PRUEBA.LOCAL
    Bind Path: dc=PRUEBA,dc=LOCAL
    LDAP port: 389
    Server time: dom, 5 may 2009 16:59:04 MDT
    KDC server: 192.168.1.254
    Server time offset: 11

    Ahora si queremos ver las características del usuario como grupo a que pertenece, SID,
    Dominio a que pertenece etc.

    #net rpc info -U Administrador
    -----------
    Password:
    Domain Name: PRUEBAS
    Domain SID: S-1-5-21-4-405764553-56874023-5698031759
    Sequence number: 96
    Num users: 10
    Num domain groups: 9
    Num local groups: 21

    ¡Obviamente no nos tiene que aparecer estos mismos resultados!
    Para verificar que el demonio Winbind esté funcionando correctamente digitamos.

    #wbinfo -u" Lista usuarios del dominio.
    #wbinfo -g" Lista grupos del dominio.
    #getent passwd" Muestra usuarios locales y del dominio.
    #getent group" Muestra grupos locales y del dominio.

    Si todo esto está funcionando estamos por buen camino.
    Aun mejor si queremos que los usuarios de Active Directory, se logueen en la maquina Linux,
    no es si modificar el PAM, ¡ojo si no se configura bien no podremos ingresar al Linux!,
    acuérdense del Mandriva Directory Server…… Lo que haremos es lo siguiente comentamos las
    líneas que no lo están en los siguientes archivos.

    1- Editamos /etc/pam.d/common-account

    Account sufficient pam_winbind.so
    account required pam_unix.so try_first_pass

    2- Editamos /etc/pam.d/common-auth

    auth sufficient pam_winbind.so
    auth required pam_unix.so nullok_secure try_first_pass

    3- Editamos /etc/pam.d/common-password

    password sufficient pam_winbind.so
    password required pam_unix.so nullok obscure min=4 max=8 md5try_first_pass

    4- Editamos /etc/pam.d/common-session

    session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
    session sufficient pam_winbind.so
    session required pam_unix.so try_first_pass

    El modulo pam_winbind.so le indica a PAM que obtenga los usuarios y grupos de Winbind. Y
    el modulo pam_mkhomedir.so nos crea el directorio home del usuario en caso de no existir.

    Creamos el directorio /home/PRUEBA (En mayúscula y recuerden este se crea con el nombre NetBIOS del dominio), acá se alojaran el home de los usuarios.

    Ahora las pruebas!
    Recordemos que habíamos creado una sesión en Samba que decía:

    [PEPE]
    comment = Prueba con usuario del dominio PEPE
    inherit acls = Yes
    path = /home/pepe/
    read only = No
    available = Yes
    browseable = Yes
    valid users = prueba*pepe

    1-Entonces debe existir este directorio /home/pepe/ y /home/samba/
    2-En el Active Directory debe existir el usuario pepe.
    3-Ahora nos logueamos con pepe en la maquina Linux, nos saldrá algo como esto:
    1- Desmontamos las unidades de los clientes Windows con el siguiente comando desde CMD.
    2- Accedemos al recurso compartido por este usuario (pepe), digitando en ejecutar o en el
    Explorador de Windows \\linux o \\192.168.159.130.
    3- Como vemos solo podemos ingresar al directorio del usuario.

    Si tratamos de ingresar a otro directorio de otro usuario saldrá una ventana de login.

    Virtual Host en LigHTTPD


    Se configurará LigHTTPD, con soporte para albergar varios sitios Webs, ya sea por IP, nombre o puerto.

    1- Se procede a la descarga del software necesario.
    #apt-get install lighttpd

    2- Editamos el archivo principal de LigHTTPD, y al final agregamos.
    #vim /etc/lighttpd/lighttpd.conf

    3- Host Virtual por puerto:
    $SERVER["socket"] == ":44" {
    server.document-root = "/var/www/web1"
    }

    En /var/www/web1, es en donde se encuentra el index.html, que cargara este sitio.
    4- Host Virtual por Encabezado.
    $HTTP["host"] == "www.home.local" {
    server.document-root = "/var/www/web2/"
    }

    $HTTP["host"] == "prueba.home.local" {
    server.document-root = "/var/www/web3/"
    }

    5- Directorio Virtual.
    $HTTP["host"] == "www.home.local" {
    alias.url = ("/directorio_virtual" => "/var/www/directorio_virtual")
    }

    Nota:
    Recordemos que debemos tener un Server DNS, el cual nos resuelve los nombres FQND, de los sitios.

    Apache + Autenticación


    En este se mostrara como acceder a un sitio Web cargado por Apache utilizando autenticación basica (No se cifra las credenciales).

    1- Software necesario:

    #aptitude install apache2 apache2-utils


    2- Cramos un directorio en la ruta /etc/apache2/, lo llamamos autenticacion.

    #mkdir /etc/apache2/autenticacion


    3- Dentro del nuevo directorio creamos un archivo, llamado usuarios.

    #touch /etc/apache2/autenticacion/usuario

    4- Creamos los usuarios.

    #htpasswd -d /etc/apache2/autenticacion/usuario pepe
    ----------
    New password:******
    Re-type new password:******
    Adding password for user pepe

    5- Editamos el host virtual pero primero realizamos Backup de este archivo, agregamos al final del archivo las siguientes lineas, tambien verificamos que la linea DocumentRoot /var/www encontrada al principio del archivo apunte al directorio en donde tenemos nuestro sitio, en este caso seria: DocumentRoot /var/www/sitio1/

    #vim /etc/apache2/sites-available/default
    ----------


     
    |  Esdebian Foro El que sabe sabe, no como el que quiere aprender!