Crear reportes rápidos con Crystal Reports en Visual Studio Net


Un recordatorio para algo de uso frecuente: Como crear reportes enlazados rapidamente a través de un xml que contenga la estructura de los campos a imprimir.

Asumo que tenemos cargado un dataset ds con una tabla llamada Table1 con los datos que queremos imprimir.

Por otro lado, lo que debemos hacer es crear un formulario (llamarlo por ejemplo FrmReportes) y colocarle un control CrystalReportViewer. A este control le ponemos como nombre CrvReportes.

En dicho formulario creamos una sobrecarga sobre el constructor para pasarle el reporte como parámetro:

public FrmReportes(CrystalDecisions.CrystalReports.Engine.ReportDocument Reporte)
  {
     InitializeComponent();
     this.CrvReportes.ReportSource = Reporte;
     this.CrvReportes.Show();
     this.ShowDialog();
  }

Ahora bien, para generar el reporte, debemos primero generar el xml con la estructura de los campos a imprimir:

 DataSet ds = new DataSet();
 ds.Tables.Add (controlador.GetAllDt()); //ejemplo de carga del dataset
 ds.WriteXml(@"c:temprepo.xml", ,XmlWriteMode.WriteSchema);  //el path debe tener permisos de scritura

Una vez generado el xml y almacenado en algún lugar del disco con permisos de escritura, vamos en el menú de Visual Studio a Project –> Add Component (Proyecto –> Añadir Componente) y agregamos el componente Crystal Report colocandole como nombre, por ejemplo RptReporte.rpt

Seleccionamos tipo de reporte “Reporte en Blanco” y luego, en el menú del explorador de campos, buscaremos la opción Crear nueva conexión –> Archivos de Base de Datos y nos permitirá seleccionar el archivo repo.xml creado anteriormente.

De esta manera podremos seleccionar de Table1 los campos de nuestro dataset a agregar al reporte.

Solo nos queda pendiente llamar al formulario contenedor del reporte pasandole como parametro el reporte:

CrystalDecisions.CrystalReports.Engine.ReportDocument mirepo;
mirepo = new RptReporte();
//asignamos el dataset para que actualice los datos:
mirepo.Database.Tables["Table1"].SetDataSource(ds);
//llamamos al contenedor
FrmReportes FrmRepor = new FrmReportes(mirepo);

Ojo: Es importante definir la estructura de página del reporte para impresoras genericas, a fin de que no genere problemas al imprimir en distintos modelos de impresora.
Esto lo hacemos haciendo click derecho sobre una sección o sobre el fondo del reporte –> Design –> Printer Setup –> Tildamos “No Printer”.
Allí mismo podemos predeterminar si la página va apaisada o no.

Protegiendo nuestro servidor con fail2ban


fail2ban es una herramienta que nos da una buena mano al momento de proteger nuestros servidores. Trabaja baneando las ips de los atacantes por un determinado periodo de tiempo.

Por ejemplo, supongamos que tenemos un ataque por fuerza bruta a nuestro servicio ssh, esta herramienta, agrega una regla a nuestro firewall iptables, denegando la ip del atacante, en el puerto 22, por un periodo de tiempo configurable.

Instalación:

Necesitaremos tener los repositorios epel en nuestro CentOS / RHEL para poder instalarlo con yum. A partir de ahí es coser y cantar…

# yum install gamin fail2ban

Configuración:

En el /etc/fail2ban, tenemos:

fail2ban.conf: Este es el archivo de configuración general y podemos dejarlo con los valores por defecto.

jail.conf: Este archivo es el que debemos modificar de acuerdo a los servicios que queremos monitorear, o inclusive configurar nuevos servicios. Cada servicio definido entre [ ] tiene una linea filter que indica que cadenas (definidas en el directorio filter.d) buscar en los archivos de log para detectar la intrusión.

Dejo un ejemplo de archivos de configuración para detectar ataques por ssh, http y vpopmail y vsftpd:

jail.conf:

# Fail2Ban configuration file
#
# Author: Cyril Jaquier
#
# $Revision: 747 $
#

# The DEFAULT allows a global definition of the options. They can be override
# in each jail afterwards.

[DEFAULT]

# "ignoreip" can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
# ban a host which matches an address in this list. Several addresses can be
# defined using space separator.
ignoreip = 127.0.0.1

# "bantime" is the number of seconds that a host is banned.
bantime  = 600

# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime  = 600

# "maxretry" is the number of failures before a host get banned.
maxretry = 5 

# "backend" specifies the backend used to get files modification. Available
# options are "gamin", "polling" and "auto". This option can be overridden in
# each jail too (use "gamin" for a jail and "polling" for another).
#
# gamin:   requires Gamin (a file alteration monitor) to be installed. If Gamin
#          is not installed, Fail2ban will use polling.
# polling: uses a polling algorithm which does not require external libraries.
# auto:    will choose Gamin if available and polling otherwise.
backend = gamin

