Apache

Apache

Introducción

Apache es un servidor web.

Instalación

Para instalarlo tendremos que instalar el paquete apache2 desde nuestro gestor de paquetes gráfico favorito o ejecutando la siguiente orden:

>> sudo aptitude install apache2

Uso

  • Si lo hemos instalado como servicio:

>> sudo /etc/init.d/apache2 start
>> sudo /etc/init.d/apache2 stop
>> sudo /etc/init.d/apache2 restart
  • Si no lo hemos instalado como servicio (standalone):

>> /usr/local/apache2/bin/apachectl start
>> /usr/local/apache2/bin/apachectl restart
>> /usr/local/apache2/bin/apachectl stop

Configuración

El fichero de configuración

El fichero de configuración se llama httpd.conf y esta en la siguiente ruta:

  • Desde las fuentes: /usr/local/apache2/conf/httpd.conf
  • Desde el repositorio: /etc/apache2/httpd.conf

Directorio raiz por defecto

  • Desde las fuentes: /usr/local/apache2/htdocs
  • Desde el repositorio: /var/www/

Cambiar el directorio de las páginas web

Modificar en el fichero de configuración /usr/local/apache2/conf/httpd.conf la variable DocumentRoot con la ruta nueva:

DocumentRoot "/media/windows/WEB"

Seguridad

  • La variable ServerTokens nos permite decidir que información dice el servidor. ServerTokens por defecto tiene el valor Full, por seguridad es decir cuanto menos información. Un ejemplo de los valores de esta variable y de sus salidas serian los siguientes:
Prod: Apache
Major: Apache/2
Minor: Apache/2.0
Minimal: Apache/2.0.55
OS: Apache/2.0.55 (Debian)
Full: Apache/2.0.55 (Debian) PHP/5.1.2-1+b1 mod_ssl/2.0.55 OpenSSL/0.9.8b

Por lo que editaremos el fichero /etc/apache2/apache2.conf y pondremos la variable ServerTokens con el valor Prod:

ServerTokens Prod
  • La variable ServerSignature permite la configuración del pie de página que aparece en ciertos mensajes generados por el servidor (mensajes de error, salida de mod_info , etc.). Si se utiliza ServerSignature On, se añade una línea con el número de versión de Apache, el nombre del servidor ServerName, y el email del responsable ServerAdmin. Por ejemplo:
Not Found  
The requested URL /docu/proyecto_web/img34.png was not found on this server.

Apache/2.2.3 (Debian) DAV/2 SVN/1.4.2 mod_fastcgi/2.4.2 PHP/5.2.0-8+etch7 mod_ssl/2.2.3 OpenSSL/0.9.8c Server at www.realidadfutura.com Port 80

Por lo tanto la pondremos en Off. Editaremos el fichero /etc/apache2/apache2.conf y pondremos la variable ServerSignature en Off:

ServerSignature Off
  • Por seguridad es conveniente deshabilitar el método TRACE y dejar solo los que voy a necesitar GET,HEAD, POST y OPTIONS. Esto habra que indicarselo en cada VirtualHost gracias a la variable TraceEnable. Por ejemplo, para deshabilitarlo en el VirtualHost por defecto iremos al archivo /etc/apache2/sites-available/default y dentro de la etiqueta VirtualHost pondremos la variable TraceEnable en Off:
TraceEnable off

Impedir que ciertas IPs accedan a una carpeta del servidor

Crear o modificar un archivo de nombre .htaccess en la carpeta e introducirle el siguiente contenido:

Order Deny,Allow
Allow from 155.210.155.169
Deny from all

Para hacerlo de esta forma necesitaremos que este activa la opción AllowOverride de usar archivos .htaccess a un valor distinto a None

Impedir que otras webs usen nuestras imagenes

A veces otras webs pueden usar imagenes nuestras subidas en nuestro servidor (consumiendo nuestro respectivo ancho de banda). Para evitar esto tendremos que crear o editar el archivo .htaccess en la carpeta principal de nuestra página web y añadir las siguientes líneas:

RewriteEngine On
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://tu-dominio.com [NC]
RewriteCond %{HTTP_REFERER} !^http://www.tu-dominio.com [NC]
RewriteRule .*\.(gif|jpg|swf|png|jpeg)$ - [NC,F]

