10 consejos para proteger el servidor Web Apache en UNIX/Linux

Si usted es un administrador de sistemas, debe proteger el servidor Web Apache, siguiendo los 10 consejos mencionados en este artículo.
1. Deshabilitar módulos innecesarios

Si usted está planeando instalar apache desde el código fuente, debe deshabilitar los siguientes módulos. Si lo haces ./configure-help, puedes encontrar todos los módulos disponibles que se pueden activar / desactivar.

 

* userdir – Asignación de las solicitudes de directorios específicos del usuario.

* autoindex – Muestra lista de directorio cuando no hay ningún archivo index.html

* status – Muestra estadísticas del servidor

* env – Compensación / creación de vars ENV

* setenvif – Colocación de vars ENV en los encabezados

* cgi – CGI scripts

* actions – Acción de disparo de las solicitudes

* negotiation – Negociación de contenido

* alias – Asignación de las solicitudes de las partes del sistema de archivos diferentes

* include – Server Side Includes

* filter – Filtro inteligente

* version – Manejo de la información de versión en los archivos de configuración utilizando IfVersion

* as-is – Tipos de archivos as-is
Desactivar todos los módulos anteriores, como se muestra a continuación cuando lo hagas ./configure

./configure \

–enable-ssl \

–enable-so \

–disable-userdir \

–disable-autoindex \

–disable-status \

–disable-env \

–disable-setenvif \

–disable-cgi \

–disable-actions \

–disable-negotiation \

–disable-alias \

–disable-include \

–disable-filter \

–disable-version \

–disable-asis
Si se habilita SSL, y mod_setenv desactivar, te sale el siguiente error.

* Error: Error de sintaxis en la línea 223 de / usr/local/apache2/conf/extra/httpd-ssl.conf: ‘BrowserMatch’ comando no válido, tal vez mal escrito o definido por una módulo no incluido en la configuración del servidor
* Solución: Si utiliza SSL, no SetEnvIf desactivar. O, comente la BrowserMatch en su httpd-ssl.conf, si mod_setenvif desactivar.

Después de la instalación, cuando lo hace httpd-l, puedes encontrar todos los módulos instalados.

# / Usr/local/apache2/bin/httpd-l

Compilado de los módulos:
core.c
mod_authn_file.c
mod_authn_default.c
mod_authz_host.c
mod_authz_groupfile.c
mod_authz_user.c
mod_authz_default.c
mod_auth_basic.c
mod_log_config.c
mod_ssl.c
prefork.c
http_core.c
mod_mime.c
mod_dir.c
mod_so.c

En este ejemplo, tenemos el apache siguientes módulos instalados.

* core.c – Apache módulo principal
* mod_auth * – Para los módulos de autenticación de varios
* mod_log_config.c – Registro petición del cliente. proporciona flexibilidad adicional de registro.
* mod_ssl.c – Para SSL
* prefork.c – Para MPM (Multi-Processing Module) Módulo de
* httpd_core.c – Apache módulo principal
* mod_mime.c – Para establecer los tipos de documentos MIME
* mod_dir.c – Para redirigir barra final en los caminos de la guía. si se especifica url / test /, va a url / prueba / index.html
* mod_so.c – Para cargar los módulos durante iniciar o reiniciar

2. Ejecutar Apache como usuario independiente y el grupo

Por defecto, Apache puede ejecutar como nadie o demonio. Es bueno para correr apache en su propia cuenta sin privilegios. Por ejemplo: Apache.

Crear grupo apache y el usuario.

groupadd apache

useradd -d /usr/local/apache2/htdocs -g apache -s /bin/false apache
Modificar el httpd.conf, y establecer usuario y de grupo adecuada.

# vi httpd.conf

User apache

Group apache

Después de esto, si reinicia apache, y ps-ef, verás que el Apache se ejecuta como «apache» (Excepto el proceso httpd primero, que siempre se ejecute como root).

# ps -ef | grep -i http | awk ‘{print $1}’

