martes, 16 de julio de 2013

Problema con SELinux y OpenVPN Centos 6.4

Hola amigos blogueros,


Les comento que me encuentro haciendo una migración de servidor y me topé con un problema configurando el servicio openvpn, el nuevo servidor tiene instalado Centos 6.4 x86_64.

Una guía de como configurar openvpn en Centos muy buena la pueden encontrar en: http://www.alcancelibre.org/staticpages/index.php/como-openvpn-server-centos

Básicamente el problema se origina porque quiero dejar habilitado SELinux en estado enforcing y no trabajo con el puerto por default del openvpn que es el 1194.

El error generado que me muestra el /var/log/message es el siguiente:

rsyslogd-2177: imuxsock begins to drop messages from pid 1216 due to rate-limiting
kernel: type=1400 audit(1373989530.644:7): avc:  denied  { name_bind } for  pid=1216 comm="openvpn" src=1199 scontext=unconfined_u:system_r:openvpn_t:s0 tcontext=system_u:object_r:reserved_port_t:s0 tclass=udp_socket

Manos a la obra.

Googleando encuentro que la solución es la siguiente, hay que agregar mi puerto a los que SELinux considera seguros y para eso debemos de usar el comando semanage. Para mi desgracia; aunque más creo que para mi fortuna; dicho comando no estaba presente en mi Centos. 

Nota: Soy de la idea que cada problema que se presenta es una oportunidad de aprender algo.

Nuevamente tocó googlear y encontré este página que me ayudó mucho: http://rm-rf.es/selinux-semanage-command-not-found/

Lo que hay que hacer es instalar el paquete que permite administrar las políticas del core, el paquete en mi caso es el: policycoreutils-python-2.0.83-19.30.el6.x86_64

Para instalarlo ejecutamos el siguiente comando:

# yum install policycoreutils*

Y le damos yes para que descargue todas las dependencias necesarias.

Ya con eso podemos hacer uso del comando semange.

Si quiero ver que puertos son los que el SELinux tiene agregados ejecuto el siguiente comando: 

# semanage port -l

El comodín usado es con una L en minúscula al final ( -l ).

Para filtar y que muestre solo los del openvpn:

# semanage port -l | grep openvpn

Como se podrán dar cuenta solo aparecen el 1194 en udp y tcp.

Ahora por último tenemos que agregar el puerto que necesitamos, esto lo hacemos con el siguiente comando:

# semanage port -a -t openvpn_port_t -p udp 1199

1199 es el puerto a usar.

Si cometieron algún error al digitar el puerto, el comando para borrarlo es el siguiente:

# semanage port -d -t openvpn_port_t -p udp 1199

Como ven solo se cambia la a de add por d de delete.

Hecho todo esto logré hacer arrancar el openvpn.

Espero les sea de ayuda a alguien y nos veremos en mi próximo post.

Cualquier comentario lo dejan por esta vía o me escriben un tweet a: @Danny_Obando.

viernes, 12 de julio de 2013

Instalación de fail2ban en Opensuse


Que tal amigos, el post de hoy es para mostrarles como se instala el fail2ban junto con una configuración básica.

No está demás indicarles que este manual está probado sobre Centos 6.4 x86_64.

¿ Qué es fail2ban ?

Es un servicio que está permanentemente monitoreando los logs, si encuentra una coincidencia de frases o palabras almacenadas en su diccionario; como por ejemplo failed password; agrega una regla en el firewall que bloquea la ip de origen.  Claro está que va a depender de mucho la configuración que nosotros hagamos para que el realice la acción al momento de encontrar la coincidencia.


En este caso voy a configurar fail2ban en un front firewall para que si encuentra mas de 3 intentos de conexión ssh con clave incorrecta bloquee la dirección IP por 1 hora.

Manos a la obra.

1.- Añadimos un repositorio al centos donde están las dependencias necesarias para poderlo instalar.


2.- Instalamos el fail2ban.


Ya con eso habremos terminado de instalar el fail2ban.

Configurando fail2ban

3.- Ingresamos a la carpeta de configuración y respaldamos el archivo .conf original.


4.- Editamos el archivo de configuración.
     # vi jail.conf

5.- Voy a copiar mi archivo de configuración para comentar los parámetros más importantes.

# Fail2Ban jail specifications file
#
# Comments: use '#' for comment lines and ';' (following a space) for inline comments
#
# Changes:  in most of the cases you should not modify this
#           file, but provide customizations in jail.local file, e.g.:
#
# [DEFAULT]
# bantime = 3600
#
# [ssh-iptables]
# enabled = true
#

# The DEFAULT allows a global definition of the options. They can be overridden
# 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/8

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

# 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 = 3

