Skip to main content
Entorno LAMP

Asegurando nuestro entorno LAMP (Linux, Apache, MySQL y PHP) en Linux

Asegurar nuestro sistema es fundamental para tener un control de nuestro entorno y evitar posibles pérdidas de información.

En el post de hoy les hablaremos de como podemos tener un entorno LAMP lo más seguro posible. En los próximos días, publicaré también varios post explicando como poder instalar este entorno en las diferentes distribuciones de Linux.

Para su instalación en Debian, Ubuntu o Linux Mint pinchar en este enlace

Hablando de la seguridad, vamos a tratar con varios consejos, como proteger nuestro sistema ante un posible ataque o al menos, intentar ponérselo más complicado a aquel que venga con malas intenciones.

Antes de nada vamos a especificar en que ruta se guardarán los ficheros de configuración que modifiquemos. Lo haremos sobre un entorno Ubuntu 14.04 con Apache 2.4, PHP 5.6 y MySQL 5.7. Dicho esto, las rutas por defecto serían:

Para Debian, Ubuntu y Linux Mint

  • Apache -> /etc/apache2/apache2.conf
  • PHP -> /etc/php5/apache2/php.ini
  • MySQL -> /etc/mysql/my.cnf

Para CentOS, Red Hat y Fedora

  • Apache -> /etc/httpd/conf/httpd.conf
  • PHP -> /etc/php.ini
  • MySQL -> /etc/my.cnf

Ahora pasamos a ver los diferentes consejos

 

Ocultar la versión y el Sistema Operativo (Apache)

La directiva ServerTokens controla si el campo del encabezado de respuesta del servidor es enviado de vuelta a los clientes. Por otro lado la directiva ServerSignature configura el pie de página en los documentos generados por el servidor.

Dicho esto, añadiríamos las siguientes directivas a nuestro fichero de configuración:

 Con SecServerSignature  especificamos el texto que queremos mostrar en lugar de nuestro aplicativo.

 

Deshabilitar el listado de directorios y enlaces simbólicos (Apache)

Por defecto, apache permite ver el listado de directorios y ficheros accediendo a la url o ip del sitio, para evitar esto utilizamos la directiva Options en el fichero conf de nuestro site.

 

Restringir el acceso a ficheros y directorios (Apache)

Otra medida de seguridad, es evitar que cualquiera pueda acceder a una carpeta, fichero o ruta en nuestro servidor. Para ello utilizaremos las siguientes directivas.

Para restringir directorios, podemos hacerlo a todo el mundo, excepto a quienes nosotros decidamos

Para el caso de un fichero, sería lo mismo, a excepción de que la directiva sería FIle

Y para el caso de una localización

 

Limitar el tamaño de las peticiones (Apache)

Apache por defecto, no establece ningún límite para las peticiones realizadas. Esto podría llevar a un ataque DDos (Denegación de servicio).

Para solucionarlo, podemos aplicar un límite a las peticiones en el fichero de configuración de nuestro apache con la directiva LimitRequestBody en la etiqueta Directory. Podemos establecer un límite entre 0 (sin límite) y 2147483647 (2GB) que deberíamos expresar en bytes.

Por ejemplo, vamos a establecer nuestra directiva, con un valor máximo de petición de 500 Kb, para ello incluiríamos la siguiente configuración

 

 

Deshabilitar la ejecución de CGI (Apache)

CGI (Common Gateway Interface), es un método por el cual un servidor web puede interactuar con programas externos, de tal forma que sería el método más sencillo de poder mostrar contenido dinámico en un sitio web. Si tenemos algún directorio donde no queramos permitir esta ejecución, podemos deshabilitarlo con la siguiente directiva

 

Uso de mod_security y mod_evasive (Apache)

Mod_Security hace de firewall para nuestras aplicaciones web, además de monitorizar el tráfico en tiempo real, ayudándonos a defendernos de ataques, puede ayudarnos a prevenir varios de ellos.

Para instalarlo, lanzaremos los siguientes comandos

En el caso de Debian, Ubuntu o Linux Mint

En el caso de CentOS, Red Hat o Fedora

Mod_evasive previene ataques DDos y ataque por fuerza bruta. Para su detección utiliza tres métodos:

  • Controla el número de peticiones realizadas a una misma página en un rango corto de tiempo
  • Comprueba si cualquier proceso trata de realizar más de 50 peticiones concurrentes
  • Comprueba si una ip que se encuentra en la lista negra, está realizando peticiones

Para instalarlo, lanzaremos los siguientes comandos

En el caso de Debian, Ubuntu o Linux Mint

En el caso de CentOS, Red Hat o Fedora

 

Instalando un certificado SSL (Apache)

La instalación de un protocolo seguro, indica que nuestros datos navegan por la red encriptados, evitando así la mirada de ojos inquietos. Debido a su extensa explicación y por no hacer muy largo este post, lo haremos en un próximo post, el cual incluiré un enlace desde aquí al mismo una vez esté publicado.

 

Restringir la información mostrada en PHP (PHP)

Por defecto, la instalación de PHP muestra la versión instalada a todo aquel que quiera verla, esto incluiría la versión de PHP en una cabecera de la siguiente forma:

Para evitar esto, podemos modificar la directiva expose_php de la siguiente forma

 

Deshabilitar ejecución de código remota (PHP)

Por defecto, php permite la ejecución de código en el servidor a través de web o de una conexión ftp. Para evitar esto, podemos añadir las siguientes directivas

 

Deshabilitar funciones peligrosas de PHP (PHP)

Podemos deshabilitar algunas directivas que consideremos peligrosas para nuestro sistema, por poder ejecutar código en nuestro servidor o por poder ver cierta información sensible, estos comandos los añadiríamos en la directiva disable_functions de la siguiente forma

 

Limitar el acceso de PHP al sistema (PHP)

Podemos utilizar la directiva open_basedir, para especificar una ruta en la que permitamos a php poder ejecutarse

 

Habilitar límites en PHP (PHP)

Podemos permitir un tamaño o tiempo máximo que podrá tener una determinada acción, por ejemplo, las siguientes directivas

 

Restringir el acceso remoto a MySQL (MySQL)

Podemos restringir el acceso a nuestro MySQL a una ip en concreto, evitando posibles accesos indeseados por parte de terceros, para ello utilizamos la siguiente directiva

 

Deshabilitar el uso de Ficheros locales (MySQL)

A través de MySQL, podemos ver ficheros existentes en el servidor, por ejemplo podríamos ver el contenido de los ficheros /etc/passwd o /etc/shadow y, esto es un terrible fallo de seguridad. Para solucionarlo utilizaríamos la siguiente directiva en nuestro fichero de configuración

 

Asegurar nuestra instalación de DDBB (MySQL)

Podemos instalar la instalación segura de MySQL lanzando el siguiente comando una vez instalado MySQL

Esto nos configurará mysql de una forma segura, tal y como nosotros le especifiquemos

 

Aplicar el bit de inmutabilidad a los ficheros de configuración

Aplicando el bit de inmutabilidad, evitamos que dichos ficheros puedan ser editados, esto nos prevendrá ante un posible atacante o ante alguien que intente modificar dichos ficheros

Para aplicarlo lanzaríamos el siguiente comando

En caso de que quisiéramos quitarlo, lo haríamos colocando un – en lugar de un + delante de la i

 

 

Esto es todo por ahora, como ven estos sólo son algunos consejos con los que poder hacer un poco más seguro su sistema. Como siempre, gracias por leernos y si tienen dudas, quieren expresar su opinión o necesitan ayuda con algo comenten.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *