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.

Servidor web apache

3,895 views

Published on

Published in: Technology
  • Be the first to comment

Servidor web apache

  1. 1. <ul><ul><li>apache </li></ul></ul>Dani Gutiérrez Porset [email_address]
  2. 2. Índice <ul><li>Introducción </li></ul><ul><li>Arquitectura modular. Directivas. Módulos core, MPM, otros módulos básicos </li></ul><ul><li>Funcionalidades: Negociación de contenidos, Host virtuales, Reescritura de URLs, Proxys, Contenidos dinámicos </li></ul><ul><li>Seguridad </li></ul><ul><li>Herramientas </li></ul><ul><li>Configuración </li></ul><ul><li>Software </li></ul><ul><li>Referencias </li></ul><ul><li>Licencia de uso </li></ul>
  3. 3. Introducción <ul><li>Es una de las “estrellas” del sw libre: </li></ul><ul><ul><li>El servidor web más usado desde abril-96 (news.netcraft.com) </li></ul></ul><ul><ul><li>“lAmp”, “wAmp” </li></ul></ul><ul><li>Usado en: </li></ul><ul><ul><li>Wikipedia, Wikimedia </li></ul></ul><ul><ul><li>Google: GWS. </li></ul></ul><ul><ul><ul><li>http://www.googlerank.com/ranking/Ebook/howgoogleworks.html </li></ul></ul></ul>
  4. 4. Introducción <ul><li>Multiplataforma: </li></ul><ul><ul><li>Unix, Linux, BSD </li></ul></ul><ul><ul><li>Windows </li></ul></ul><ul><ul><li>OS/2 </li></ul></ul><ul><ul><li>... </li></ul></ul><ul><li>Ramas de versiones: </li></ul><ul><ul><li>1.x (1.3) </li></ul></ul><ul><ul><li>2.x (2.2, 2.0): más modular, más portable a otros S.O., threads, IPv6, nueva API </li></ul></ul>
  5. 5. Introducción <ul><li>Desarrollado por la fundación Apache: </li></ul><ul><ul><li>Otros proyectos: </li></ul></ul><ul><ul><ul><li>ant: herramienta para hacer builds semejante a make </li></ul></ul></ul><ul><ul><ul><li>jakarta: software opensource para java </li></ul></ul></ul><ul><ul><ul><li>lucene: motor de búsqueda </li></ul></ul></ul><ul><ul><ul><li>tomcat: contenedor de servlets y jsp </li></ul></ul></ul><ul><ul><ul><li>spamassassin </li></ul></ul></ul><ul><ul><li>Licencias: v2.0 (compat. GPLv3), v1.1, v1.0. Tradicionalmente permiten distribuir código abierto y cerrado. </li></ul></ul>
  6. 6. Arquitectura modular <ul><li>Compilados (static) o enlazados dinámicamente (shared) </li></ul><ul><li>Grupos: </li></ul><ul><ul><li>Core. </li></ul></ul><ul><ul><li>Módulos multiproceso. </li></ul></ul><ul><ul><li>Otros (ref http://modules.apache.org ): </li></ul></ul><ul><ul><ul><li>Propios de apache (más de 70). Ejs: Filtrado (mod_include, mod_ext_filter), Compresión (mod_deflate), Cache (mod_*cache),... </li></ul></ul></ul><ul><ul><ul><li>“Third-party”. Ejs: </li></ul></ul></ul><ul><ul><ul><ul><li>Interfaces a lenguajes: php, perl, python (“lAmP/wAmP”), tcl </li></ul></ul></ul></ul><ul><ul><ul><ul><li>mod_throttle, mod_bandwidth, mod_security,... </li></ul></ul></ul></ul>
  7. 7. Directivas <ul><li>Reglas sintácticas específicadas en los módulos </li></ul><ul><li>Uso típico de PCRE: </li></ul><ul><ul><li>Perl-compatible regular expressions. </li></ul></ul><ul><ul><li>Ref: http://pcre.org/pcre.txt </li></ul></ul>
  8. 8. Directivas <ul><li>Contextos de aplicación: </li></ul><ul><ul><li>Servidor </li></ul></ul><ul><ul><li>Host virtual </li></ul></ul><ul><ul><li><Directory>, <Location>, <Files>, <Proxy> </li></ul></ul><ul><ul><li>Ficheros .htaccess. (según AccessFileName): </li></ul></ul><ul><ul><ul><li>Se analizan en todos los directorios del path de cada documento accedido. Baja el rendimiento. </li></ul></ul></ul><ul><ul><ul><li>Recomendados sólo para casos de cambios frecuentes que afecten a directorios ej. ISPs </li></ul></ul></ul>
  9. 9. Módulo core <ul><li>Opciones generales: </li></ul><ul><ul><li>Directorio raíz (/var/www), nombre del servidor, mail de contacto, banner de página </li></ul></ul><ul><ul><li>Charset, tipos mime (por defecto y forzados) </li></ul></ul><ul><li>Directivas de contexto: </li></ul><ul><ul><li><Directory>, <Location>, <Files>, <Proxy> </li></ul></ul><ul><ul><li>Ficheros de control (.htaccess) </li></ul></ul><ul><ul><li>Options </li></ul></ul><ul><li>Inclusión de otros ficheros </li></ul><ul><li>Códigos y logs de errores. </li></ul>
  10. 10. Módulo core <ul><li>Del protocolo http: KeepAlive, límites de métodos, de tamaño de peticiones. </li></ul><ul><li>Límites de CPU, memoria, procesos (CGIs, SSIs). Timeout (normal, keepalive). </li></ul><ul><li>Tipo de autenticación y control de acceso básico (Require). </li></ul><ul><li>Host virtuales. </li></ul><ul><li>Handlers de ficheros. </li></ul><ul><li>Filtros de E/S. </li></ul>
  11. 11. Módulos multiproceso (MPM) <ul><li>Funciones: </li></ul><ul><ul><li>Establecer conexiones (ej. directiva Listen) </li></ul></ul><ul><ul><li>Atender peticiones mediante threads y/o procesos </li></ul></ul><ul><li>Utilidad: adaptarse a múltiples entornos: </li></ul><ul><ul><li>Multiplataforma: aprovechar características del S.O. (ej. POSIX, Windows) </li></ul></ul><ul><ul><li>Necesidades concretas: escalabilidad vs estabilidad. Permiten limitar threads, procesos, peticiones de clientes. </li></ul></ul>
  12. 12. Módulos multiproceso (MPM) <ul><li>No puede haber más de un MPM a la vez en un servidor. </li></ul><ul><li>Posibilidades según S.O.: </li></ul><ul><ul><li>Unix: </li></ul></ul><ul><ul><ul><li>prefork: sin threads (similar a v1.x): </li></ul></ul></ul><ul><ul><ul><ul><li>Cada petición es atendida por un proceso hijo. Hay algunos ya lanzados (“idle”). </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Compatible con librerías non-thread-safe. Más seguro: se aíslan más las peticiones </li></ul></ul></ul></ul><ul><ul><ul><li>worker: con threads. Menos recursos que prefork. </li></ul></ul></ul><ul><ul><ul><li>event: semejante a worker. Experimental </li></ul></ul></ul><ul><ul><li>Otros: Beos, Netware, OS/2, Windows </li></ul></ul>
  13. 13. Otros módulos básicos <ul><li>mod_autoindex, mod_dir: índices de directorios. </li></ul><ul><li>mod_log_config, mod_logio: logs de acceso. </li></ul><ul><li>mod_setenvif: establece variables de entorno en función de la petición. </li></ul><ul><li>mod_so: carga de módulos dinámicos. </li></ul><ul><li>mod_status: da información del servidor. </li></ul>
  14. 14. Negociación de contenidos <ul><li>(Ver protocolo http) </li></ul><ul><li>Posibilidades: </li></ul><ul><ul><li>Fichero de mapeo de tipos </li></ul></ul><ul><ul><li>Opción Multiviews. </li></ul></ul><ul><li>Criterios: </li></ul><ul><ul><li>Idioma </li></ul></ul><ul><ul><li>Parámetro qs (source quality) ej. jpeg / gif </li></ul></ul><ul><ul><li>Charset </li></ul></ul><ul><ul><li>Codificación ej. gz </li></ul></ul><ul><li>Módulos: mod_negotiation, mod_mime </li></ul>
  15. 15. Hosts virtuales <ul><li>Tener varios servidores web en una sola máquina, con un único apache. </li></ul><ul><li>Modalidades: </li></ul><ul><ul><li>Basados en nombre: en una IP:puerto hay varios servidores virtuales. Más sencillos </li></ul></ul><ul><ul><li>Basados en IP. Ej. casos: </li></ul></ul><ul><ul><ul><li>Uso de SSL con host virtuales. </li></ul></ul></ul><ul><ul><ul><li>Gestión de ancho de banda </li></ul></ul></ul><ul><ul><li>Basados en puerto </li></ul></ul>
  16. 16. Hosts virtuales <ul><li>Directivas principales: </li></ul><ul><ul><li>Listen </li></ul></ul><ul><ul><li>NameVirtualHost (necesaria si name-based). Mejor emplear una IP en vez de un nombre. </li></ul></ul><ul><ul><li><VirtualHost>. Mejor emplear una IP en vez de un nombre. </li></ul></ul><ul><ul><li>ServerName, ServerAlias, DocumentRoot </li></ul></ul><ul><li>Módulos: </li></ul><ul><ul><li>Gestión sencilla: core </li></ul></ul><ul><ul><li>Gestión avanzada: mod_vhost_alias </li></ul></ul>
  17. 17. Reescritura de URLs <ul><li>Reescribir URLs (a zonas de ficheros, a otras URLs) en base a condiciones: </li></ul><ul><ul><li>Cabeceras http, peticiones, fecha y hora,... </li></ul></ul><ul><li>Módulos: </li></ul><ul><ul><li>Gestión sencilla: mod_alias (directivas Alias..., Redirect..., ScriptAlias...), mod_userdir </li></ul></ul><ul><ul><li>Gestión avanzada: mod_rewrite </li></ul></ul>
  18. 18. Proxys <ul><li>Posibilidades: </li></ul><ul><ul><li>Proxys directo e inverso </li></ul></ul><ul><ul><li>Cadena de proxys remotos </li></ul></ul><ul><ul><li>Bloqueo a algunas direcciones </li></ul></ul><ul><li>Módulos: </li></ul><ul><ul><li>mod_proxy </li></ul></ul><ul><ul><li>Según el protocolo: mod_proxy_http, mod_proxy_ftp,... </li></ul></ul>
  19. 19. Contenidos dinámicos <ul><li>cgi (mod_cgi) / scgi / fast cgi. </li></ul><ul><ul><li>El cgi recibe: </li></ul></ul><ul><ul><ul><li>Variables de entorno (mod_env) </li></ul></ul></ul><ul><ul><ul><li>La petición: http:...?campo1=valor1&campo2=... según el método: </li></ul></ul></ul><ul><ul><ul><ul><li>GET: en la variable QUERY_STRING </li></ul></ul></ul></ul><ul><ul><ul><ul><li>POST: en stdin. Longitud en variable CONTENT_LENGTH </li></ul></ul></ul></ul><ul><ul><li>Página de respuesta: a través de stdout </li></ul></ul><ul><ul><li>Utilidad: librería libcgi para cada lenguaje </li></ul></ul><ul><li>ssi (mod_include) </li></ul><ul><li>php, servlets, jsp, asp, asp.net, server api (nsapi, isapi),... </li></ul>
  20. 20. Seguridad <ul><li>Módulos según las 2 fases: </li></ul><ul><ul><li>Autenticación: determinar quién se conecta. </li></ul></ul><ul><ul><ul><li>Tipo de autenticación (mod_auth_...): (según el protocolo http) basic, digest </li></ul></ul></ul><ul><ul><ul><li>Proveedor de autenticación (mod_authn_,...): fichero, base de datos (sql, dbm), ldap, anónimo </li></ul></ul></ul><ul><ul><li>Autorización (mod_authz_...): determinar si el usuario, autenticado o anónimo, está autorizado o no a acceder a un recurso concreto. </li></ul></ul><ul><ul><ul><li>Ejs. que pertenezca a una lista de usuarios, a un grupo, que sea el propietario </li></ul></ul></ul>
  21. 21. Seguridad <ul><li>Control de acceso: determinar si es posible el acceso en base a condiciones ej. equipo cliente, hora,... </li></ul><ul><ul><li>Módulos: </li></ul></ul><ul><ul><ul><li>mod_authz_host: </li></ul></ul></ul><ul><ul><ul><ul><li>Restricción según IP/nombre del cliente, características de la petición (variables de entorno con mod_setenv_if) </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Importante: hace tres pasadas según la directiva Order. </li></ul></ul></ul></ul><ul><ul><ul><li>mod_rewrite, ej. según la hora </li></ul></ul></ul>
  22. 22. Seguridad <ul><li>Protocolo ssl/tls: mod_ssl </li></ul><ul><ul><li>Funcionalidades: </li></ul></ul><ul><ul><ul><li>Autenticación de servidor. Requiere como mínimo indicar un certificado y una clave privada </li></ul></ul></ul><ul><ul><ul><li>Autenticación de clientes. </li></ul></ul></ul><ul><ul><ul><li>Uso de proxy reenviando peticiones a servidor ssl </li></ul></ul></ul><ul><ul><li>Todos los formatos son PEM </li></ul></ul><ul><ul><li>Virtual hosts: Cada servidor virtual https se corresponde con una ip y un puerto. Por tanto no puede emplearse virtual hosts basados en nombre. </li></ul></ul>
  23. 23. Herramientas <ul><li>[del paquete apache2-utils] </li></ul><ul><li>Autenticación de usuarios: </li></ul><ul><ul><li>DBM: dbmmanage, htdbm </li></ul></ul><ul><ul><li>Ficheros: htpasswd (basic), htdigest (digest) </li></ul></ul><ul><li>Apache benchmarking: ab </li></ul><ul><li>Ficheros de log: </li></ul><ul><ul><li>logresolve: resolución de nombres de IPs </li></ul></ul><ul><ul><li>rotatelogs: rotación </li></ul></ul><ul><ul><li>check_forensic: análisis forense </li></ul></ul><ul><li>Otros (htcacheclean, checkgid) </li></ul>
  24. 24. Configuración <ul><li>[lo indicado aquí aplica a la versión 2] </li></ul><ul><li>Tipos de ficheros: </li></ul><ul><ul><li>Ficheros de configuración </li></ul></ul><ul><ul><li>Módulos </li></ul></ul><ul><ul><li>Ficheros .htaccess (directiva AccessFileName) </li></ul></ul><ul><ul><li>Fichero de tipos MIME (directiva TypesConfig) </li></ul></ul>
  25. 25. Configuración <ul><li>Ficheros de configuración </li></ul><ul><ul><li>apache2.conf: es el principal. </li></ul></ul><ul><ul><li>Otros ficheros leídos con directiva Include: </li></ul></ul><ul><ul><ul><li>ports.conf: puertos de escucha (puede escuchar por más de uno) </li></ul></ul></ul><ul><ul><ul><li>httpd.conf: por compatibilidad con versiones anteriores de apache </li></ul></ul></ul><ul><ul><ul><li>conf.d/: otros ficheros de configuración </li></ul></ul></ul><ul><ul><ul><li>mods-enabled/: módulos habilitados. Son softlinks a módulos disponibles (mods-available/*) </li></ul></ul></ul><ul><ul><ul><li>sites-enabled/: sitios habilitados. Son softlinks a sitios disponibles (sites-available/*) </li></ul></ul></ul>
  26. 26. Software (paquetes ubuntu) <ul><li>apt-cache search apache| grep -i apache </li></ul><ul><ul><li>Autenticación/Autorización: mysql, postgresql, radius, shadow, pam, ldap, kerberos, webauth,... </li></ul></ul><ul><ul><li>Lenguajes: php, perl, python, Tomcat servlets, asp, mono, ruby, fast cgi, scgi </li></ul></ul><ul><ul><li>Herramientas: </li></ul></ul><ul><ul><ul><li>Monitorización y benchmarking, Gestión de logs. </li></ul></ul></ul><ul><ul><ul><li>Seguridad, ej. limitación de conexiones y/o tráfico, chroot, filtrado avanzado, DNSBL, Oasis saml, AppArmor,... </li></ul></ul></ul><ul><ul><li>Extensiones: FrontPage, streaming, macros, virtual hosts, xml, xslt, GeoIP, bittorrent,... </li></ul></ul><ul><ul><li>Plataformas externas, ej. Subversion, request-tracker, gforge, sope,... </li></ul></ul><ul><ul><li>Librerías: libapr1 (apache portable runtime library), libapreq2 (apache request library) </li></ul></ul>
  27. 27. Referencias <ul><li>Principales: </li></ul><ul><ul><li>http://httpd.apache.org </li></ul></ul><ul><ul><li>http://httpd.apache.org/docs/2.2/ </li></ul></ul><ul><li>Refs. seguridad: </li></ul><ul><ul><li>http://httpd.apache.org/docs/2.2/misc/security_tips.html </li></ul></ul><ul><ul><li>http://www.modsecurity.org/ </li></ul></ul><ul><ul><li>http://www.slideshare.net/abhishek_singh/web-intrusion-detection </li></ul></ul><ul><ul><li>http://www.slideshare.net/ozh/apache-and-php-security </li></ul></ul><ul><ul><li>http://gallir.wordpress.com/2008/03/16/protegete-de-los-bots-agresivos/ </li></ul></ul><ul><li>Refs. rendimiento: </li></ul><ul><ul><li>http://httpd.apache.org/docs/2.2/misc/perf-tuning.html </li></ul></ul><ul><ul><li>http://highscalability.com/tags/apache </li></ul></ul><ul><ul><li>http://www.ibm.com/developerworks/linux/library/l-tune-lamp-1/ </li></ul></ul><ul><ul><li>http://www.xtec.net/~acastan/textos/Tuning%20LAMP.pdf </li></ul></ul><ul><ul><li>http://www.slideshare.net/loretahur/escalabilidad-apache-y-mysql/ </li></ul></ul>
  28. 28. Licencia de uso <ul><ul><li>http://creativecommons.org/licenses/by-sa/3.0/ </li></ul></ul>

×