# "backend" specifies the backend used to get files modification.
# Available options are "pyinotify", "gamin", "polling" and "auto".
# This option can be overridden in each jail as well.
#
# pyinotify: requires pyinotify (a file alteration monitor) to be installed.
#              If pyinotify is not installed, Fail2ban will use auto.
# gamin:     requires Gamin (a file alteration monitor) to be installed.
#              If Gamin is not installed, Fail2ban will use auto.
# polling:   uses a polling algorithm which does not require external libraries.
# auto:      will try to use the following backends, in order:
#              pyinotify, gamin, polling.
backend = auto

# "usedns" specifies if jails should trust hostnames in logs,
#   warn when DNS lookups are performed, or ignore all hostnames in logs
#
# yes:   if a hostname is encountered, a DNS lookup will be performed.
# warn:  if a hostname is encountered, a DNS lookup will be performed,
#        but it will be logged as a warning.
# no:    if a hostname is encountered, will not be used for banning,
#        but it will be logged as info.
usedns = warn


# 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] <------ Esta es la línea original  <------
action   = iptables-allports[name=SSH, protocol=all]
           sendmail-whois[name=SSH-Firewall, dest=micorreo@midominio.com, sender=fail2ban@midominio.com]
logpath  = /var/log/secure
maxretry = 3

[proftpd-iptables]

enabled  = false
.....
....
....
....

ignoreip hace referencia al host que no le va a prestar atención si genera el log, normalmente es el host local y la ip del administrador si es que quieren.

bantime indica el tiempo que va a estar bloqueada la ip de origen, en este caso 1 hora.  El tiempo se indica en segundos.

findtime es el periodo de tiempo que si encuentra las coincidencias la cantidad de veces requerida lo bloquea.  Quiere decir que si en la configuración yo especifico que: si en un minuto hay tres registros en log con password failed lo marque como una coincidencia.
 
maxretry le especificamos cuantas veces debe de haberse mostrado el mensaje del log para que lo considere como coincidencia.

action en este parámetro es donde le decimos que hacer al fail2ban una ves que encontró la coincidencia la veces requeridas en el tiempo estipulado.
  • iptables-allports es la regla que se va aplicar.
  • sendmail-whois me sirve para que me envíe un correo electrónico avisándome que se aplico la regla.
logpath es la ruta del log que va a monitorear.

Ahora solo falta mandar a reiniciar el servicio y nuestro fail2ban empezará a funcionar.

No se olviden de activar el servicio para que se ejecute cada ves que se reinicie el servidor.


Espero les sirva.

Cualquier comentario es bien recibido en este blog o me envían un tweet a: @Danny_Obando.

Hasta mi próximo post.

viernes, 5 de julio de 2013

Compartir impresora de Windows 8 a Linux

Hola amigos blogueros,

Hoy por fin di con la solución a un requerimiento que me habían hecho, les comento de que se trataba y la solución.

Hay una máquina con Windows 8 que necesitaba compartir su impresora con otras dos máquinas Linux (Opensuse 11.2), así de simple es el requerimiento.  

Pues bien me puse a hacer los mismos pasos normales y tradicionales para compartir la impresora que tiene Windows y para mi sorpresa no funcionó.

Ya en otro de mis post escribí los pasos necesarios para compartir la impresora de Linux a Windows pero en este caso era lo contrario y realmente nunca se me había complicado.  Luego de leer algunos documentos pude darme cuenta que el Windows 8 al igual que el 7 tiene ciertos bloqueos para las conexiones que no sean de Microsoft.

No voy a entrar en detalles, mas vale voy ya con la solución.

Lo que hay que hacer es en la máquina con Windows 8 habilitar una característica del Sistema Operativo, la característica es Servicio de impresión de LPD (LPD Print Service), si si el mismo tipo que usa Linux para impresión remota.

¿ Cómo lo habilito ?
  1. Ir a Panel de Control.
  2. Programas y características.
  3. Activar o desactivar las características de Windows.
  4. Expandimos Servicios de impresión y documentos.
  5. Damos un visto en Servicio de impresión de LPD
  6. Aceptar, y listo.
Recuerden que yo ya había compartido la impresora de la manera tradicional en el Windows 8, lo recalco por si acaso algún despistado no lo haga y luego no le resulte este mini tuto.


¿ Y en Linux que hago ?
  1. Abro cualquier browser instalado en el equipo.
  2. En URL escribo: https://localhost:631/admin
  3. Añadir Impresora.
  4. Llenamos los campos de Nombre, ubicación y descripción.
  5. Conexión: LPD/LPR Host or Printer.
  6. URi de la conexión: lpd://laipdelwin8/nombredelaimpresoracompartida
  7. Elegimos la marca de la impresora.
  8. Elegimos el modelo de la impresora.
  9. Nos pide el password y la contraseña de un usuario con poder, pueden usar el de root.
  10. Ya con eso tienen instalada y configurada la impresora.
En estos momento no dispongo de mucho tiempo y por eso no pongo los gráficos paso a paso.

Cualquier duda no duden en comentar mi post o me envían un tweet a: @Danny_Obando.

Como siempre les digo, espero que este mini tuto les sea utilidad ahora o en algún momento.

Hasta mi próximo post.