Si ademas queremos que cuando usen una imagen nuestra, les aparezca otra, solo tendremos que cambiar la úlñtima línea por esta otra:

RewriteRule .*\.(gif|jpg|swf|png|jpeg)$ imagen_ladron.jpg [L]

Siendo imagen_ladron.jpg la imagen que queremos que les salga.

Security enhanced linux

Aveces podemos encontrarnos con el siguiente problema en el apache (aunque tengamos los permisos bien):

Permission denied: access to /index.html denied

Esto puede deberse a que algunos linux (similares a Red Hat, por ejemplo en Centos 5) implementan últimamente un sistema de seguridad llamado Security-Enhanced Linux.

Security-Enhanced Linux (o SELinux) es una arquitectura de seguridad integrada en el kernel 2.6.x usando los módulos de seguridad linux (o linux security modules, LSM). Este es un proyecto de la Agencia de Seguridad Nacional (NSA) de los Estados Unidos y de la comunidad SELinux. La integración de SELinux en Red Hat Enterprise Linux fue un esfuerzo conjunto entre al NSA y Red Hat

Usarlo

Por ejemplo: si queremos darle permisos al apache para que pueda acceder a una carpeta TU_CARPETA. Primero veremos que no tiene los permisos para que pueda ser accedida por el apache con la siguiente orden:

>> ls -Z TU_CARPETA
   drwxr-xr-x  root root system_u:object_r:home_root_t    TU_CARPETA

Entonces le daremos los permisos con la siguiente orden:

>> chcon -R -h -t httpd_sys_content_t TU_CARPETA

Por último comprobaremos que ya tiene los permisos:

>> ls -Z TU_CARPETA
   drwxrwxrwx  root root root:object_r:httpd_sys_content_t TU_CARPETA

Deshabilitarlo

Para saber si lo tenemos activado tendremos que ejecutar la siguiente orden (si esta off, significa que no esta activado lo que lo deshabilita, lo que quiere decir que esta activado):

>> getsebool -a | grep httpd
   allow_httpd_anon_write --> off
   allow_httpd_bugzilla_script_anon_write --> off
   allow_httpd_mod_auth_pam --> off
   allow_httpd_nagios_script_anon_write --> off
   allow_httpd_squid_script_anon_write --> off
   allow_httpd_sys_script_anon_write --> off
   httpd_builtin_scripting --> on
   httpd_can_network_connect --> off
   httpd_can_network_connect_db --> off
   httpd_can_network_relay --> off
   httpd_disable_trans --> off
   httpd_enable_cgi --> on
   httpd_enable_ftp_server --> off
   httpd_enable_homedirs --> on
   httpd_rotatelogs_disable_trans --> off
   httpd_ssi_exec --> off
   httpd_suexec_disable_trans --> off
   httpd_tty_comm --> on
   httpd_unified --> on

Activamos la opción de deshabilitar y comprobamos que se ha activado:

>> setsebool -P httpd_disable_trans 1
>> getsebool -a | grep httpd
   allow_httpd_anon_write --> off
   allow_httpd_bugzilla_script_anon_write --> off
   allow_httpd_mod_auth_pam --> off
   allow_httpd_nagios_script_anon_write --> off
   allow_httpd_squid_script_anon_write --> off
   allow_httpd_sys_script_anon_write --> off
   httpd_builtin_scripting --> on
   httpd_can_network_connect --> off
   httpd_can_network_connect_db --> off
   httpd_can_network_relay --> off
   httpd_disable_trans --> on
   httpd_enable_cgi --> on
   httpd_enable_ftp_server --> off
   httpd_enable_homedirs --> on
   httpd_rotatelogs_disable_trans --> off
   httpd_ssi_exec --> off
   httpd_suexec_disable_trans --> off
   httpd_tty_comm --> on
   httpd_unified --> on

Por último reiniciamos el apache para que tenga efecto:

>> sudo /etc/init.d/apache2 restart
   Parando apache2:                                             [  OK  ]
   Iniciando apache2:                                           [  OK  ]

Problemas

External APR-util

 Puede ser que apache nos de un erro como el siguiente:

configure: error: Cannot use an external APR-util with the bundled APR

Solución

Para solucionar este error, tendremos que instalar el paquete libaprutil1-dev:

>> sudo aptitude install  libaprutil1-dev
temas: 

Añadir nuevo comentario