Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
[2.8] Proxies
2
TEMA
Sistemas Linux
Esquema
TEMA 2 – Esquema
Sistema operativo de software Seguridad en las funciones que no Seguridad en las funciones que
libre muy popular cuyo código requieren acceso a la red requieren acceso a la red
puede ser modificado libremente
Seguridad en la autentificación Seguridad en el acceso a la red:
Introducción • TCP Wrapper
• El kernel • Cortafuegos
2
• El sistema de archivos Seguridad en el acceso a la consola: • Netfilter
• Los permisos • BIOS
• GRUB Proxies
Instalación • Bloqueo de sesión • Squid
• Particionado • Teclas de petición del sistema • WPAD
• Memoria swap • Terminales virtuales • SARG
• Cifrado con LUKS • Usuarios
• Postinstalación y gestión de
paquetes Técnicas de detección de intrusos
Otras medidas de seguridad
Seguridad en Sistemas Operativos Propietarios
Seguridad en Sistemas Operativos Propietarios
Ideas clave
Linux es conocido mundialmente por sus ventajas sobre otros sistemas operativos, como
su mayor rendimiento, menor tasa de fallos, seguridad y gran soporte para todo
tipo de hardware. Pero por encima de todo, la mayor ventaja que ofrece es que el sistema
operativo Linux es software libre, es decir, cualquier persona puede descargarse el
código fuente de Internet o adquirir un CD de bajo coste con la imagen.
En Linux, el usuario administrador es root, que dispone de todos los privilegios del
sistema. Cualquier atacante desearía tener el control de root, ya que de esta forma
tendría acceso a todos los servicios, dispositivos y cuentas de usuario.
Para arrancar Linux o cualquier otro sistema operativo en un host se debe de configurar
un proceso de inicio. El proceso de inicio empleado por Linux es: GRUB o LILO, aunque
este último se usa cada vez menos, el cual puede arrancar Linux o cualquier otro sistema
operativo instalado en el host.
A veces puede ser interesante analizar el tráfico que genera un ordenador para
decidir si bloquear o dejar pasar la comunicación. Para ello existen los cortafuegos,
que son programas que examinan el tráfico que atraviesa una interfaz y toman
decisiones de enrutamiento basándose en una serie de reglas.
Los cortafuegos pueden ser dispositivos software o hardware. Los cortafuegos suelen
confundirse con los filtros de paquetes, pero no son lo mismo. Los cortafuegos
incluyen la función de filtros de paquetes, pero algunos cortafuegos pueden examinar
algo más que simples encabezados de paquete; también pueden examinar los datos (o
la carga útil) de los paquetes para decidir si son bloqueados o no.
Hoy en día, la información es un activo de gran valor, tanto para las empresas como
para los particulares. Si se produjera un accidente que dañara dicha información las
consecuencias podrían ser fatales. Para intentar evitar esta tragedia existen los
backups o copias de seguridad, los cuales permiten restaurar un sistema de ficheros
dañado al estado guardado en el último backup.
Los sistemas de archivos en red, NFS (Network File System), permiten que dos host
Linux compartan sistemas de archivos, por lo tanto varias máquinas en una misma
red podrán acceder a ficheros remotos como si se tratara de locales de una forma
totalmente transparente para el usuario.
Para asegurar los datos que se encuentran almacenados dentro de los discos se
utiliza RAID. RAID permite utilizar varios discos como si fueran un único disco
grande, distribuyendo o replicando los datos almacenados, con lo que se mejorará la
seguridad y disponibilidad de los datos.
La consola segura, más conocida como ssh, permite la conexión desde un equipo a
un servidor remoto y realizar acciones en el servidor de igual forma que si se hicieran
en el equipo local, con lo que se ofrecen infinidad de posibilidades. Para mantener la
seguridad en todas estas acciones entre host y servidor, ssh cifra todos los datos que
viajan entre las dos máquinas, de manera que si alguien intercepta la conversación, no
pueda extraer los datos que intervienen en ella.
Un host bastión consiste en un host ejecutando una aplicación con el fin de asegurar
una red de computadores. Esta aplicación permite convertir casi cualquier máquina en
un cortafuegos, router u ordenador de propósito general.
Este tema está dedicado a la seguridad en Linux. Nos hemos basado en las
distribuciones Debian GNU/Linux 7.3 Wheezy (14 de diciembre de 2013) y Ubuntu
Server 12.04.3 Precise Pangolin (26 de abril de 2012). Ambas distribuciones son
gratuitas y se pueden descargar de sus respectivas páginas web.
Para detalles sobre los comandos visite la correspondiente documentación oficial de
cada distribución:
Debian 7.3: http://debian-handbook.info/browse/stable/
Ubuntu 12.04.3: https://help.ubuntu.com/12.04/
El kernel
El kernel, situado entre el hardware y las aplicaciones, puede ser considerado como
el núcleo de los sistemas Linux y su función es la de hacer que el software y el hardware
trabajen juntos. Las funciones más importantes del kernel son administrar la
memoria y el tiempo de ejecución de los programas que están ejecutándose y gestionar
el acceso a los periféricos.
Con respecto a la seguridad en el núcleo de Linux tendremos que tener claro los
siguientes aspectos:
La opción de red.
El cifrado que soporta.
Hardware de cifrado que soporta.
Sistema de archivos.
El proyecto GNU.
Para ver las versiones del kernel que podemos tener acceso desde nuestro repositorio,
usaremos el siguiente comando:
# apt-cache search linux-image
Una buena fuente de información del núcleo de Linux se podría encontrar en la web
de Debian http://packages.qa.debian.org/linux o en la web de Ubuntu
http://kernel.ubuntu.com/reports/versions.html
El sistema de archivos
El sistema de archivos de Linux, como el de otros sistemas operativos, es en forma de
árbol. Hay un único tronco o raíz (root) del que salen todas las ramas. Directorios
dentro de otros de directorios que contienen otros archivos u otros directorios.
La seguridad del sistema de archivos reside en permisos que tienen usuarios y grupos
a nivel de archivos. Si introducimos la orden ls –la el sistema nos mostrará todo el
contenido del directorio en el que nos encontremos.
1. La primera columna son una serie de 10 letras que describen el tipo de archivo, los
permisos del usuario propietario, los permisos del grupo propietario y los permisos
del resto de usuarios.
2. La segunda columna, es un número que nos dice el número de archivos/directorios
que contiene.
3. La tercera y cuarta columna son respectivamente, el usuario y el grupo propietario
del archivo. Todos los archivos tienen un usuario y un grupo de usuarios propietario.
4. La quinta columna es el tamaño.
5. Las siguientes 3 columnas muestran la fecha y hora del último acceso al archivo.
6. Finalmente, la última columna el nombre del archivo.
Permisos
Los nueve siguientes símbolos describen de tres en tres (y en este orden) los permisos
del propietario, del grupo y del resto de usuarios. Los permisos se dividen en lectura “r”,
escritura “w” y ejecución “x”.
En la imagen anterior, sobre el directorio bin, el usuario root tiene los permisos de
lectura, escritura, y ejecución (rwx). Seguidamente, el grupo root, tiene los permisos
de lectura y ejecución pero no tiene el de escritura (r-x). Finalmente, el resto de
usuarios tienen de nuevo permisos de lectura y ejecución (r-x).
Para cambiar los permisos del archivo usamos el comando chmod. Los permisos se
definen mediante bits:
De esta manera:
Por ejemplo, si queremos habilitar todos los permisos al propietario, asignar permisos
de lectura y escritura al grupo y quitar todos los del resto de los usuarios, ejecutaremos
la siguiente orden:
# chmod 760 <nombre_archivo>
Los permisos más típicos suelen ser 755 (rwx r-x r-x).
En septiembre de 1983 se hizo público el proyecto por Richard Stallman. La idea era
hacer de forma altruista que un sistema operativo fuera del software propietario. El
primer desarrollo del proyecto fue emacs a los que siguieron muchos más.
En principio, Linux es simplemente el kernel del sistema operativo, pese a que hoy en
día se conoce el proyecto Linux/GNU como Linux.
Se recomienda que para la instalación del sistema operativo se realice una instalación
mínima para así evitar complicaciones. Una vez esté dicha instalación realizada, se
deberán instalar solo los componentes que vamos a necesitar. Instalar servicios
innecesarios puede complicar nuestra labor de securización del sistema.
Particionado de Linux
La decisión del particionado del disco duro deberá de ser manual. Tener diferentes
directorios del sistema en distintos volúmenes lógicos permite un mayor control del
sistema de ficheros y aumenta el rendimiento y la seguridad del sistema. De esta
manera las particiones y el tamaño de estas atenderán a diversos factores:
Para entender cómo aplicar el particionado, tendremos que entender los diferentes
directorios del sistema. Para realizar esta lista nos hemos basado en la distribución
Ubuntu y Debian.
/sys (sistema): información sobre los dispositivos tal y como los ve el kernel.
/tmp (temporales): es un directorio donde se almacenan ficheros temporales. Cada
vez que se inicia el sistema este directorio se limpia.
/usr: contiene la configuración y las bibliotecas de C, C++ y de aplicaciones de
escritorio. También tiene archivos compartidos y el código fuente para el kernel Linux
(en /usr/src)
/var: ficheros del sistema como los buffer de impresión, los logs…
Además de los diferentes directorios que podemos encontrar hay dos términos que
debemos conocer para una instalación óptima y una buena gestión de las particiones:
Cuando nuestra memoria RAM no es suficiente, Linux usa el disco duro para
almacenar dicha información que no nos cabe en la RAM. Para realizar esta función
Swap (o de intercambio) es necesario crear un volumen lógico, que deberá tener
entre 1 y 2 Gb. Este proceso de usar el disco duro como memoria caché se llama
memoria virtual.
Cifrar la información que contienen los discos duros de un sistema Linux es vital.
Cuando se accede a un sistema sin permiso se suele dar el robo de información, es
importante protegerse ante ello por la importancia o confidencialidad que pueda
tener esta información o simplemente por ser datos personales que uno quiere tener
bien protegidos.
En los siguientes capítulos se desarrolla toda una serie de medidas a tomar para
securizar nuestro sistema. De todas maneras nos parece bastante importante señalar,
el empezar a utilizar el comando sudo. Es probable que el comando sudo no aparezca
instalado, por lo que quizá necesitemos acceder al sistema como root para poder usar
el comando apt-get de instalación de paquetes. A continuación vamos a ver la
instalación de paquetes, y para permitir que un usuario pueda utilizar el comando
sudo iremos al punto Usuarios.
Una vez instalada la base del sistema operativo necesitaremos empezar a instalar todos
los paquetes necesarios según los servicios que queramos tener en nuestro servidor.
Tanto Debian como Ubuntu utilizan APT (Advanced Packaging Tool) como sistema
de gestión de paquetes. El fichero /etc/apt/sources.list contiene los repositorios de los
que la utilidad APT (Advanced Package Tool) descarga los paquetes para su
mantenimiento.
Usar la rama estable del repositorio a no ser de que se necesite una versión
específica.
Usar un repositorio oficial de la distribución instalada o de los fabricantes del
software del sistema que garanticen las actualizaciones de seguridad.
Usar repositorios que nos faciliten el código fuente, salvo que esté documentada la
modificación del mismo o se necesite versiones inestables.
Los paquetes tienen una estructura de dependencia y gestores de paquetes como APT
se encargan de resolver dichas dependencias. En Ubuntu y Debian esas dependencias
varían entre: paquetes necesarios, recomendados y sugeridos. Al instalar un
paquete se instalan, por defecto, los paquetes recomendados.
Si queremos que además de borrar el paquete eliminemos también todos los archivos
de configuración:
# apt-get --purge remove <nombre_del_paquete>
# apt-get autoremove
BIOS
La configuración de la BIOS debe estar protegida con una contraseña. Esto evitará los
cambios de configuración que vamos a hacer sobre esta. Desde la BIOS se debe añadir
una contraseña al arrancar el sistema y establecer el disco duro como primera partición
de arranque desactivando el arranque de otras unidades como CDROM o USB,
llegando incluso a eliminarlos físicamente si fuera posible.
GRUB
GRUB posee la ventaja de aportar una interfaz gráfica, con lo que el usuario podrá
ver los comandos disponibles y no tendrá que recordarlos, lo que facilita enormemente
su uso.
Para una mayor seguridad, es necesario configurarlo para que no se pueda modificar
su configuración.
Por otro lado en GRUB por defecto, aparecen dos entradas, una de ellas es la normal
y la otra es la de recuperación del sistema. Si el sistema tiene un usuario root nos pedirá
la clave de dicho usuario al entrar en modo recuperación (modo single-user). Sin
embargo, si este usuario no fue creado, el sistema iniciará el sistema con el usuario
root sin pedirnos ninguna clave.
Para evitar esto la solución sería asignar una clave a dicho usuario ejecutando las
órdenes:
# sudo su
# passwd
Si queremos que la consola desconecte el usuario cuando se superen los 300 segundos
de inactividad tendremos que añadir en el archivo /etc/profile las líneas:
TMOUT=300
readonly TMOUT
export TMOUT
Bloqueo de sesión
Las teclas de petición del sistema (Magic SysRq key) y el Contr + Alt + Supr
conviene mantenerlas desactivadas. La primera permite, mediante una combinación
de teclas pasar directamente al kernel una orden de bajo nivel. Contr + Alt + Supr
permite reiniciar el sistema. Estas teclas pueden ser llamadas sin necesidad de haberse
logueado en el sistema.
Terminales virtuales
Linux viene por defecto con 6 Terminales virtuales. Para acceder a cada una de ellas se
utiliza la combinación de teclas Alt + (F1, F2, F3, F4, F5 o F6). De esta manera,
podemos en un proceso de instalación de paquetes en la terminal tty1 mientras leemos
un archivo en la tty2.
En Debian, para deshabilitar todas las terminales virtuales excepto una tendremos que
comentar, del fichero /etc/inittab las siguientes líneas:
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
En Ubuntu tendremos que eliminar los ficheros que configuran estas terminales
virtuales. Para esto usaremos desde la Shell de Linux el comando rm:
# rm /etc/init/tty2.conf
# rm /etc/init/tty3.conf
# rm /etc/init/tty4.conf
# rm /etc/init/tty5.conf
# rm /etc/init/tty6.conf
Usuarios
El comando su nos permitirá usar el intérprete de comandos de otro usuario sin salir
de nuestra sesión. Nos pedirá la contraseña de la cuenta de usuario a la que queremos
acceder.
El comando sudo nos permitirá ejecutar un comando como si fuéramos otro usuario.
Nos pedirá la contraseña de nuestro usuario.
La ventaja que tiene sudo sobre su, es que solo ejecuta un comando como
administrador, estando al instante siguiente de nuevo como usuario sin privilegios.
Pero este comando tiene a veces un «período de gracia», un pequeño tiempo en el que
no necesitará pedir la contraseña para ejecutar de nuevo un comando como el otro
usuario, pasado este tiempo volverá a requerir la contraseña. Es aconsejable desactivar
este «período de gracia» para evitar que si alguien se apodera de nuestra máquina
durante el tiempo que esté activado pueda ejecutar comandos de administrador.
Para limitar el uso de sudo hay que realizar los siguientes pasos:
1. Logarnos como root o utilizar el comando su.
2. Probar si el comando sudo está instalado mediante la orden sudo –V que comprueba
la versión. Si no nos muestra la versión del comando, tendremos que instalarlo.
3. Visualizar la lista los grupos que existen en el sistema:
# vi /etc/group
4. Todos los usuarios que vayan a usar el comando sudo tendrán que estar en el grupo
admin. Crear el grupo admin si no está creado:
# addgroup admin
5. Para mostrar los grupos a los que pertenece un usuario:
# groups <nombre_de_usuario>
6. Para añadir un usuario al grupo admin:
# usermod -a -G admin <nombre_de_usuario>
7. Se ha de modificar el fichero /etc/sudoers. Para modificarlo usaremos el comando:
# visudo
8. Añadiremos la línea:
%admin ALL=(ALL) ALL
9. Guardaremos los cambios.
Finalmente, es necesario que las cuentas del sistema estén bloqueadas y no se les
permita acceso a la Shell. Hay que tener en cuenta que no puede aplicarse al
usuario root. Esto evita la posibilidad de que un intruso pueda beneficiarse de una
de estas cuentas. Son usadas por el sistema para realizar ciertas tareas. Sigue los
siguientes pasos:
1. Obtener todos los usuarios del sistema. Para ello seleccionaremos los usuarios con
un UID inferior a 500. Para obtener todos los usuarios con sus nombres UID y
Shell correspondientes, ejecutar el siguiente comando:
# awk -F: '{print $1 ":" $3 ":" $7}' /etc/passwd
2. Seguidamente bloquear cada uno de los usuarios del sistema con la orden:
# usermod -L <usuario>
3. Deshabilitaremos la Shell de cada uno de los usuarios del sistema con la orden:
# usermod -s /usr/sbin/nologin <usuario>
Para restringir el acceso por red utilizaremos TCP Wrapper y un cortafuegos. Como
configurador del cortafuegos usaremos iptables, aunque hay herramientas más
amigables como Shorewall en Debian y UFW en Ubuntu.
TCP Wrapper
Por defecto TCP Wrapper admite toda conexión a los servicios. Para su configuración
específica podremos usar los ficheros /etc/hosts.allow, para permitir los servicios y
/etc/hosts.deny para denegar los servicios.
Si el comando anterior devuelve texto significará que el servicio habrá que configurarlo.
2. Si encontramos dos servicios “portmap” y “sshd” que queremos que sean privados
y encontramos otro, por ejemplo, “vsftpd” que sea público:
Por defecto, las conexiones realizadas a través de TCP Wrapper se registran en el fichero
/var/log/auth.log
Los cortafuegos pueden ser confundidos con los filtros de paquetes, ya que los dos
filtran paquetes, pero los cortafuegos son capaces de analizar los datos de los paquetes.
Un cortafuegos no sirve para nada si no está bien configurado. El administrador de
sistemas debe configurar unas reglas en el firewall para definir qué tráfico se debería
permitir y cuál se debería denegar en la red.
Existen dos tipos de cortafuegos: con estado y sin estado. La diferencia entre
ambos radica en que los cortafuegos sin estado solo pueden examinar un paquete cada
vez, sin tener en cuenta los demás, y un cortafuegos con estado analiza además el
contexto del paquete dentro del tráfico y en un determinado protocolo.
Netfilter (iptables)
El funcionamiento basado en las cadenas se mantiene, pero en iptables las cadenas son
parte de agrupaciones lógicas llamadas tablas, las cuales son de tres tipos: Filter, NAT
y mangle.
-s: IP de origen
-d: IP de destino
-i: interfaz de entrada
-o: interfaz de salida
-p tcp/udp/icmp: establecer el protocolo
-m state: estado del paquete
-m limit: límites en el número de paquetes
--sport: puerto de origen
--dport: puesto de destino
Con estas reglas básicas empezaremos a añadir reglas que necesitaremos para nuestros
permisos. Por ejemplo, podremos realizar las siguientes reglas:
Antes de la línea:
exit 0
Ejecutaremos la utilidad:
# sysv-rc-conf
En la imagen podemos ver varias columnas. Cada una de ellas es un run level. Los
servicios en Linux se ejecutan por run levels. Los run levels determinan cuando se
ejecutan los servicios. Van del 0 al 6 y la letra S. Los niveles 0, 6 y S están reservados
para el comienzo y finalización del sistema. El run level 1 se ejecuta en modo single-
user (modo recuperación). Los run level del 2 al 5 son para modo multi-user. Con
la utilidad sysv-rc-conf marcaremos con una X (usando la barra espaciadora) en qué
run levels queremos que funcione cada servicio.
Para cambiar el modo actual de ejecución, por ejemplo al run level 4, se usaría la
instrucción:
# telinit 4
Para obtener la lista de usuarios del sistema podrás usar el siguiente comando:
# cat /etc/passwd
En la anterior imagen se ve como línea a línea se describen los usuarios del sistema con
los diferentes UID o la carpeta HOME de cada uno de ellos. Debian define en su
documentación, los siguientes usuarios por defecto:
root: es el superusuario.
daemon: algunos demonios (procesos) sin privilegios, necesitan escribir en archivos
del disco utilizan este usuario. Demonios como portmap, atd, etc, usan este usuario.
Otros demonios que no necesitan acceso a archivos usan el usuario “nobody”,
“nogroup” o usan un usuario específico.
bin: este usuario se mantiene por razones históricas.
sys: al igual que el usuario bin.
sync: se usa con el comando sync.
games: muchos juegos usan este usuario para poder escribir su “high score”.
man: el programa “man” usa este usuario para que puedan escribir las páginas del
manual en el disco duro (/var/cache/man).
lp: usado por los demonios de las impresoras.
mail: los clientes de correo electrónico del sistema, usa el usuario y grupo mail para
escribir en /var/mail. Varios servicios de correo electrónico también usa este
usuario por otras razones.
news: varios servidores de noticias y otros programas asociados a estos, usan este
usuario y grupo.
uucp: este usuario y su grupo, son usados por el subsistema del protocolo UUCP.
Los usuarios en este grupo pueden utilizar el comando uucico.
proxy: los demonios proxy que no tienen un usuario dedicado usan este usuario. Los
proxies pdnsd y squid usan este usuario.
majordom: majordomo tiene este usuario por motivos históricos. No se instala en
sistemas nuevos.
postgres: postgresql usa este usuario y grupo. Los archivos en /var/lib/postgresql
pertenecen a este usuario.
www-data: algunos servidores web usan este usuario. Se usa al escribir en sus
ficheros log o cualquier información escrita en el disco duro. Hay que tener en
cuenta que el contenido web no debería pertenecer a este usuario o el servidor web
podría modificarlo.
backup: se puede asignar al encargado del backup del Sistema.
operator: históricamente es el usuario que puede conectarse remotamente sin
depender de NIS/NFS.
list: los archivos y datos de las listas de correo pertenecen a este usuario. Algunos
programas asociados también usan este usuario.
irc: usado por demonios IRC.
gnats: usado por el servicio de control de errores de GNU.
nobody (usuario), nogroup (grupo): demonios que no necesitan archivos usan este
usuario/grupo. Ningún archivo del sistema debería pertenecer a este usuario/grupo.
Por otro lado, hay que verificar y bloquear los accesos a la Shell a los usuarios cuya
clave estuviera vacía.
Es importante comprobar que no existen dos con un UID igual a 0 (cero). Para ello
ejecutar el siguiente comando:
# awk -F: '($3 == "0") {print}' /etc/passwd
También tendremos que tener en cuenta el crear un grupo único por cada usuario
nuevo que creemos. Por defecto, el comando “useradd” crea un grupo con el nombre
igual al usuario. Por esto, con el comando “useradd” nunca deberemos usar la opción
“-g” y usar el funcionamiento por defecto del comando.
Figura 16: Archivo /etc/fstab con la configuración de las particiones por defecto
En la primera línea de la anterior imagen, se puede ver que la partición raíz “/” tiene la
opción de montaje “errors=remount-ro”, que el CDROM tiene user y noauto y que
el resto de puntos de montaje tienen la opción “defaults”. Hay que tener en cuenta
que las líneas que empiezan por almohadilla (“#”) son líneas comentadas.
1. Asignar la opción “nodev” a las particiones distintas a la raíz del sistema “/”. De
esta manera evitamos que, pese a crearse nodos de dispositivos dentro de la
partición, no puedan tratarse como tales y montar otros dispositivos dentro de estos.
De esta manera no podremos crear y utilizar un punto de montaje dentro de /home.
2. Asignar la opción “nosuid” a las particiones distintas a la raíz del sistema “/”.
SUID (Set owner User ID up on execution) es un tipo especial de permiso de los
ejecutables que permite al usuario que lo ejecuta, ejecutarlo como su usuario
propietario (Suele ser muy peligroso). Las particiones con la opción “nosuid” no
podrán tener ficheros SUID y así evitamos que los posibles problemas de una
aplicación afecten al sistema.
3. Asignar las opciones “nodev”, “nosuid” y “noexec” a las particiones de medios
extraíbles como CDs. De esta manera evitamos cualquier ejecución desde medios
externos al sistema.
También se puede evitar el montaje de discos a través del USB al añadir al final del
fichero /etc/modprobe.d/blacklist.conf la siguiente línea:
blacklist usb-storage
2.8. Proxies
Los proxies son un punto de conexión entre un ordenador y un sitio remoto de Internet.
Ofrecen un filtro mediante el cual, permite conexiones externas a la red. Una VPN es
un tipo de proxy empresarial que cifra la conexión a la vez de que nos deja acceder a la
red interna de una empresa u organización.
Squid
Debido al gran crecimiento que ha tenido Internet en estos últimos años, se hace
necesario la replicación para transmitir páginas web de manera más rápida y
económica. Una solución a esto puede ser los servidores proxy basados en Squid, los
cuales son un intermediario entre el cliente e Internet. Los clientes mandan su petición
al servidor proxy y este tramita la petición a Internet o le responde con el objeto si se
encuentra almacenado en su memoria caché (debido a una petición similar anterior).
Squid es un tipo de Proxy Caché que puede terminar como servidor intermedio y como
caché del contenido web. Admite protocolos HTTP, HTTPS, FTP, WWCP, WAIS,
Gopher, etc.
Instalación de Squid
Para poder acceder a Internet, Squid puede denegar o permitir acceso basándose en
dirección IP y usuario que demanda el servicio. Controlar el acceso a Internet
viene muy bien por ejemplo, en la oficina de los centros de estudio.
Para probar un ejemplo de forma sencilla, vamos a utilizar el módulo NCSA, que utiliza
un archivo de texto simple creado con htpasswd.
3. Ajustamos los permisos para que solamente Squid tenga permisos de lectura y
escritura
# chmod 600 /etc/squid/usrpass
# chown proxy:proxy /etc/squid/surpass
Empezaremos a añadir usuarios. Hay que tener en cuenta que todos los usuarios
creados son independientes de los usuarios del sistema. Para añadir usuarios
usaremos htpasswd:
# htpasswd /etc/squid/usrpass valentin
Y añadiremos la línea:
acl password proxy_auth REQUIRED
Lo configurado hasta ahora, con la nueva línea, tendría un aspecto parecido a este:
# Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localnet dst 127.0.0.1/8 0.0.0.0/32
acl password proxy_auth REQUIRED
acl restric-exp-reg url_regex “/etc/squid/restric-exp-reg”
También podremos denegar acceso por dominio. Los pasos son parecidos a los de
la aplicación de restricciones por expresiones regulares:
Lo configurado hasta ahora, con la nueva línea, tendría un aspecto parecido a este:
#
# Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localnet dst 127.0.0.1/8 0.0.0.0/32
acl password proxy_auth REQUIRED
acl restric-exp-reg url_regex “/etc/squid/restric-exp-reg”
acl restric-dominios dstdomain “/etc/squid/restric-dominios”
Es posible que las restricciones de acceso anteriores no dejen acceso a páginas que
consideramos válidas. Por esto podremos elegir una serie de dominios permitidos.
Estos serían los pasos:
Lo configurado hasta ahora, con la nueva línea, tendría un aspecto parecido a este:
#
# Recommended minimum configuration:
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localnet dst 127.0.0.1/8 0.0.0.0/32
acl password proxy_auth REQUIRED
acl restric-exp-reg url_regex “/etc/squid/restric-exp-reg”
acl restric-dominios dstdomain “/etc/squid/restric-dominios”
acl permit-dominios dstdomain “/etc/squid/permit-dominios”
Seguiremos con el procedimiento de crear un fichero con los filtros, declararlo y usarlo
en el archivo de configuración de Squid /etc/squid/squid.conf. Estos serían los
pasos en detalle:
En el siguiente ejemplo, vamos a definir y aplicar una regla que da permiso a las
conexiones los lunes, martes, miércoles, jueves y viernes, desde las 8:30 a 19:30 en la red
local.
S - Domingo
M - Lunes
T - Martes
W - Miércoles
H - Jueves
F - Viernes
A – Sábado
08:30-19:30: horario desde las 08:30 hasta las 19:30
http_access, es un comando que ya hemos usado antes y que aplica la regla según sus
parámetros.
allow, cuyo posibles valores serían allow (permitir), deny (no permitir)
entre_semana, nombre declarado en el ejemplo anterior
localnet, ámbito de la red en el que se aplica. En este caso sería la red local.
Mediante las direcciones MAC se identifica de forma única una tarjeta o dispositivo
de red. Si bloqueamos o permitimos acceso a ciertas direcciones MAC estaremos
evitando que ciertos ordenadores puedan conectarse para realizar daños en la red.
Un ejemplo útil sería el empleado que ha sido despedido y deja un ordenador libre.
En los siguientes pasos vamos a configurar la restricción de acceso a la red usando las
direcciones MAC:
1. Conseguimos las direcciones MAC en nuestra red, de los ordenadores que queremos
aplicar la regla. En Windows se usa el comando ipconfig y en Linux se utiliza el
comando ifconfig, para ver la dirección MAC del equipo en el que nos encontramos.
2. Crearemos un archivo donde vayamos a poner las direcciones MAC a las que
aplicaremos la regla.
# nano /etc/squid/permit-mac-direcciones
Tendremos que editar su contenido con las direcciones MAC para las que queremos
aplicar la regla.
00:14:22:41:9C:8A
00:04:DC:84:18:AD
00:40:96:AA:2D:BB
00:30:BD:9D:CD:77
Otras configuraciones
http_port, que especifica el puerto por el que se comunica con el proxy, por
ejemplo:
http_port 1891 transparent
WPAD
3. Tendremos que tener abierto el puerto 80 TCP y el resto de los puertos que pudieran
estar involucrados.
iptables -A INPUT -s 192.168.1.2 -m state --state NEW \ -m tcp -p tcp -
-dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.1.2 -m state --state NEW \ -m tcp -p tcp -
-dport 3128 -j ACCEPT
9. Recargamos el servicio:
service apache2 reload
SARG
Con la herramienta SARG (Squid Analysis Report Generator) se permite ver con detalle
la actividad de todos los equipos y usuarios de una red local usando los informes de
las bitácoras (logs) de Squid.
De esta manera, decimos que el log que queremos acceder con la herramienta SARG
es /var/log/squid/access.log, que el directorio donde se generarán los informes
será /var/www/sarg (si no existe el directorio, habrá que crearlo), el formato de la
fecha (‘dd/mm/yy‘) que se usará y si sobrescribimos informes ya generados.
Existen dos tipos de sistemas de identificación de intrusos (IDS): los basados en host
(Host IDS) y los basados en red (NIDS).
Por otro lado, existe Snort que es una potente herramienta que sirve como sniffer de
paquetes, registrador de paquetes y NIDS personalizable con una librería de ataques
firmados y un motor de configuración para reglas de usuario.
Material complementario
Lecciones magistrales
Port Knocking
En esta lección magistral se tratará más a fondo un servicio que nos ayuda a
complementar la seguridad de nuestro Linux. Con Port Knocking se establecerá un
sistema previo de llamadas a puertos específicos si se quiere habilitar o ejecutar algo
en la máquina remota.
No dejes de leer…
Hackers en Linux
VV. AA. (2008). La Biblia de Administración de sistemas Linux. Madrid: Grupo Anaya.
Cortafuegos
Virtualización
Linux
A fondo
Accede al artículo a través del aula virtual o desde la siguiente dirección web:
http://www.debian.org/doc/manuals/securing-debian-howto/securing-debian-
howto.en.pdf
WDAP
Accede al artículo a través del aula virtual o desde la siguiente dirección web:
https://tools.ietf.org/id/draft-ietf-wrec-wpad-01.txt
SARG
Accede al artículo a través del aula virtual o desde la siguiente dirección web:
http://sarg.sourceforge.net/.
Webgrafía
Opensource
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://sourceforge.net/
GPL
Página web de GPL, donde podemos encontrar los términos y condiciones de GPL.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.gnu.org/copyleft/gpl.html
Kernel
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.kernel.org/
Ubuntu
Página web del sistema operativo Ubuntu, donde podemos descargar el sistema
operativo y documentación relacionada.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.ubuntu.com
Debian
Página web del sistema operativo Debian, donde podemos descargar el sistema operativo
y documentación relacionada.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.debian.org
Red Hat
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.redhat.com
OpenSuse
Página web del sistema operativo Suse, donde podemos descargar el sistema operativo y
documentación relacionada.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.opensuse.org/
Slackware
Página web del sistema operativo Slackware, donde podemos descargar el sistema
operativo y documentación relacionada.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.slackware.com
Spamassassin
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.spamassassin.org/
GNUPG
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.gnupg.org/
Chrootkit
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.chkrootkit.org/
Snort
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.snort.org
Squid
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.squid-cache.org
Iptables (Netfilter)
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.netfilter.org/
Bacula
Página web de Bacula, donde poder descargar la popular herramienta de backup, además
de documentación relacionada.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://blog.bacula.org/
Accede a la página web a través del aula virtual o desde la siguiente dirección:
https://access.redhat.com/documentation/en-
US/Red_Hat_Enterprise_Linux/7/html/Security_Guide/index.html
VirtualBox
Desde la página de VirtualBox se puede descargar esta aplicación de máquinas virtuales
gratuitas.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
https://www.virtualbox.org/
OpenLDAP
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.openldap.org/
Shorewall
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.shorewall.net
UFW
Al igual que Shorewall, UFW ofrece una configuración más intuitiva sobre iptables.
Accede a la página web a través del aula virtual o desde la siguiente dirección:
https://launchpad.net/ufw
Alcance libre
Accede a la página web a través del aula virtual o desde la siguiente dirección:
http://www.alcancelibre.org/
Actividades
Trabajo: Iptables
Descripción
¿Cómo creamos una cadena que defina nuestras reglas que se llame servidor?
¿Cómo hacemos para que todos los paquetes de entrada (INPUT) vayan hacia la
cadena servidor?
¿Cómo hacemos que se rechacen todos los paquetes icmp-host-unreachable?
¿Cómo mostramos las reglas que nuestro servidor tiene configurado?
¿Cómo borramos la regla que acabamos de añadir?
Antes rechazábamos los paquetes ¿Cómo hacemos ahora para que los descarte?
¿Qué diferencia existe a como lo teníamos antes?
¿Cómo podemos guardar las reglas?
Inserta encima de la última regla que acabamos de crear para que se registren en el
log (/var/log/messages).
¿Qué hacemos para que nuestra máquina si pueda conectarse a sí misma al puerto
25?
Queremos hacer una regla que nos permita la conexión al SSH. ¿Cómo lo hacemos?
¿Queremos que el ping funcione desde cualquier máquina de la red?
¿Cómo comprobamos que funciona guardamos la configuración?
¿Queremos hacer lo mismo pero para el servicio de Samba?
¿Queremos que los usuarios puedan conectarse a nuestra web?
¿Queremos hacer que todo el tráfico que llegue al puerto 80 se redirija al puerto
8080?
¿Cómo hacemos para que todas las conexiones desde nuestro ordenador al puerto 80
sean rechazadas?
Nos hemos confundido y solo queremos que los paquetes sean rechazados si van a
cualquier máquina que no sea de la red. Corrígelo.
Ahora queremos rechazar aquellas IPs que no pertenezca a la red local. ¿Qué sentencia
debes ejecutar de Iptables?
TEMA 2 – Actividades 67
Seguridad en Sistemas Operativos Propietarios
Trabajo: Squid
Descripción
Queremos montar un servidor proxy para evitar que naveguen por sus correos personales
de gmail.com, hotmail.com, yahoo.com. Que prohíba cualquier página que contenga las
palabras: «Sexo», «pornografía» y «desnudos». Además queremos que no puedan
conectarse de 8 a 10 de la mañana, que cuando mayor rendimiento y exigencia se les pide
en la empresa. Queremos que se guarde los logs en un fichero que se llame mensajes.log.
TEMA 2 – Actividades 68
Seguridad en Sistemas Operativos Propietarios
Test
TEMA 2 – Test 69
Seguridad en Sistemas Operativos Propietarios
TEMA 2 – Test 70
Seguridad en Sistemas Operativos Propietarios
TEMA 2 – Test 71