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
>> sudo /etc/init.d/apache2 start
>> sudo /etc/init.d/apache2 stop
>> sudo /etc/init.d/apache2 restart
>> /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