Sincronizando carpetas y copiando archivos con rsync

Hasta la aparición de robocopy la herramienta rsync fue una de las más envidiadas por los administradores de sistemas Windows cada vez que se comparaban con Linux. La principal función de rsync es copiar archivos entre dos ubicaciones, y puede ser tanto entre dos ubicaciones locales como entre una local y una remota (o viceversa). Dos de los puntos fuertes de rsync es que nos permite utilizar SSH para las conexiones remotas, reforzando así la seguridad,y está pensado para ahorrar ancho de banda y tiempo cuando se realicen actualizaciones dedicándose simplemente a copiar los datos que han cambiado.

Para una operación de copia entre dos carpetas locales la sintaxis sería:

#usaremos los parámetros:
#r para que haga copia recursiva
#t para que guarde la fecha
#v para que muestre el progreso
rsync -rtv carpeta_origen/ carpeta_destino/

Ojo con la barra del final, que para rsync carpeta_destino y carpeta_destino/ no son lo mismo. Por ejemplo

rsync -rtv carpeta_origen/ carpeta_destino/
#esta copiará tal cual los contenidos de origen en destino
rsync -rtv carpeta_origen carpeta_destino/
#esta creará una carpeta nueva, llamada carpeta_origen,
#dentro de la carpeta_destino.

Como ya comentaba arriba, podemos hacer que rsync sólo copie los archivos que han sido modificados, con la idea de ganar tiempo (y no consumir ancho de banda en caso de copia remota). Tenemos dos formas de hacerlo:

#comparando fechas de edición
#añadimos el parámetro u
rsync -rtvu carpeta_origen/ carpeta_destino/

#haciendo un checksum de ambos archivos
#para ver si son distintos
#en eso caso quitamos t y añadimos c
rsync -rvuc carpeta_origen/ carpeta_destino/

Esto está bien pero ¿qué pasa si hemos quitado archivos en un lado y queremos que se quiten en el otro? ¿si queremos sincronización total? Pues tenemos el parámetro –delete, con varias variantes:

#Borrando antes de copiar los archivos
rsync -rtvu --delete-before carpeta_origen/ carpeta_destino/

#Borrando después de copiar los archivos
rsync -rtvu --delete-after carpeta_origen/ carpeta_destino/

#Borrando durante la copia
rsync -rtvu --delete-during carpeta_origen/ carpeta_destino/

#Encuentra durante la copia los archivos faltantes,
#pero los borra al terminar
rsync -rtvu --delete-delay carpeta_origen/ carpeta_destino/

Según el tipo de copia que se este haciendo y las necesidades del momento puede ser más interesante usar una u otra.

Existen más parámetros que pasar. Por ejemplo –exclude nos permite definir un patrón de exclusión para la copia, o –exclude-from, que nos permite hacerlo pero cargando los datos desde un archivo. Con –max-size se excluyen todos los archivos que superen un tamaño, y con –min-size todos los que no alcancen uno concreto. El parámetro -z nos permite definir que los archivos sean comprimidos antes de su envío, dependiendo de la red y la potencia de los equipos puede ser recomendable o no. Es interesante también el parámetro -a, que copia toda la información de los archivos: enlaces simbólicos, propietarios, grupos, permisos…

Hasta aquí hemos hablado de las posibilidades de rsync en copias locales. Pero ¿cómo conectamos con un equipo remoto? La sintaxis sería rsync -parámetros carpeta_origen/ usuario@dominio:/ruta/destino/

#pc local a remoto
rsync -rcvu /tmp/ admin@tlm.usc.es:/home/Departamentos/

#pc remoto a local
rsync -rcvu admin@tlm.usc.es:/home/Departamentos/ /home/donnierock/

Si sois de esos más vagos que el peluquero de Billy Corgan tenéis la opción de instalar grsync para poder disponer de un entorno gráfico desde el que trabajar.

grsync

Si tenéis interés puede que hable más sobre rsync y también comente algo de robocopy.

Cifrar una memoria USB en Ubuntu

Tras una serie de artículos dedicados a otros temas volvemos con algunas de mis cuestiones favoritas: software libre, cifrado/encriptación y seguridad informática. Aunque algunos gobiernos nos quieran hacer creer que esto es sólo para quien tiene algo que ocultar, la privacidad es un derecho y el cifrado una herramienta necesaria para ello. ¿A alguien le parecería lógico pedir una ley  nos obligara a vivir en casas de paredes transparentes? ¿que quitáramos las persianas de nuestras ventanas y las cerraduras de nuestras puertas por si ocultamos algo tras ellas? El cifrado es la pared de tus datos, es la persiana, es la puerta.

