lunes, 1 de julio de 2019

Apache HTTP Basic Auth para proteger, con contraseña, nuestro Apache

Hace unos días ya comenté cómo crear listas blancas de direcciones IPs en Apache para restringir el acceso a nuestro servidor. Pero podemos darle aún más vueltas, como a casi todo ¿Por qué quedarnos ahí si podríamos perfeccionar aún más y limitar el acceso a servidores con información delicada?


Pongámonos en la siguiente situación. Hemos establecido una lista blanca para limitar el acceso a nuestros servidores a tan sólo unas cuantas direcciones IPs. No obstante, el atacante ha hecho un ataque de IP Spoofing y, por lo tanto, consigue acceso a nuestro servidor ¿Qué podríamos hacer para que, aunque haga un IP Spoofing no pueda acceder a nuestro servidor? Pongamos un control de acceso mediante usuario y contraseña.

En esto consiste Apache HTTP Basic Auth, en establecer un segundo acceso, esta vez mediante usuario y contraseña. Ojo, no es un segundo acceso, es segundo acceso en nuestro caso que hemos establecido un filtrado con white y blacklists. Ahora bien ¿Cómo hacemos esto?

Lo primero es que nos tenemos que asegurar de tener apache2-utils instalado. Ojo, que si esto lo queréis hacer con Nginx es prácticamente igual, es más, tenéis que utilizar también un comando dentro del paquete apache2-utils. Una vez que lo tengamos instalado, vamos a crear el primer usuario con su contraseña.

htpasswd -c /etc/apache2/.htpasswd [miUsuario]

Con este comando lo que estamos haciendo es decir que nos cree un archivo nuevo de contraseñas bajo /etc/apache2 y que se llame .htpasswd y que contenga el usuario que especifique y la contraseña que posteriormente me pedirán. 

cat .htpasswd
[miUsuario]:[MiPasswordconSalt]

Si hacemos un cat del archivo veremos que tenemos nuestro usuario y la contraseña con salt. 

cd /etc/apache2/sites-available
cp -pv 000-default.conf 001-testing.conf

Yo esto lo voy a contar como si aún no tuviéseis creado si quiera el archivo de configuración de vuestro sitio web. Podemos copiarlo de 000-default.conf que deberíais tener en /etc/apache2/sites-available 

vim 001-testing.conf
<VirtualHost *:80>
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/
        <Directory /var/www/html>
        AuthType Basic
        AuthName "Restricted Content"
        AuthUserFile /etc/apache2/.htpasswd
        Require valid-user
        </Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>


En nuestro archivo de configuración virtualhost, dentro de la directiva Directory más la ruta que queramos securizar (en mi caso es directamente (/var/www/html) tendremos que añadir las líneas que veis arriba. Para una explicación más detallada podéis consultar esta doc de Apache. Pero básicamente:

AuthType. Selecciona el método de realizar la autenticación del usuario. El método más común es Basic, y es el que utiliza el módulo mod_auth_basic. Tenemos que ser conscientes que el método Basic envía la contraseña del usuario desde el cliente al servidor sin cifrar (a menos que vaya acompañado de mod_ssl).

AuthName. Establece el Realm para ser usuado en su autenticación.

AuthUserFile. Utiliza el fichero de contraseñas que hemos creado previamente con htpasswd

Require. Establece los usuarios que están permitidos, en este caso, especificamos que los usuarios que sean válidos.

a2ensite 001-testing.conf
systemctl reload apache2
apachectl configtest

Estos pasos son solamente necesarios si no tenemos habilitado el anterior archivo de configuración y el apachectl será  para el configtest y comprobar que todo ha salido bien.

Tras esto, trataremos de acceder a nuestra web que hemos preparado.





Si introducimos nuestro usuario y contraseña ya tendremos acceso.

 


Con esto ya tendríamos, en primer lugar, limitado el acceso mediante dirección IP y, posteriormente, si se cumple con la whitelist, tendríamos otro control de acceso mediante usuario y contraseña.

¿Hackeamos el Mundo?




2 comentarios:

  1. Apache HTTP es uno de los software de servidor web más utilizado en el mundo en la actualidad, con más de 100 millones de sitios web que lo utilizan. Y debido a que es de código abierto, es muy dinámico y se ha convertido en un servidor web robusto como lo es hoy. Además, la descarga y el uso son gratuitos. Encuentro tophosting este sitio web muy bueno para el alojamiento de dominios. Puedes visitar este sitio.

    ResponderEliminar

Related Posts Plugin for WordPress, Blogger...

Entrada destacada

El server me sabe a poco.

Soy un fanático del Rock y de Debian . (Creo que voy a inventar Rockbian, que suena bien y todo xD) Llevaba tiempo queriendo unir estos 2 c...