Facundo Guerrero

Just another Linux Sysadmin

Instalar OpenShift Client Tools en Debian

Openshift es una Plataforma como Servicio (PaaS) que permite correr aplicaciones en la nube.

Openshift ofrece mayor flexibilidad que cualquier otra PaaS, soportando más frameworks de desarrollo para Java, Python, PHP y Ruby, incluidos Spring, Seam, Weld, CDI, Rails, Rack, Symfony, Zend Framework, Twisted, Django y Java EE. Incluye base de datos SQL y NoSQL y un sistema de archivos distribuidos.

Instalar Octopress en Debian

Octopress es un framework para Jekyll, desarrollado en Ruby, el cual nos permite generar de manera automática los archivos HTML, CSS y Javascript necesarios para poder tener un blog completamente funcional. A diferencia de otros CMS, no utiliza una base de datos para almacenar las entradas del blog y comentarios, en su lugar los post se redactan directamente en archivos de texto plano formateados en Markdown que posteriormente Jekyll se encargara de convertir en HTML

¿ Por Qué Usar Galera ?

Por qué debemos usar Galera y no usar la replicación común de MySQL

  • Ventajas :

    • Galera es Multi-Master.
    • Galera es syncronico.
    • Galera es multi threaded, MySQL no.
    • Galera es simple de escalar, MySQL necesita ser configurado manualmente.
    • Galera acepta lecturas y escrituras en cualquier nodo, mejora ampliamente la performance.
    • Galera no necesita hacer failover.
    • Galera está preparado para redes WAN.
    • No hay lag con el slave.
    • No hay que setear la posision del bin log.
    • Control automatico de los miembros.
    • Se puede utilizar LoadBalancer.
    • Repositorios de Percona y MariaDB.
  • Limitaciones :

    • Solo soporta InnoDB.
    • Se necesita una version de MySQL parcheada.
    • Se necesitan 3 nodos para utilizarlo. Se puede utilizar solo 2 nodos + garbd.

Si todavía no están convencidos de usarlo les recomiendo que lo prueben.

Two Factor Authentication in Ssh With Google

Siguiendo con el tema de los post anteriores sobre seguridad en nuestros server ssh vamos a agregarle una capa mas de seguridad a este. Para esto vamos a usar Google Authenticator que nos va a permitir tener una autenticación de 2 factores en nuestros servidor.

Primero tenemos que instalar Google Authenticator en nuestros teléfonos celulares . Link

Ahora configuremos nuestro servidor :

apt-get install libpam0g-dev hgsvn

Ahora descargamos el codigo usando hgsvn y lo compilamos

hg clone https://google-authenticator.googlecode.com/hg/ google-authenticator/ cd google-authenticator/libpam make make install

Para que esto funcione tenemos que agregar esta linea al inicio del archivo /etc/pam.d/sshd

auth required pam_google_authenticator.so

También tenemos que agregar una linea en la configuracion del daemon ssh en /etc/ssh/sshd_config

ChallengeResponseAuthentication yes

Ahora entramos usando la cuenta de usuario que usamos para loguearnos por ssh y ejecutamos el siguiente comando :

google-authenticator

Este comando nos va a generar las configuraciones para autenticar cada usuario.

Do you want authentication tokens to be time-based (y/n) y
https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/user@domain%3Fsecret%3**QWE88RTYUI12GE34**
Your new secret key is:** QWE88RTYUI12GE34**
Your verification code is 123456
Your emergency scratch codes are:
429111197
211111111
42222227
133333330
344444440

Do you want me to update your "/home/guerre/.google_authenticator" file (y/n) y

Do you want to disallow multiple uses of the same authentication
token? This restricts you to one login about every 30s, but it increases
your chances to notice or even prevent man-in-the-middle attacks (y/n) y

By default, tokens are good for 30 seconds and in order to compensate for
possible time-skew between the client and the server, we allow an extra
token before and after the current time. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n

If the computer that you are logging into isn't hardened against brute-force
login attempts, you can enable rate-limiting for the authentication module.
By default, this limits attackers to no more than 3 login attempts every 30s.
Do you want to enable rate-limiting (y/n) y

Los emergency scratch codes hay que guardarlos en un lugar seguro ya que en caso de perder el smartphone son los unicos que van a abrir el sistema.

Abrimos la url que nos da y escanemos el código desde nuestro celular con la aplicación google authenticator.

Por ultimo reiniciamos el servidor ssh

/etc/init.d/ssh restart

Ahora cuando nos conectemos por ssh nos va a pedir el código de autenticación

NFS & Iptables

Para usar iptables en un servidor nfs necesitamos especificar los puertos donde queremos que el servidor corra.

En caso que sea un servidor Debian tenemos que editar varios archivos

/etc/default/nfs-common

STATDOPTS="--port 32765 --outgoing-port 32766"

/etc/default/nfs-kernel-server

RPCMOUNTDOPTS="-p 32767"

/etc/default/quota

RPCRQUOTADOPTS="-p 32769"

/etc/modprobe.d/local.conf

 options lockd nlm_udpport=32768 nlm_tcpport=32768
 options nfs callback_tcpport=32764

En caso que sea un servidor CentOS o Redhat editamos el siguiente archivo /etc/sysconfig/nfs

LOCKD_TCPPORT=32768
LOCKD_UDPPORT=32768
MOUNTD_PORT=32767
RQUOTAD_PORT=32769
STATD_PORT=32765
STATD_OUTGOING_PORT=32766

Este es un ejemplo de los puertos que podemos usar.

Para asegurarnos que estos cambios tuvieron efecto podemos ver la salida del comando rpcinfo

jack ~ # rpcinfo -p localhost
programa vers proto puerto
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 32765 status
100024 1 tcp 32765 status
100021 1 udp 32768 nlockmgr
100021 3 udp 32768 nlockmgr
100021 4 udp 32768 nlockmgr
100021 1 tcp 32768 nlockmgr
100021 3 tcp 32768 nlockmgr
100021 4 tcp 32768 nlockmgr
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100005 1 udp 32767 mountd
100005 1 tcp 32767 mountd
100005 2 udp 32767 mountd
100005 2 tcp 32767 mountd
100005 3 udp 32767 mountd
100005 3 tcp 32767 mountd

Ahí se ve que los puertos fueron seteados correctamente.

IPTABLES

Primero guardamos nuestra configuración para poder agregarle las nuevas reglas.

iptables-save > iptables-nfs

editamos el archivo iptables-nfs y agregamos las nuevas reglar para permitir el acceso a servidor nfs solo para nuestra red local

IPTABLES
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#NFS PORTS
  -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 2049 -j ACCEPT
  -A INPUT -s 192.168.0.0/24 -p udp -m udp --dport 2049 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 2049 -j DROP
  #Lockd upd & tcp
  -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 32768 -j ACCEPT
  -A INPUT -s 192.168.0.0/24 -p udp -m udp --dport 32768 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 32768 -j DROP
  -A INPUT -p udp -m udp --dport 32768 -j DROP
  #portmaper
  -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 111 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 111 -j DROP
  #Mountd
  -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 32767 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 32767 -j DROP
  #quota
  -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 32769 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 32769 -j DROP
  #statd  
  -A INPUT -s 192.168.0.0/24 -p tcp -m tcp --dport 32765 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 32765 -j DROP

Guardamos el archivo con las siguientes reglas y lo restauramos.

iptables-restore iptables-nfs

Ahora solo van a poder ingresar al nfs los hosts en la red 192.168.0.0/24

Fuentes :

http://wiki.debian.org/SecuringNFS

http://wiki.debian.org/iptables