Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Apache

180 views

Published on

Presentación de la clase sobre el Apche 2.4 de la asignatura Servidores Web del Máster Universitario en Desarrollo de Aplicaciones y Servicios Web.

Published in: Internet
  • Be the first to comment

Apache

  1. 1. AISI Administración de Servidores Web: APACHE
  2. 2. MWS apache apache
  3. 3. MWS apache Servidor web altamente extendido Proyecto de código abierto Creado por Apache Software Foundation  Versión 2.4 introducción
  4. 4. MWS apache Altamente configurable  Diseño modular  Ampliación Multiplataforma  Linux  Unix  Windows (desde versión 1.3)  Amiga OS 3x  OS/2 Soporta HTTP 1.1 (solicitudes múltiples) Soporta HTTP 2.0 (mod_http2 para >=2.4.17) características Soporta CGI y Fast CGI Soporta Host Virtuales Autenticación HTTP Perl Integrado Soporta PHP Con Tomcat -> servlets y JSP Puede actuar como servidor proxy SSI (Server Side Includes) SSL
  5. 5. MWS apache Info:https://httpd.apache.org/docs/2.4/mpm .html Posibilidad de configurar la distribución de los procesos (versión 2 de apache) Establecen la manera de atender las peticiones de los clientes Optimizan el servidor en función del uso que se le quiera dar Tipos:  Prefork (para sitios que requieran estabilidad)  Worked (escalabilidad)  event  Winnt (para sistema windows. Muy eficiente) Módulos de MultiProceso
  6. 6. MWS apache Igual que en la versión 1 de apache. El proceso principal crea un conjunto de hijos que sirven las peticiones El número de hijos está establecido entre un mínimo y un máximo Cada hijo ejecuta un único hilo (una petición por hijo simultáneamente) mmp prefork Cliente Proceso hijo (www-data) Proceso hijo (www-data) Proceso hijo (www-data) Poceso princ. (httpd) root Servidor 80
  7. 7. MWS apache Es el que más CPU y RAM consume por proceso - petición MaxClients/MaxRequestWorkers deben ser lo suficientemente: l grande para las peticiones simultáneas que esperes recibir l Pequeño para la RAM y procesos del servidor donde se ejecuta MaxClients=(RAM – size_all_other_processes)/ (max_size_apache_process) MaxClients=(RAM-Shared_RAM_per_Child)/ (Max_Process_Size-Shared_RAM_per_Child) mmp prefork
  8. 8. MWS apache Directivas a tener en cuenta para regular cómo el proceso padre crea procesos hijos para atender las peticiones entrantes: l StarServers indica el número de procesos que se lanzarán en el arranque l MinSpareServers: número procesos mínimo desocupados l MaxSpareServers: número procesos máximo desocupados l MaxRequestWorkers: debe ser lo suficientemente grande para tratar las solicitudes que esperamos recibir y lo suficientemente pequeño para los asegurar que tenemos memoria RAM para todos los procesos (solo si esperamos más de 256 peticiones simultáneas, podríamos necesitar incrementarlo) l MaxConnectionsPerChild: limita el número de conexiones que un proceso puede atender durante su existencia. Superado, muere y se lanza otro. Si es 0, ilimitado. ¿Ventajas? l User/Group (para procesos hijos) l Comportamiento: si hijos idle < MinSpareServers, padre crea otros, 1, 2, 4 esperando 1” y no más de 32, si hijos idle > MaxSpareServers, padre mata exceso de hijos mpm prefork
  9. 9. MWS apache Los procesos hijos pueden tener más de un hilo (TheadsPerChild) Cada hilo dentro de un proceso atiende una petición Permite atender gran número de peticiones con menor consumo de recursos que con prefork y conservando parte de la estabilidad que proporciona éste Los procesos hijos se crean o destruyen para que el número de hilos libres se mantengan entre un mínimo (MinSpareThreads) y un máximo (MaxSpareThreads) Número máximo de clientes: MaxRequestWorkers mmp worked Cliente Proceso hijo www-data Proceso hijo www-data Proceso hijo www-data Poceso princ. (httpd) root StartServers=3 threadsperchild=3 Servidor 80
  10. 10. MWS apache Más directivas a tener en cuenta para regular cómo el proceso padre crea procesos hijos para atender las peticiones entrantes: l Las vistas para prefork más l ServerLimit número de procesos hijos l ThreadLimit número de hilos en el servidor l MaxConnectionsPerChild controla cómo se recicla los procesos l User/group mpm worker
  11. 11. MWS apache ¿Número máximo de clientes que pueden ser atendidos simultáneamente? l Valor de MaxRequestWorkers ¿Número máximo de procesos hijos activos? l MaxRequestWorkers / ThreadsPerChild MinSpareThreads<#hijos<MaxSpareThreads ServerLimit>=MaxRequestWorkers/ThreadsP erChild ThreadLimit >=ThreadsPerChild mpm worker
  12. 12. MWS apache https://httpd.apache.org/docs/2.4/mod/event.html Está basado en el mpm worker con sockets no bloqueantes para manejar varias conexiones por un proceso/hilo (las indicadas por AsyncRequestWorkerFactor) Tiene un hilo por proceso dedicado a: l Escucha del socket l Conexiones KeepAlive l Sockets en los que el protocolo ya ha hecho su trabajo l Y aquellos en los que solo queda mandar los datos al cliente mpm event Cliente Proceso hijo Proceso hijo Proceso hijo Poceso princ. (httpd) Servidor 80 uid=apache1 uid=apache2 uid=apache3
  13. 13. MWS apache Las directivas relacionadas son las mismas que mpm worker más AsyncRequestWorkerFactor El número total de conexiones concurrentes para un proceso/hilo puede manejar está regulado por AsyncRequestWorkerFactor: Un proceso solo aceptará nuevas conexiones si en número actual de estas es menor de: ThreadsPerChild + (AsyncRequestWorkerFactor * number of idle workers) Podemos calcular una estimación del número máximo de conexiones para todos los procesos con: (ThreadsPerChild + (AsyncRequestWorkerFactor * number of idle workers)) * ServerLimit Ejemplo SI ThreadsPerChild = 10, ServerLimit = 4, AsyncRequestWorkerFactor = 2, MaxRequestWorkers = 40, idle_workers = 4 max_connections = (ThreadsPerChild + (AsyncRequestWorkerFactor * idle_workers)) * ServerLimit = (10 + (2 * 4)) * 4 = 72 Si todos los hilos está desocupados: max_connections = (AsyncRequestWorkerFactor + 1) * MaxRequestWorkers mpm event
  14. 14. MWS apache Optimizado para las plataformas Windows Un proceso padre y un proceso hijo El proceso hijo es multi-hilo Utiliza funcionalidades de Windows mmp winnt Cliente Proceso hijoPoceso princ. (httpd) Servidor 80
  15. 15. MWS apache Bajar software de www.apache.org Instalación mediante binarios (fácil pero no configurable) Instalación personalizada  Bajar fuentes  Configurar la instalación l ./configure [opciones] l Esto crea un makefile personalizado  Compilar el servidor l make l Entre otras cosas crea el ejecutable de Apache (httpd)  Instalar el servidor l make install instalación ./configure --prefix=/usr/local/apache (indica el directorio de instalación de apache)
  16. 16. MWS apache Configuración mediante fichero de texto La ubicación y nombre del fichero puede cambiar según la distribución:  http.conf  apache2.conf La configuración puede estar distribuida en distintos ficheros:  /etc/apache2/apache2.conf (configuración general del servidor. Desde este se incluyen el resto)  /etc/apache2/ports.conf (configuración de puertos)  /etc/apache2/sites-enabled/000-default  /etc/apache2/sites-enabled/001-site1  /etc/apache2/sites-enabled/002-site2  (configuración de los sitios web: directorios, contenidos, etc.) Directiva “include” Configuración de módulos  /etc/apache2/mods-enabled/*.load l LoadModule jk_module /usr/apache2/modules/mod_jk.so  /etc/apache2/mods-enabled/*.conf configuración
  17. 17. MWS apache En Windows: http://pistachitos.com/guias/instalar-php-5- 6-sobre-apache-2-4-windows/ Activar PHP: l Primero instalarlo: apt-get install libapache2-mod-php5  /etc/apache2/mods-enabled/*.load  /etc/apache2/mods-enabled/*.conf  En /etc/php5/apache2/php.ini configuraremos las opciones que necesitemos para PHP l Safe Mode = Off (Todas las funciones activas) l Display errors = On (No para producción) l max_execution_time=30 (Tiempo máx ejecución) l post_max_size=8M (Máximo tamaño POST) l upload_max_filesize = 8M l extension=mysql.so (acceso a MySQL, necesita también php5-mysql) PHP
  18. 18. MWS apache Configuración Windows https://httpd.apache.org/docs/2.4/es/platform/windows.htm l
  19. 19. MWS apache Configuración Windows
  20. 20. MWS apache Debemos tener en cuenta: l MaxConnectionsPerChild Al igual que en GNU/Linux, controla el número de conexiones para un único proceso, pero por el contrario, en Windows, no se creará un proceso de reemplazo instantáneamente (por lo general, estará a 0 a menos que haya problemas con la memoria) l ThreadsPerChild: Número máximo de hijos → número máximo de conexiones a la vez (recomendación: 150) l ¡Cuidado con '' que Apache puede interpretarlo como carácter de escape l Los nombres de archivo son case-insensitive en Windows, por lo que: RewriteEngine On RewriteMap lowercase int:tolower RewriteCond "%{REQUEST_URI}" "[A-Z]" RewriteRule "(.*)" "${lowercase:$1}" [R,L] Configuración Windows
  21. 21. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Indica el directorio base del servidor /usr/local/apache └ bin └ conf └ htdocs └ manual └ icons └ small └ logs └ cgi-bin └ include
  22. 22. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Fichero donde se almacena el PID del proceso padre
  23. 23. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Fichero para la comunciación entre el proceso padre y los hijos
  24. 24. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Segundos máximos de espera entre la recepción de una petición y la respuesta
  25. 25. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Permite conexiones persistentes (más de una solicitud por conexión)
  26. 26. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Nº máximo de solicitudes por conexión persistente
  27. 27. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Segundos máximos de espera de una nueva solicitud en una conexión persistente
  28. 28. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Nº inicial de procesos hijo
  29. 29. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Límite de clientes conectados simultáneamente
  30. 30. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Nº mínimo y máximo de hilos parados
  31. 31. MWS apache configuración – apache2.conf # apache2.conf -- Archivo de configuración de apache # Sección 1: Entorno Global ServerRoot "/usr/local/apache" PidFile /var/run/apache.pid <IfModule !perchild.c> ScoreBoardFile logs/apache_runtime_status </IfModule> Timeout 300 KeepAlive On MaxKeepAliveRequests 100 KeepAliveTimeout 15 <IfModule prefork.c> StartServers 3 MaxClients 8 MinSpareServers 5 MaxSpareServers 10 MaxRequestPerChild 0 </IfModule> Nº máximo de solicitudes que puede servir un hijo antes de ser ‘asesinado’. Con 0 indicamos que no se maten nunca.
  32. 32. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess
  33. 33. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess IP y puerto de escucha del servidor Usuario y grupo de los procesos hijo
  34. 34. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess Email del administrador del servidor Nombre DNS del servidor
  35. 35. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess Directorio raiz de los documentos web
  36. 36. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess Definición de un directorio del servidor El argumento es un directorio del sistema de archivos También se puede usar la directiva Location que tiene como argumento una ruta de la URL
  37. 37. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess OPCIONES ExecCGI: Se permite la ejecución de CGI’s Indexes: Si se solicita un directorio se muestra una página con el contenido del mismo FollowSymLinks: resolver enlaces simbólicos SymLinksIfOwnerMatch: resolver enlaces simbólicos si el destino es propiedad del mismo usuario que el enlace
  38. 38. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess No utilizar los ficheros de acceso .htaccess Los ficheros .htaccess se utilizan para distribuir la configuración por directorios. Un fichero .htaccess en un directorio es un fragmento de la configuración para ese directorio
  39. 39. MWS apache La configuración distribuida permite fragmentar la configuración en pequeños archivos de configuración (.htaccess) alojados en los directorios de la web configuración distribuida #... DocumentRoot /var/www <Directory /var/www/fotos> # Configuración del directorio fotos </Directory> <Directory /var/www/videos> # Configuración del directorio videos </Directory> #... /etc/apache2/httpd.conf #... DocumentRoot /var/www <Directory /var/www> AllowOverride All </Directory> #... /etc/apache2/httpd.conf /var/www/fotos/.htaccess # Configuración del directorio fotos #... /var/www/videos/.htaccess # Configuración del directorio videos #... Configuración CENTRALIZADA Configuración DISTRIBUIDA
  40. 40. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess Orden de las directivas de acceso Acceso por defecto
  41. 41. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess Utiliza una carpeta en el HOME de cada usuario del equipo para acceder como: http://www.miservidor.com/~usuario
  42. 42. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess Páginas índice cuando se accede a un directorio
  43. 43. MWS apache configuración – apache2.conf # Sección 2 Configuración del servidor principal Listen 80.90.56.12 80 User www-data Group www-data ServerAdmin yo@micorreo.com ServerName www.miservidor.com DocumentRoot /usr/local/apache/htdocs <Directory /> Options SymLinksIfOwnerMatch AllowOverride None </Directory> <Directory /usr/local/apache/htdocs > Options Indexes Includes FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory> UserDir public_html DirectoryIndex index.html index.htm index.shtml index.cgi AccessFileName .htaccess Nombre del archivo de configuración del control de acceso
  44. 44. MWS apache configuración – apache2.conf TypesConfig /etc/mime.types DefaultType text/plain <IfModule mod_mime_magic.c> MIMEMagicFile conf/magic </IfModule> HostnameLookups Off ErrorLog /var/log/apache/error.log LogLevel warn LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"time: %T seg %v"full # ... ServerSignature On Alias /icons/ "/usr/local/apache/icons/" <Directory "/usr/local/apache/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory /usr/lib/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> AddLanguage da .dk AddLanguage nl .nl # ... LanguagePriority en da nl et fr de el it ja pl pt pt-br ltz ca es sv AddDefaultCharset ISO-8859-1 Configuración MIME
  45. 45. MWS apache configuración – apache2.conf TypesConfig /etc/mime.types DefaultType text/plain <IfModule mod_mime_magic.c> MIMEMagicFile conf/magic </IfModule> HostnameLookups Off ErrorLog /var/log/apache/error.log LogLevel warn LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"time: %T seg %v" full # ... ServerSignature On Alias /icons/ "/usr/local/apache/icons/" <Directory "/usr/local/apache/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory /usr/lib/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> AddLanguage da .dk AddLanguage nl .nl # ... LanguagePriority en da nl et fr de el it ja pl pt pt-br ltz ca es sv AddDefaultCharset ISO-8859-1 Tipo MIME por defecto Patrones para averiguar el tipo MIME No usar DNS
  46. 46. MWS apache configuración – apache2.conf TypesConfig /etc/mime.types DefaultType text/plain <IfModule mod_mime_magic.c> MIMEMagicFile conf/magic </IfModule> HostnameLookups Off ErrorLog /var/log/apache/error.log LogLevel warn LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"time: %T seg %v" full # ... ServerSignature On Alias /icons/ "/usr/local/apache/icons/" <Directory "/usr/local/apache/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory /usr/lib/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> AddLanguage da .dk AddLanguage nl .nl # ... LanguagePriority en da nl et fr de el it ja pl pt pt-br ltz ca es sv AddDefaultCharset ISO-8859-1 Configuración del log
  47. 47. MWS apache configuración – apache2.conf TypesConfig /etc/mime.types DefaultType text/plain <IfModule mod_mime_magic.c> MIMEMagicFile conf/magic </IfModule> HostnameLookups Off ErrorLog /var/log/apache/error.log LogLevel warn LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i" %T %v" full # ... ServerSignature On Alias /icons/ "/usr/local/apache/icons/" <Directory "/usr/local/apache/icons"> Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> ScriptAlias /cgi-bin/ "/usr/local/apache/cgi-bin/" <Directory /usr/lib/cgi-bin/> AllowOverride None Options ExecCGI Order allow,deny Allow from all </Directory> AddLanguage da .dk AddLanguage nl .nl # ... LanguagePriority en da nl et fr de el it ja pl pt pt-br ltz ca es sv AddDefaultCharset ISO-8859-1 Muestra un pie de pagina con información sobre el servidor en las páginas de error Directorio de Iconos Directorio de CGI’s Lenguajes Juego de caracteres por defecto
  48. 48. MWS apache Un alias se utiliza para mapear una URL a una localización concreta del sistema de archivos Rompe la secuencia jerárquica normal alias Espacio de URLs http://????/ └ documentos └ imagenes └ fotos └ videos └ recursos Espacio de archivos /var/www └ documentos └ imagenes └ fotos └ videos /media/disco2 └ recursos DocumentRoot /var/www Alias /recursos /media/disco2/recursos
  49. 49. MWS apache Crear directorios del servidor web que requieren autenticación para su acceso autenticación Cliente (navegador) Servidor (httpd) GET http://www.misitio.com/protegido/a.htm Error 401: “Necesita autorización”Acceso restringido Usuario: Contraseña: pepe ******** GET http://www.misitio.com/protegido/a.htm Incluye el usuario y la contraseña en la cabecera Contenido de a.htm
  50. 50. MWS apache Configurar en apache2.conf la zona restringida Crear el archivo .members de usuarios/contraseñas autenticación básica <Location "/protegido/"> AuthName "Acceso restringido“ AuthType Basic AuthUserFile /usr/local/apache/secrets/.members Require valid-user </Location> # htpasswd –c .members pepe New password: **** Re-type new password: **** Adding password for user pepe # htpasswd .members juan New password: **** Re-type new password: **** Adding password for user pepe # cat .members pepe:b8p3dfj093478 juan:03l43f89sfl43 #
  51. 51. MWS apache Tener diferentes sitios web en un único equipo servidor Ahorro en infraestructuras Posibilidad de configuración compartida Administración centralizada Tipos:  Basada en nombres  Basada en IP  Varios servidores principales servidores virtuales
  52. 52. MWS apache Existe un servidor principal Existen diferentes nombres DNS que apuntan a la IP del servidor servidor virtual basado en nombres # Definición del servidor principal # ... ServerName www.miservidor.com DocumentRoot /www/miservidor/htdocs # ... <VirtualHost 192.168.1.20> ServerName www.miservidor2.com DocumentRoot /www/miservidor2/htdocs # ... </VirtualHost> <VirtualHost 192.168.1.20> ServerName www.miservidor3.com DocumentRoot /www/miservidor3/htdocs # ... </VirtualHost>
  53. 53. MWS apache Existe un servidor principal Existen diferentes IP’s en el servidor servidor virtual basado en ip # Definición del servidor principal # ... ServerName www.miservidor.com DocumentRoot /www/miservidor/htdocs # ... <VirtualHost 192.168.1.21> ServerName www.miservidor2.com DocumentRoot /www/miservidor2/htdocs # ... </VirtualHost> <VirtualHost 192.168.1.22> ServerName www.miservidor3.com DocumentRoot /www/miservidor3/htdocs # ... </VirtualHost>
  54. 54. MWS Reescrituras URL •Transformar una solicitud en otra •Tipos: l Internas: el cliente no lo nota l Reescritura: el cliente cambia la URL apache
  55. 55. MWS cómo apache
  56. 56. MWS l Se necesita activar mod_rewrite (instalar el plugin + RewriteEngine on en configuración) l Utiliza un conjunto de reglas computas por: patrón a buscar, cadena de sustitución y acción a realizar. l Se pueden encadenar varias reglas l Sintaxis: l RewriteRule Patron Sustitucion [flags] l Patron: expresión regular a buscar dentro de la URL (entre host y QueryString) l Ejemplo: l RewriteRule ^/$ /inicio/ [L,R] apache Reescrituras URL
  57. 57. MWS comodines apache
  58. 58. MWS l Puede ser: l Relativa (sin el nombre del servidor) l Completa l Puede utilizar $1...$9 para indicar los fragmentos encontrados en el patrón l Ejemplo: l RewriteRule ^/productos/(.*)/.*)$ /producto.php?categoria=$1&id=$2 [L] apache Cadena de sustitución
  59. 59. MWS apache flags https://httpd.apache.org/docs/current/rewrite/flags.htm l
  60. 60. MWS Condiciones extra l RewriteCond l Tantas como necesitemos l Preceden a la regla l Deben cumplirse todas l Sintaxis: l RewriteCond cadena condicion [flags] l Flags: se pueden combinar varios separados con ',': l NC | nocase → Ignorar mayúsculas/minúsculas l OR | ornext → Realiza un 'o' lógico con la condición siguiente l Ejemplo: l RewriteCond %{HTTP_USER_AGENT} ^Mozilla l RewriteRule ^/$ /homepage.html [L] l RewriteCond %{HTTP_USER_AGENT} ^Lynx l RewriteRule ^/$ /homepage.min.html [L] l RewriteRule ^/$ /homepage.std.html [L] apache
  61. 61. MWS Condiciones extra apache
  62. 62. MWS apache https://httpd.apache.org/docs/2.4/caching.html Mejora del rendimiento: l Three-state RFC2616 HTTP caching: mod_cache, mod_cache_disk. Los estados son: Fresh (más reciente que), Stale (más viejo que) y Non Existent l Two-state key/value shared object caching: https://httpd.apache.org/docs/2.4/socache.h tml l Specialized file caching: mod_file_cache Precarga de ficheros en memoria en el arranque. Puede ser útil para ficheros muy accedidos. caché
  63. 63. MWS apache Ejemplo: caché # Caching to Disk CacheRoot "/var/cache/apache/" CacheEnable disk / CacheDirLevels 2 CacheDirLength 1 #Caching to memcached (http://memcached.org/) #https://httpd.apache.org/docs/2.4/mod/mod_socache_memcache.html CacheEnable socache / CacheSocache memcache:memcd.example.com:11211,mem2.example.com:11212 # Caching files (¡cuidado con el número máximo de ficheros # abiertos establecido para el SO!) vs SSD vs caché del SO CacheFile /usr/local/apache2/htdocs/index.html
  64. 64. MWS apache Necesitamos el certificado que identifique al servidor mod_ssl (LoadModule ssl_module modules/mod_ssl.so) SSL # Definición del servidor principal # ... Listen 443 # ... <VirtualHost *:443> ServerName www.example.es DocumentRoot /www/example/htdocs SSLEngine On SSLCertificateFile “path_to_cert” SSLCertificateKeyFile “path_to_key” # ... </VirtualHost>
  65. 65. MWS apache Tener instalado openSSL Crear llave: Crear CSR (Certificate Signing Request) Generar el certificado (esto es lo que haría una autoridad certificadora) Así para autofirmado: OpenSSL y certificados openssl req -new -key server.key -out server.csr openssl genrsa -out server.key 1024 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
  66. 66. MWS apache Eliminar la versión de Apache y SO Deshabilita el listado de directorio Hardening (I) ServerTokens ProductOnly ServerSignature Off #footer <Directory /opt/apache/htdocs> Options ­Indexes|None Order allow,deny Allow from all </Directory> 
  67. 67. MWS apache Para impedir obtener información de número de inodo, límite en MIME y procesos hijos con ETag Deshabilita .htaccess Limitar métodos HTTP: Hardening (II) FileETag None <Directory /opt/apache/htdocs> Options ­Indexes AllowOverride None </Directory>  <LimitExcept GET POST PUT DELETE> deny from all #si ponemos nombres, DNS </LimitExcept>  TraceEnable off #Solo TRACE
  68. 68. MWS apache Mitigar Cross usando HttpOnly and Secure flag en cookie minimizabdo robo y manipulación Clickjacking Attack (frames) l SAMEORIGIN: Solo desde el mismo sitio l DENY: Ninguno l ALLOW-FROM uri: Solo desde URI especificada Deshabilitar SSI Hardening (III) Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure Header always append X­Frame­Options SAMEORIGIN #En web compartido (.htaccess): Header append X­FRAME­OPTIONS "SAMEORIGIN" <Directory /opt/apache/htdocs> Options –Indexes ­Includes Order allow,deny Allow from all </Directory>
  69. 69. MWS apache X-XSS Protection (incluso si el usuario lo deshabilita en el navegador) Solo HTTP/1.1 Deshabilitar SSL 1,..., solo TLS 1.0 Tipo MIME y contenido debe ser el mismo Hardening (IV) Header set X-XSS-Protection “1; mode=block” RewriteEngine On RewriteCond %{THE_REQUEST} !HTTP/1.1$ RewriteRule .* ­ [F]  SSLProtocol –ALL +TLSv1 +TLSv1.1 +TLSv1.2 <IfModule mod_headers.c> # Disable content sniffing, since it's an attack vector. Header always set X-Content-Type-Options nosniff </IfModule>
  70. 70. MWS apache Mod Security (https://www.howtoforge.com/apache_mod_ security) Deshabilita los módulos no utilizados Habilita registros: https://httpd.apache.org/docs/2.4/mod/mod _log_config.html Más en https://geekflare.com/apache-web- server-hardening-security/#2-Information- Leakage Hardening (IV) LogFormat "%h %l %u %t "%{sessionID}C" "%r" %>s %b %T" common
  71. 71. MWS apache PHP /etc/php/apache2/php.ini l expose_php = Off #no indicar versión l display_errors = Off l open_basedir = ubicación # impedir path Traversal l disable_functions = phpinfo, system, excec, shell_exec, ini_set, Dl, eval l allow_url_fopen= Off l allow_url_include = Off Suhosin: componente para proteger servidores con PHP (php5-suhosin) Hardening (V)
  72. 72. MWS apache HostnameLookups y DNS FollowSymLinks and SymLinksIfOwnerMatch (For highest performance, and no symlink protection, set FollowSymLinks everywhere, and never set SymLinksIfOwnerMatch) Caché MPM Cluster CDN Cloud … rendimiento
  73. 73. MWS apache add The response header is added to the existing set of headers, even if this header already exists. This can result in two (or more) headers having the same name. This can lead to unforeseen consequences, and in general set, append or merge should be used instead. append The response header is appended to any existing header of the same name. When a new value is merged onto an existing header it is separated from the existing header with a comma. This is the HTTP standard way of giving a header multiple values. echo Request headers with this name are echoed back in the response headers. header may be a regular expression. value must be omitted. edit edit* If this response header exists, its value is transformed according to a regular expression search-and-replace. The value argument is a regular expression, and the replacement is a replacement string, which may contain backreferences or format specifiers. The edit form will match and replace exactly once in a header value, whereas the edit* form will replace every instance of the search pattern if it appears more than once. merge The response header is appended to any existing header of the same name, unless the value to be appended already appears in the header's comma-delimited list of values. When a new value is merged onto an existing header it is separated from the existing header with a comma. This is the HTTP standard way of giving a header multiple values. Values are compared in a case sensitive manner, and after all format specifiers have been processed. Values in double quotes are considered different from otherwise identical unquoted values. set The response header is set, replacing any previous header with this name. The value may be a format string. setifempty The request header is set, but only if there is no previous header with this name. The Content-Type header is a special use case since there might be the chance that its value have been determined but the header is not part of the response when setifempty is evaluated. It is safer to use set for this use case like in the following example: Header set Content-Type "text/plain" "expr=-z %{CONTENT_TYPE}" unset The response header of this name is removed, if it exists. If there are multiple headers of the same name, all will be removed. value must be omitted. header
  74. 74. MWS apache https://httpd.apache.org/docs/ current/ Hardening de servidores GNU/Linux, OxWord, Carlos Álvarez y Pablo González Referencias

×