En mis tiempos de subsistencia freelance llevaba muchas veces el proyecto de un cliente en un pendrive. ¿Qué pasaría si lo pierdo? La propia Ley Orgánica de Protección de Datos nos solicita almacenar la información sensible de una persona de forma segura. Si la tengo que llevar en una unidad extraíble entonces esta necesariamente debe estar cifrada.

Lo primero para nuestro caso es instalar el paquete cryptsetup si todavía no lo tenemos disponible en nuestra distro:

sudo apt-get install cryptsetup

Una vez instalado, y con el pendrive conectado al equipo, abrimos el administrador de discos de Ubuntu.

Administrador de discos de Ubuntu

Bajo la tabla de particiones del dispositivo verás un botón cuadrado parecido a un botón de stop (en la captura que he puesto a continuación es un botón de play porque ya lo había pulsado) que nos dará la opción de desmontar el volumen.

Particionando unidad usb

Una vez desmontado el volumen pulsas el botón con dos engranajes que está a la derecha del de desmontar y eliges la opción de Formatear. En el menú desplegable de la ventana flotante que se abrirá eliges Cifrado, compatible con sistemas Linux (LUKS + Ext4) en el menú desplegable con todos los formatos. Como puedes observar este método nos permite cifrar una partición, de forma que si no quieres no tienes por qué cifrar todo el pen, puedes hacerlo sobre una parte y dejar otra con menos seguridad para llevar algo intrascendente y tener un acceso más rápido. Seguidamente añades un nombre para el volumen que vas a formatear y una contraseña.

Finalizando el formateo de unidad cifrada

Si en el futuro quieres deshacerte de la partición formateada tendrás que volver a formatear el dispositivo, pero en cambio si quieres cambiar la contraseña el administrador de discos te dará esa opción.

Cuando insertes un volumen así cifrado en un equipo con Ubuntu te dará varias opciones: pedir siempre la contraseña, recordarla mientras dure la sesión o recordarla siempre. Esta última puede ser muy cómoda, pero piensa que en según qué casos puede que no te interese que los datos estén accesibles siempre que el pen se conecte a ese equipo.

Código PHP para comprobar si un servidor está funcionando o caído.

Estaba los día pasados liado con un desarrollo en PHP para uso interno en la oficina que requería que, en un punto dado, el código recogiera qué servidores de los clientes están activos y cuales no.

Tras sucesivas búsquedas y documentación llegué a dos soluciones. Esta primera lo que haría sería mostrarnos si en una máquina está funcionando el servidor web:

/*La función recibe la ip
o la url del servidor*/
function testServidorWeb($servidor) {
    $a = @get_headers($servidor);
    
    if (is_array($a)) {
        return true;
    } else {
        return false;
    }
}

En este primer ejemplo creamos una función que recibe o la ip externa o la url del servidor que queremos comprobar que tiene su servidor web funcional. Dicha función hará una petición HTTP al servidor y recogerá las cabeceras de la respuesta con get_headers. En caso de que haya recibido la respuesta la función devuelve true, y si no ha habido respuesta alguna entonces devuelve false.

En el segundo ejemplo tenemos una función que comprueba si se recibe respuesta desde un puerto concreto. Así podemos comprobar varios servicios como el servidor web, el servidor ftp, la conexión por telnet…

function checkPuerto($dominio,$puerto){
    $starttime = microtime(true);
    $file      = @fsockopen ($dominio, $puerto, $errno, $errstr, 10);
    $stoptime  = microtime(true);
    $status    = 0;
 
    if (!$file){    
        $status = -1;  // Sitio caído
    } else {
        fclose($file);
        $status = ($stoptime - $starttime) * 1000;
        $status = floor($status);
    }
    
    if ($status <> -1) {
        return true;
    } else {
        return false;
    }
    
}

En este caso le enviamos a la función el dominio del servidor a probar y el puerto que queremos chequear, sirviéndonos de la función fsockopen de PHP. Ojo si queréis comprobar los sockets UDP, que podéis recibir un falso positivo debido a que UDP es un protoclo «sin conexión» (en el enlace a fsockopen ya hay un aviso donde lo explican).

FTP en línea de comandos

El otro día me encontraba instalando un servidor con varias instancias virtualizadas de Windows 2k12, que por cuestiones de rendimiento iban sin entorno gráfico (el llamado modo Server Core). Necesitaba descargar una serie de archivos desde un servidor FTP, así que tuve que recurrir a la línea de comandos… y eso me recordó que nunca habíamos tocado aquí el tema.

Para conectar el ftp basta con teclear en la consola ftp seguido de la dirección del servidor al que nos queremos conectar. Por ejemplo:

ftp servidordeprueba.com

Tras eso nos debería pedir usuario y contraseña (o no, eso depende de la configuración del servidor, pero lo normal es que sí). Una vez conectados disponemos de los siguientes comandos para trabajar:

  • ls o dir: Dependiendo de si estamos en un entorno Unix o Windows. Nos listará los archivos existentes en el directorio.
  • cd: Tanto en Unix como en Windows es el comando que se utiliza para navegar entre carpetas.
  • pwd: Si de tanto usar el cd te pierdes y nor recuerdas en qué directorio estás, este comando te lo dirá.
  • status: Nos informa del estado de nuestra conexión con el servidor.
  • open: Si se cierra tu conexión ftp, si quieres cambiar de servidor o si al ejecutar el comando ftp no has puesto a qué servidor te conectas, este comando va seguido de la dirección del servidor con el que queremos conectar.
  • binary: Aplicando este comando definimos que los datos que se descargarán vendrán serán un archivo binario (ejecutables, imágenes, vídeos, audio). Hay otro modo, del que hablaremos a continuación, para archivos de texto. No es recomendable descargar archivos binarios en modo texto, ya que probablemente se corrompan.
  • ascii: Al igual que binary define el tipo de archivo que descargaremos. Se recomienda para archivos txt,htm, html, css,asp, vbs, js, xml, php… en fin, todo lo que sea texto plano.
  • get: Es el comando utilizado para descargar desde el servidor. La sintaxis es get nombreDeArchivo rutaDondeLoGuardaremos. Si no ponemos ruta de destino lo descargará en el directorio en el que estamos. Existe la variable mget que nos permite descargar múltiples archivos, o reget para reiniciar una descarga cortada.
  • put: Lo contrario que el anterior, la sintaxis es similar, pero en este caso en lugar de descargar desde el servidor subimos archivos al mismo.
  • rename: Nos permite renombrar un fichero del servidor.
  • delete: El nombre es bastante intuitivo, ya que sirve para borrar ficheros del servidor. No funciona con carpetas. Mucho cuidado al usarlo, no vaya a ser que borres lo que no debieras.
  • mdelete: Como delete, pero con la diferencia es que borra varios archivos en lugar de uno. Basta con ponerlos todos, separados por espacios.
  • rm: Si lo que quieres es borrar una carpeta, este es tu comando. Sólo funciona con carpetas vacías, así que tendrás que borrar antes los ficheros que contiene.
  • chmod:Un viejo conocido para los usuarios de UNIX. El comando chmod nos permite modificar los permisos de lectura y escritura de un archivo o carpeta.
  • Finalmente bye y quit nos permiten salir del ftp para volver a la consola de comandos.

Y en caso de usar un sistema linux el comando ! nos permitirá ejecutar comandos en nuestra shell sin salir del ftp. Basta con usar ! seguido de un comando.

Existen más comandos y opciones, pero estos son los más usados y básicos. Puedes ver información sobre el resto usando el comando HELP

Instalando Guest Additions de VirtualBox en Lubuntu 15.10

Primer contacto con una versión 15.10 de Ubuntu: esta mañana he tenido que montar una máquina vitual en el curro para un experimento. Por temas de ligereza ha sido un Lubuntu, la versión con el ligero escritorio LXDE, concretamente la vesión de 32 bits.

Vamos a meternos en harina (en el tema de las guest additions, no era un chiste sobre Albert Rivera) ¿Cómo instalo la Guest Additions?

  • Abrimos un terminal y ejecutamos sudo apt-get install virtualbox-guest-additions-iso
  • Le llevará un ratillo (al menos a mi me lo llevó). Al acabar vamos al menú desplegable de la esquina inferior izquierda, seleccionamos Preferencias y desde allí escogemos Software y Actualizaciones. Os dejo esta imagen ilustrativa:
    Lubuntu software actualizacións
  • Ahora nos queda desmarcar las opciones de usar los controladores de Virtual Box en lugar de los de serie del sistema operativo, tal que así: Software y Actualizaciones