root

apache

apache

apache

apache

apache

3. Restringir el acceso al directorio raíz (Uso Permitir y Denegar)

Asegure el directorio raíz mediante el establecimiento de los siguientes en el httpd.conf

<Directory />

Options None

Order deny,allow

Deny from all

</Directory>

En lo anterior:

* Options None – Deberá estar en ninguno, que no permitirá que ninguna de las características adicionales opcionales.
* Order deny,allow – Este es el orden en que los «Denegar» y «Permitir» directivas debe ser procesado. Este proceso de «negar» primero y «permitir» al lado.
* Deny from all – Este deniega la solicitud de todo el mundo en el directorio raíz. No hay ninguna directiva Allow para el directorio raíz. Por lo tanto, nadie puede acceder a él.

4. Establecer los permisos adecuados para el directorio conf y bin

bin y el directorio conf debe ser visto únicamente por usuarios autorizados. Es buena idea crear un grupo, y añadir todos los usuarios que pueden ver / modificar los archivos de configuración de apache a este grupo.

Llamemos a este grupo: apacheadmin

Crear el grupo.

groupadd apacheadmin

Permitir el acceso a bin para este grupo.

chown -R root:apacheadmin /usr/local/apache2/bin

chmod -R 770 /usr/local/apache2/bin

Permitir el acceso a conf directorio para el grupo.

chown -R root:apacheadmin /usr/local/apache2/conf

chmod -R 770 /usr/local/apache2/conf

Agregar a miembros apropiados para este grupo. En este ejemplo, tanto Ramesh y John forman parte de apacheadmin

# vi /etc/group

apacheadmin:x:1121:ramesh,john

5. Deshabilitar la navegación del repertorio

Si usted no hace esto, los usuarios podrán ver todos los archivos (y directorios) en la raíz (o cualquier sub-directorio).

Por ejemplo, si van a http://{su-ip}/images/ y si usted no tiene un index.html con imágenes, que van a ver todos los archivos de imagen (y los sub-directorios) que figuran en el navegador (como una salida de ls -1). A partir de aquí, pueden hacer clic en el archivo de imagen individual para poder verla, o haga clic en un sub-directorio para ver su contenido.

Para desactivar la exploración de directorios, puede establecer el valor de la directiva Opciones para «Ninguno» o «-los índices». A – delante del nombre de la opción va a eliminar de la lista actual de opciones forzadas para ese directorio.

Los índices se mostrarán una lista de los archivos y subdirectorios dentro de un directorio en el navegador (sólo cuando no index.html está presente dentro de esa carpeta). Por lo tanto, los índices no se deben permitir.

<Directory />

Options None

Order allow,deny

Allow from all

</Directory>

(O)

<Directory />

Options -Indexes

Order allow,deny

Allow from all

</Directory>

6. No permita .htaccess

Usando .htaccess dentro de un sub-directorio en el htdocs (o cualquier parte ouside), los usuarios pueden sobrescribir las directivas de apache por defecto. En ciertas situaciones, esto no es bueno, y debe ser evitado. Usted debe desactivar esta función.

Usted no debe permitir a los usuarios utilizar el archivo .htaccess. Y reemplazar las directivas de Apache. Para ello, establezca «AllowOverride None» en el directorio raíz.

<Directory />

Options None

AllowOverride None

Order allow,deny

Allow from all

</Directory>

7. Deshabilitar otras opciones

Los siguientes son los valores disponibles para la directiva Options:

* Options All – Todas las opciones están permitidas (excepto MultiViews). Si no se especifica la directiva de opciones, este es el valor por defecto.
* Options ExecCGI – Ejecutar scripts CGI (utiliza mod_cgi)
* Options FollowSymLinks – Si tienes los enlaces simbólicos de este directorio, que será seguida.
* Options Includes – Permite las inclusiones de servidor (mod_include usos)
* Options IncludesNOEXEC – Permitir el lado del servidor incluye, sin la capacidad de ejecutar un comando o cgi.
* Options Indexes – Deshabilitar la lista de la guía
* Options MultiViews – Permitir que el contenido MultiViews negociado (mod_negotiation usos)
* Options SymLinksIfOwnerMatch – Al igual que FollowSymLinks. Sin embargo, este seguirá sólo cuando el propietario es el mismo entre el enlace y el directorio original a la que está vinculado.