# This jail corresponds to the standard configuration in Fail2ban 0.6.
# The mail-whois action send a notification e-mail with a whois request
# in the body.

[ssh-iptables]

enabled  = true
filter   = sshd
action   = iptables[name=SSH, port=ssh, protocol=tcp]
           sendmail-whois[name=SSH, dest=fail2ban@hvivani.com.ar]
logpath  = /var/log/secure
maxretry = 5

# This jail demonstrates the use of wildcards in "logpath".
# Moreover, it is possible to give other files on a new line.

[apache-tcpwrapper]

enabled  = true
filter	 = apache-nohome
action   = hostsdeny
           sendmail-whois[name=APACHE, dest=fail2ban@hvivani.com.ar]
logpath  = /var/log/httpd*/*error.log
#           /home/www/myhomepage/error.log
maxretry = 3

# Same as above but with banning the IP address.

[vsftpd-iptables]

enabled  = true
filter   = vsftpd
action   = iptables[name=VSFTPD, port=ftp, protocol=tcp]
           sendmail-whois[name=VSFTPD, dest=fail2ban@hvivani.com.ar]
logpath  = /var/log/secure
maxretry = 3
bantime = 1800

[vpopmail]
enabled = true
port    = pop3
filter  = vpopmail
action   = iptables[name=VPOPMAIL, port=pop3, protocol=tcp]
           sendmail-whois[name=VPOPMAIL, dest=fail2ban@hvivani.com.ar]
logpath = /var/log/maillog
maxretry = 3
bantime = 1800

Para el vpopmail, vamos a tener que crear un vpopmail.conf en el ./filter.d porque no viene por default. El mio es asi:

# Fail2Ban configuration file for vpopmail
#
# Author: Lawrence Sheed
#
# $Revision: 1.0 $
#

[Definition]

# Option: failregex
# Notes.: regex to match the password failures messages in the logfile.
# Values: TEXT
#
failregex = vchkpw-pop3: vpopmail user not found .*@:<HOST>$

# Option:  ignoreregex
# Notes.:  regex to ignore. If this regex matches, the line is ignored.
# Values:  TEXT
#
ignoreregex =

 

Instalando Repositorios EPEL en CentOS / RHEL


Simplemente un apunte, dado que hay varios links desactualizados en la web.

Para CentOS 5.5 de 32 bits:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm

Para CentOS 5.5 de 64 bits:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

Para CentOS 6 de 64 bits:

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm

 

# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpmInstall EPEL Repository On 64-bit CentOS Linux 5.5:
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

Uso de disco de usuarios por consola


Este es un simple script para obtener el uso de disco de los usuarios de nuestro servidor linux. Se basa en la utilización del comando du. Puede ser muy util cuando trabajamos con home’s centralizados.

#!/bin/sh
#hvivani. 20120828
#imprime totales de uso de disco por usuario verificando cada home.

cd /home/
for f in `ls`
do
 du -sh ./$f
done

Creando un pendrive de rescate con Linux – Linux System Rescue USB Stick


Siempre es útil tener un pendrive de rescate para cualquier problema que podamos tener con un servidor o una pc, donde debamos recuperar archivos, o realizar ciertas tareas cuando el sistema no arranca.

Este pendrive contiene herramientas de rescate y utilidades como: parted, partimage, fstools, editores, el viejo y querido midnight commander, network tools, etc

El kernel soporta ext2/ext3/ext4, reiserfs, btrfs, xfs, jfs, vfat, ntfs, así como también samba y nfs

Para armarlo vamos a utilizar una image prearmada con todo esto disponible en SystemRescueCD.

Vamos con los pasos de la instalación:

1) Descargamos la imágen de instalación desde: http://www.sysresccd.org/Download

2) Montamos la imágen:

mkdir -p /tmp/cdrom
mount -o loop,exec /path/to/systemrescuecd-x86-x.y.z.iso /tmp/cdrom

3) Insertamos el pendrive y ejecutamos el instalador:

cd /tmp/cdrom
bash ./usb_inst.sh

Si el pendrive está montado nos solicitara que lo desmontemos primero. El instalador muestra los dispositivos extraibles donde puede instalarse el sistema.

4) Por pantalla nos indicará cuando termine el proceso de creación y estará listo para usar.

rpmfusion para Fedora 14


Es muy probable que tengamos los siguientes errores de dependencia al intentar instalar los repositiorios rpmfusion en fedora 14:

error: Failed dependencies:
	system-release >= 15 is needed by rpmfusion-free-release-15-5.noarch
	system-release >= 15 is needed by rpmfusion-nonfree-release-15-5.noarch

Estos son los nuevos links para instalar rpmfusion en fedora 14

free:

# rpm -Uvh http://download1.rpmfusion.org/free/fedora/releases/14/Everything/i386/os/rpmfusion-free-release-14-0.4.noarch.rpm

nonfree:

# rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/releases/14/Everything/i386/os/rpmfusion-nonfree-release-14-0.4.noarch.rpm