Y tras un reinicio la cosa debería ir ya como la seda.

Incluir java en el PATH de Windows

Aunque no siempre es necesario, a veces nos tocará modificar la variable PATH de Windows y añadir la ubicación de Java para utilizar algún software concreto.

Todavía no he tenido que hacerlo en Windows 10, pero os comento cómo va la coas en Windows 8 y Windows 7. Voy a omitir XP porque al estar descontinuado no es cosa de darle soporte (de hecho la propia Oracle no asegura el funcionamiento de las últimas versiones de Java, aunque con el SP3 funciona de momento).

Vamos con las instrucciones para Windows 7:

  1. Abrimos el menú de inicio y hacemos click derecho sobre Equipo y, en el menú contextual seleccionamos Propiedades del Sistema.
  2. Hacemos click en Configuración avanzada del sistema -> Opciones avanzadas.
  3. Hacemos click en Variables de entorno, allí en Variables del sistema, buscamos PATH y hacemos click en él.
  4. En la ventana Editar, modificamos PATH agregando la ubicación de java en nuestro equipo al valor de PATH.

Y ahora las instrucciones para Windows 8:

  1. Hacemos click en Búsqueda y buscamos Panel de control
  2. Ahí hacemos click en Panel de control -> Sistema -> Opciones avanzadas
  3. Ahí vamos a Variables de entorno, y ahí en Variables del sistema, buscamos PATH y hacemos click en él.
  4. En la ventana Editar, modificamos PATH agregando la ubicación de java en nuestro equipo al valor de PATH.

En cuanto lo tenga que hacer en Windows 10 os lo agrego por aquí.

Ultimate Boot CD Live: Creando un usb arrancable y activar la persistencia.

Hoy descubría la existencia de un interesante proyecto ¿Recordais Ultimate Boot Cd? Se trata de un disco de arranque con utilidades muy tipo Hirens Boot Cd. La cuestión es que han sacado una versión de Ultimate Boot CD basado en un LiveCD de Debian, para poder usar las aplicaciones desde entorno gráfico: Ultimate Boot CD Live. Incluye una colección de freeware, shareware y software libre para poder realizar tareas de reparación y recuperación del sistema que puedes ver listas en la página del proyecto.

El proyecto está guay, pero siendo prácticos a día de hoy muchos equipos, sobre todo portátiles, no tienen cd (mismo el caso del equipo desde el que estoy escribiendo) ¿cómo creamos un cd arrancable con Ultimate Boot CD Live? Pues sin mucha dificultad porque,a fin de cuentas, se trata de una distribución Live de Linux como otra cualquiera. En caso de que seais usuarios de Windows os tocará recurrir a opciones como Universal USB Installer o LinuxLive USB Creator. En caso de estar usando Linux, yo suelo ser partidario de Unetbootin. En todo caso los tres son bastante intuitivos, basta con descargar la ISO desde el enlace al proyecto y seleccionarla luego desde el programa que useis para crear el USB. Con LinuxLive USB Creator ya explicamos aquí en su día cómo hacerlo, y con el resto lo podéis encontrar con una simple búsqueda.

Captura de Pantalla de UBCDLive

Ahora vamos con la parte de la persistencia. En caso de que querais guardar cambios en el USB existe una forma de conseguir un giga de espacio para persistencia. Con el cd una vez creado tenéis que buscar el archivo persistence.bz2 y descomprimirlo, de forma que obtendréis un archivo llamado persistence de un giga de tamaño que es en el que se almacenarán los cambios. Además os tocará modificar el archivo isolinux/live.cfg y añadir toram persistence a los parámetros de arranque tal que así:

label live-486
   menu label ^Live (486)
   menu default
   linux /live/vmlinuz
   initrd /live/initrd.img
   append boot=live config username=root vga=normal toram persistence

label live-486-failsafe
   menu label ^Live (486 failsafe)
   linux /live/vmlinuz
   initrd /live/initrd.img
   append boot=live config username=root memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=normal toram persistence

Y con esto ya estaría la opción habilitada, y vuestro pendrive listo para ayudaros a rescatar el sistema.

Configurando un sistema Debian para que monte en el inicio las carpetas compartidas NFS

Recordarás que hace un par de días hablamos sobre cómo configurar y montar una carpeta en red usando NFS en un sistema Debian. Ese artículo nos servirá de ejemplo para el presente ¿cómo hacemos que los clientes monten la carpeta desde el inicio?.