Nunca especificar “Options All”. Especifique siempre una (o más) de las opciones mencionadas anteriormente. Puede combinar varias opciones en una sola línea, como se muestra a continuación.

Incluye opciones FollowSymLinks

El + y – delante de un valor de opción es útil cuando se han anidado direcotires, y quisiera sobreescribir una opción de la Directiva matriz Directorio.

En este ejemplo, para el directorio web /, que tiene tanto Incluye e índices:

<Directory /site>

Options Includes Indexes

AllowOverride None

Order allow,deny

Allow from all

</Directory>

Para /sitio/ es de la guía, si usted necesita Sólo índices de /sitio (y no la incluye), y si quieres FollowSymLinks sólo a este directorio, haga lo siguiente.

<Directory /site/en>

Options -Includes +FollowSymLink

AllowOverride None

Order allow,deny

Allow from all

</Directory>

* /site tendrá Incluye e índices
* /site/en tendrá índices y FollowSymLink

8. Retire los módulos DSO no deseados

Si ha cargado cualquier dinámica módulos de objetos compartidos con el apache, van a estar presentes en el interior del httpd.conf en «LoadModule» directiva.

Tenga en cuenta que los módulos de Apache compilado estáticamente no aparecerá como «LoadModule» directiva.

Comente no deseados «LoadModules» en el httpd.conf

grep LoadModule /usr/local/apache2/conf/httpd.conf

9. Restringir el acceso a una red específica (o dirección IP)

Si quieres que tu sitio sea visto solo por una dirección IP específica-dirección o de red, haga lo siguiente:

Para permitir una red específica para acceder a su sitio, dar la dirección de red en la directiva Permitir.

<Directory /site>

Options None

AllowOverride None

Order deny,allow

Deny from all

Allow from 10.10.0.0/24

</Directory>

Para permitir que una dirección IP específica de direcciones para acceder a su sitio, dar la dirección IP en la directiva Permitir.

<Directory /site>

Options None

AllowOverride None

Order deny,allow

Deny from all

Allow from 10.10.1.21

</Directory>

10. No mostrar o enviar la versión de Apache (Set ServerTokens)

De forma predeterminada, el encabezado de servidor HTTP de respuesta contiene la versión de Apache y PHP. Algo similar a lo siguiente. Esto es perjudicial, ya que no deseas que un atacante conocer el número de versión específica.

Server: Apache/2.2.17 (Unix) PHP/5.3.5
Para evitar esto, establezca el ServerTokens a Prod. en httpd.conf. Esto mostrará el mensaje «servidor: Apache» sin ningún tipo de información de la versión.

# vi httpd.conf

ServerTokens Prod

Los siguientes son los valores ServerTokens posible:

* ServerTokens Prod displays “Server: Apache”

* ServerTokens Major displays “Server: Apache/2″

* ServerTokens Minor displays “Server: Apache/2.2″

* ServerTokens Min displays “Server: Apache/2.2.17″

* ServerTokens OS displays “Server: Apache/2.2.17 (Unix)”

* ServerTokens Full displays “Server: Apache/2.2.17 (Unix) PHP/5.3.5″

Aparte de todos los más de 10 consejos, asegúrese de que para garantizar su UNIX/Linux. No tiene sentido para asegurar su apache, si su sistema operativo no es seguro. Además, siempre mantenga la fecha hasta la versión de Apache. La última versión del apache contiene soluciones para todos los problemas de seguridad conocidos. Asegúrese de revisar los archivos de log de apache con frecuencia.

Tips obtenidos desde The Geek Stuff

Scroll al inicio