Category Archives: Seguridad

Directiva Satisfy

En el servidor Apache podemos restringir los accesos a nivel de hosts con las directivas allow y deny o a nivel de usuarios con Auth. El orden en el que se aplican estas directivas lo decidimos con la directiva Satisfy.

Así nos podemos encontrar en una situación en la que queramos restringir el acceso sólo desde nuestra red local y necesitemos que algunos usuarios conecten desde casa.

La directiva Satisfy, como comentamos, conmuta entre las restricción a nivel de host y la autenticación de usuarios.

El valor por defecto es All lo que significa que debe cumplir con todas las restricciones, para que no sea tan extricto cambiamos el valor a Any con el que permitimos que cumpla al menos una. De esta forma, en nuestro ejemplo, si estamos en la red local no preguntará contraseña porque cumplirá la restricción de hosts y si estamos en casa, deberemos responder al usuario y contraseña.

Nuestro fichero de configuración tendría una pinta parecida a esta:

AuthUserFile /etc/apache2/users
AuthName Sitio Local
AuthType Basic
Satisfy Any
<LIMIT GET POST>
order deny,allow
deny from all
allow from 192.168.
require user local
</LIMIT>

Fuente: Linux System Administration Recipes, Juliet Kemp, APress, 2009

Enumeración NFS

Si tenemos algunos servidores conectados a internet es posible que nos interese compartir entre ellos algunos archivos mediante NFS. El problema viene que al crear el servidor conectado directamente a internet cualquiera puede consultar los directorios compartidos.

Esto es lo que se conoce como enumeración NFS y no hay solución vinculada al protocolo.

La solución que propongo consiste en tener en cada servidor dos interfaces de red, una de ellas la configuraremos como privada, la otra quedará expuesta a internet. Ahora cuando algún usuario no autorizado escanee nuestros puertos verá algo así:

# nmap -sS servidor.com

Starting Nmap 5.21 ( http://nmap.org ) at 2011-07-25 20:35 CEST
Nmap scan report for servidor.com (xxx.xxx.xxx.xxx)
Host is up (0.060s latency).
Not shown: 990 closed ports
PORT     STATE    SERVICE
***
2049/tcp open     nfs
***

Nmap done: 1 IP address (1 host up) scanned in 5.92 seconds

Mostrando el servidor NFS corriendo y abierto. Así podría crear una enumeración como la que sigue

# showmount --all servidor.com
All mount points on servidor.com:
192.168.8.2:/path/to/share
192.168.8.3:/path/to/share
192.168.8.4:/path/to/share
192.168.8.5:/path/to/share
192.168.8.6:/path/to/share
...

En el listado vemos las distintas máquinas que están conectadas al servidor y el directorio que tienen montado.

Para resolver esto usaremos los ficheros /etc/hosts.allow y /etc/hosts.deny para evitar conexiones sólo desde máquinas de confianza.

El contenido de /etc/hosts.allow sería:

portmap: 192.168.8.0/24
nfsd: 192.168.8.0/24

y para el caso de /etc/hosts.deny

nfsd: ALL
portmap:ALL

El software de NMap seguiré mostrando el puerto abierto, pero ahora cuando intenten obtener un listado de lo compartido por NFS obtendrán esto:

# showmount --all servidor.com
clnt_create: RPC: Program not registered

Desde la red privada podremos seguir consultando las comparticiones con showmount, las opciones que le podemos pasar al comando son:

       -a or --all
              List both the client hostname or IP address and mounted directory in host:dir format. This 
              info should not be considered reliable. See the notes on rmtab in rpc.mountd(8).

       -d or --directories
              List only the directories mounted by some client.

       -e or --exports
              Show the NFS server's export list.