Vamos con un resumen rápido del artículo anterior (por si estás vago para leerlo): la ip del servidor es 192.168.1.2, la carpeta se llama /compartida y el punto de montaje es /mnt/nfs/compartida.

Bueno, basándonos en nuestro conocimiento de Linux sabemos que los discos y particiones montados en el arranque se configuran en el archivo /etc/fstab (abreviatura de File Systems Table) así que lo abrimos con un editor de texto (nano, gedit, vi, emacs… el que más o guste) y añadimos una nueva línea para montar. Cada una de estas líneas se compone de la siguiente forma:

  1. Primero la dirección de la unidad compartida, en este caso 192.168.1.2:/compartida
  2. Después va el punto de montaje, para el ejemplo /mnt/nfs/compartida
  3. El sistema de archivos, que en este caso es nfs.
  4. Las opciones son varias, y las puedes ver en la página oficial de Ubuntu. Para el ejemplo serán auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1200.
  5. La frecuencia con la que se usará dump para respaldar el sistema de archivos. Si se pone a 0 no se hará copia (más velocidad, menos seguridad).
  6. La frecuencia con la que fsck revisará el volumen en busca de errores. Si se deja a 0 no lo hará (más velocidad, menos seguridad)

Así que al final la línea que meteríamos, siguiendo el ejemplo del artículo anterior, sería tal cual esta:

192.168.1.2:/compartida /mnt/nfs/compartida nfs auto,noatime,nolock,bg,nfsvers=3,intr,tcp,actimeo=1200 0 0

Una vez guardados los cambios bastará reiniciar para comprobar que han surtido efecto

Carpetas compartidas en red en Ubuntu: Instalando y configurando una con NFS

Vamos a ver cómo compartir una carpeta utilizando una distribución de linux de la familia Debian (Ubuntu, Debian, Linux Mint). Y vamos a ver cómo hacerla mediante línea de comandos para que sea universal para todas las distribuciones (en las distros «no Debian» no cambiaría mucho la cosa, exceptuando la parte de instalar los paquetes el resto iría más o menos igual, creo)

El primer paso es instalar los paquetes nfs-kernel-server,nfs-common y rpcbind en el equipo que servirá la carpeta. Para ello usamos el siguiente comando:

sudo apt-get install nfs-kernel-server nfs-common rpcbind

Tras esto reiniciamos el equipo.En los equipos clientes, que se van a conectar con la carpeta, tenemos que instalar sólo los dos últimos paquetes, no es necesario el del servidor:

sudo apt-get install nfs-common rpcbind

Lo siguiente es crear la carpeta a compartir, en este caso se llamará compartida, y configurar los permisos para no tener problemas al acceder a ella. En este caso daremos a los usuarios permisos totales sobre la carpeta y no habrá grupo propietario, para que puedan hacer lo que les plazca.

sudo mkdir /compartida
sudo chown nobody:nogroup /compartida
sudo chmod -R 777 /compartida

Ahora tenemos que decirle al sistema qué carpetas vamos a compartir editando el archivo /etc/exports. La sintaxis es rutaCarpeta cliente_A(opciones) cliente_B(opciones). Tenemos múltiples opciones a la hora de definir a los clientes: una dirección ip o un rango de ellas, el nombre DNS del equipo o caracteres comodín (para dar acceso a cualquier equipo basta poner el comodín *).

En cuanto a las opciones son las siguientes:

  • ro(read-only): La carpeta compartida será de sólo lectura. Si no se define, es la opción por defecto.
  • rw (read-write): El usuario tiene permisos para escribir en la carpeta y hacer cambios en ella.
  • wdelay: El servidor NFS no escribe en el disco si espera otra solicitud inminentemente. Esto reduce los accesos a disco mejorando el rendimiento. Sólo funciona cuando usamos la opción sync.
  • no_wdelay: Desactiva wdelay.
  • sync: No permite responder peticiones antes de escribir los cambios pendientes. Se trata de la opción predeterminada.
  • async: Deshabilita sync. Esto mejora el rendimiento pero provoca que exista el riesgo de corrupción en los archivos si se produjese un corte de luz o una caída de la red.
  • subtree_check: Si el directorio compartido es un subdirectorio de un sistema de archivos mayor NFS comprobará los directorios por encima de éste, verificando sus permisos. Se trata de la opción predeterminada.
  • no_subtree_check: Deshabilita la característica anterior. Así se consigue agilizar el envío de la lista de archivos, pero reduciendo la seguridad del sistema.
  • root_squash: Evita que los usuarios con privilegios mantengan los permisos administrativos sobre la carpeta compartida, cuando se conectan remotamente.Es la opción activada por defecto
  • no_root_squash: Deshabilita root_squash.

Así que en nuestro archivo /etc/exports toca añadir la siguiente línea, con la que daremos permisos de lectura/escritura, activaremos la opción de sync y la de no comprobar todo el árbol superior a todos los clientes que se conecten:

#recordamos: primero la ruta
#después el cliente, en este caso * para todos
#y finalmente las opciones
/compartida *(rw,sync,no_subtree_check)

Y tras eso, toca reiniciar el servidor nfs:

sudo /etc/init.d/nfs-kernel-server restart

Lo siguiente será crear un punto de montaje para la carpeta compartida en los equipos cliente (vamos a suponer que la IP del servidor es 192.168.1.2):

sudo mkdir -p /mnt/nfs/compartida
#aunque ya dimos permisos a la carpeta
#también se los damos al punto
#de montaje
sudo chmod -R 777 /mnt/nfs
#y montamos la carpeta
sudo mount 192.168.1.2:/compartida /mnt/nfs/compartida

Y tras esto ya deberías poder crear y leer archivos en la carpeta compartida desde los clientes conectados en la red. Más adelante veremos algunas cosas sobre carpetas compartidas.

Reglas de grupo para proteger un servidor Windows del troyano Cryptolocker

Estos días la enésima mutación de Cryptolocker está generando problemas a muchos usuarios y administradores. Como siempre el tener una buena política de copias de seguridad, el sistema actualizado, una política de contraseñas fuerte y un control adecuado sobre los permisos de los usuarios serán los cimientos de nuestra defensa. En caso de sufrir un ataque que este afecte al menor número de archivos posible y que estos sean recuperables. Pero al final la desinfección y recuperación de datos lleva un rato de trabajo ¿hay una manera de protegerse? Bueno, con algunas versiones de Cryptolocker, no con todas, es posible evitar su impacto generando una regla de grupo que no permita ejecutar archivos desde las ubicaciones en las que este habitualmente se aloja.

En la configuración de seguridad local te vas crear una nueva Directiva de restricción de Software. Alguno pensará en que se podría hacer con una directiva basada en el hash del virus pero hay dos problemas: a) Que para eso tendríamos que tener el exe del virus (aunque esto es conseguible) b)Que nos lo solucionaría para esta versión de Cryptolocker, pero la próxima mutación con algún cambio en el código ya tendría un hash distinto. ¿Cual es la idea? Pues crear una directiva basada en el bloqueo de rutas, que funciona contra varias versiones del virus.

Como ya decíamos, el primer paso es crear una nueva directiva de bloqueo de software:

directiva de bloqueo de software

Una vez creada la directiva la cosa es ir creando una serie de Reglas de Nueva Ruta para cada una de estas excepciones, marcándolas como No Permitidas (Disallowed si tienes el servidor en inglés):

%AppData%\
%AppData%\*\
%localappdata%\
%localappdata%\*\
%localappdata%\Microsoft\Windows\Temporary Internet Files\
%localappdata%\Microsoft\Windows\Temporary Internet Files\Content.Outlook\
%localappdata%\Microsoft\Windows\Temporary Internet Files\Content.Outlook\*\
%localappdata%\Microsoft\Windows\Temporary Internet Files\Content.Outlook\*\*\
%Temp%\
%Temp%\$*\
%Temp%\*.zip\
%userprofile%\
%AppData%\*.scr
%AppData%\*\*.scr
%UserProfile%\Local Settings\Temp\rar*\*.scr
%UserProfile%\Local Settings\Temp\7z*\*.scr
%UserProfile%\Local Settings\Temp\wz*\*.scr
%UserProfile%\Local Settings\Temp\*.zip\*.scr
%UserProfile%\Local Settings\Temp\*.cab\*.scr
%UserProfile%\Local Settings\Temp\*.scr
%UserProfile%\Local Settings\Temp\*\*.scr

Es posible que estas reglas bloqueen algún software que quieras utilizar, en ese caso puedes crear excepciones para esas aplicaciones creando un nueva regla y dándole un perfil con más permisos. Esto no garantiza protección total, ya que desde hace un par de años cada X meses aparece una nueva variante del malware más puñetera que la anterior, pero al menos sí te ayudará a minimizar el efecto de algunas de las versiones hasta ahora conocidas.