Servidores Web e Servidores de Aplicacións
Servidores de Aplicacións
Os servidores de aplicacións proporcionan un marco de traballo integrado para a realización de aplicacións web no que o servidor se encarga de procesos comúns como a xestión do acceso ás bases de datos ou o soporte de configuracións de alta dispoñibilidade permitindo ao programador de aplicacións centrarse na lóxica da mesma.
Os servidores de aplicacións manteñen ademáis un entorno de execución de aplicación, común as peticións de todos os clientes, de xeito que é simple compartir información entre estos, e impoñen unha estructura de aplicación que fai relativamente simple a separación entre a lóxica e a presentación da aplicación.
Os servidores de aplicacións máis empregados hoxe en día son os basados en JAVA como Apache Tomcat ou en .NET como o IIS. Neste documento podes ver como configurar e instalar Tomcat como servidor de JSP e Servlets.
Servidores Web
A misión dos servidores Web e cargar e enviarlle aos clientes os documentos solicitados. Para que o servidor dispoña de capacidade de proceso é necesario engadirlle os módulos correspondentes as tecnoloxías a empregar: SSI, CGI ou as linguaxes de scripting desexadas, como PHP.
Os servidor web máis utilizado no mundo con moita diferencia é o Apache Web Server, seguido polo Microsoft IIS.
Apache Web Server
Apache é a base do que se coñece por entornos LAMP, formados polo Sistema Operativo Linux, o Servidor Web Apache, a Linguaxe de Scripting PHP e o Xestor de Bases de Datos MySQL de uso xeral na Web.
Estructura do Apache
En Debian o apache almacena a súa configuración en /etc/apache2, co seguinte formato:
- apache2.conf
- Almacena a configuración do servidor (en outras distribucións chámase httpd.conf) incluindo ficheiros que se atopan en outros lugares. Debian trocea o ficheiro en varias carpetas para facilitar a xestión, aínda que ao final a configuración global residirá neste ficheiro.
- envvars
- Conten variables de entorno relativas ao funcionamento do servidor web.
- magic
- Almacena bytes de identificación de varios tipos de arquivo.
- ports
- Configura os portos dende o que Apache servirá as páxinas
- conf.d
- Neste directorio se configuran os permisos de acceso do servidor a diversos sitios.
- mods-available
- Neste directorio atópanse os módulos Apache instalados no sistema. Para activalos, é necesario crear un enlace aquí dende a carpeta mods-enabled
- mods-enabled
- Este directorio contén enlaces aos módulos de mods-available que se atopan activos.
- sites-available
- Este directorio almacena a configuración dos sitios web virtuais configurados. Para activalos é necesario crear un enlace aquí dende a carpeta sites-enabled
- sites-enabled
- Este directorio conten enlaces aos sitios web de sites-available que se atopan activos.
Servidores Virtuais
O protocolo http indica na cabeceira da petición o nome do servidor web ao que se lle realiza a solicitude. Esto o aproveitan os servidores web para seleccionar cal dos sitios que albergan deben servir, o que posibilita que un único servidor cunha única dirección IP poda atender varios sitios web ao mesmo tempo coñecidos como Sitios Virtuais.
En Apache a configuración dos sitios virtuais realízase mediante a directiva VirtualHost. Vexamos un exemplo de creación dun sitio virtual chamado www.virtualhost.com.
- En primeiro lugar debemos crear un ficheiro en /etc/apache2/sites-available coa configuración do sitio. Podemos chamalo, por exemplo, www.virtualhost.com
<VirtualHost *:80>
ServerName www.virtualhost.com
DocumentRoot /var/sites/virtualhost
</VirtualHost>
- Esto indica que o servidor virtual aceptará conexións en todas as IP da máquina (*), no porto 80. Que o servidor atenderá ás peticións de www.virtualhost.com e que os documentos están situados na carpeta /var/sites/virtualhost.
- Logo debemos activar o sitio, e decir, crear un enlace dende /etc/apache2/sites-enabled. O faremos co script a2ensite:
a2ensite www.virtualhost.com
- Supoñendo que o ficheiro se chame www.virtualhost.com, que non ten por qué.
Configuracións de Seguridade
Alias, Directory, Location
Mediante Directory e Location facilitamos acceso a determiñadas carpetas ao servidor Web e configuramos os seus permisos de acceso. Directory indica o camiño no árbore de directorios do sistema ao directorio a configurar, mentras que Location indica o camiño dende o árbore do sitio web:
<Directory /var/lib/mywebapp>
....
</Directory>
<Location /documents>
....
</Location>
Para posibilitar o acceso a directorios que residen fora do árbore do sitio web é necesario empregar a directiva Alias. Por exemplo:
Alias /myapp /var/lib/mywebapp
Posibilitará o acceso dos clientes aos documentos situados en /var/lib/mywebapp poñendo /myapp detrás da URL do sitio.
Order, Allow, Deny
Unhas das directivas de seguridade máis importantes a nivel de permisos de acceso son Allow e Deny. Estas directivas se evalúan na orde especificada coa directiva Order.
- Si especificamos Order Allow,Deny, en primeiro lugar se procesarán todas as directivas Allow, si ningunha directiva Allow permite o acceso, o acceso se denega. Logo procesarán as directivas Deny, e si algunha o prohíbe se denegará o acceso.
- Si especificamos Order Deny,Allow, en primeiro lugar se procesarán todas as directivas Deny, si ningunha directiva Deny o impide se permite o acceso. Se non, se procesarán as directivas Allow si sigue sen coincidir ningunha entrada se denega o acceso.
O uso de Allow e Deny pode ser:
Allow/Deny from address
Allow/Deny from url
Allow/Deny from all
Options
Mediante Options se poden activar o desactivar certas características dentro do servidor web, do sitio virtual ou dun directorio, dependendo do lugar en que a situemos.
A sintaxe é:
Options [+|-]option [[+|-]option] ...
Options All
Options None
- Por defecto o valor é Options All.
Os valores a activar ou desactivar en Options son:
- All
- Activa todas as opcións salvo MultiViews.'E a opción por defecto
- ExecCGI
- Permite a execución de CGI.
- FollowSymLinks
- Permite seguir os enlaces simbólicos. Únicamente funciona no arquivo .htaccess ou dentro dun Directory
- Includes
- Permite a execución de Server Side Includes (SSI)
- IncludesNOEXEC
- Permite a execución de Server Side Includes (SSI) pero desactivando a execución de CGI e comandos externos.
- Indexes
- Permite a listaxe do contido dun directorio no cliente.
- MultiViews
- Activa a posibilidade de variar o contido enviado en función as características anunciadas polo navegador, como o idioma (Negociación do Contido).
- SymLinksIfOwnerMatch
- Permite seguir os enlaces simbólicos únicamente si o destiño é do mesmo propietario que a orixe.
Configuración de Seguridade a Nivel de Administrador de Sitio
O Administrador do servidor Web pode configurar os permisos otorgados sobre un sitio Web a varios niveis: A nivel de servidor completo (en conf.d ou apache2.conf), a nivel de host virtual (dentro do VirtualHost) ou a nivel de directorio (dentro de Directory ou Location). Sen embargo, en ocasións pode ser necesario que o Administrador dun sitio Web poda configurar a seguridade da súa aplicación sen posibilidade de alterar os demáis hosts virtuais. Esto pode conseguirse mediante o ficheiro .htaccess.
O ficheiro .htaccess conten directivas de permisos (Options) ou de autenticación que afectan á carpeta onde están situados. O Administrador do Servidor Web otorgará permiso para utilizar estas directivas mediante AllowOverride.
Autenticación
Apache implementa a autenticación e a autorización mediante módulos. Os principais módulos involucrados son:
- Tipos de Autenticación
- mod_auth_basic que proporciona autenticación básica, na que a password viaxa en claro, e mod_auth_digest no que a password viaxa cifrada con MD5. Os navegadores soportan na súa maioría a autenticación básica, mentras que a digest está menos soportada. A directiva a utilizar é AuthType.
- Proveedores de Autenticación
- Indican o modo en que se comproba a parella de usuario:contrasinal e se especifican coa directiva AuthBasicProvider ou AuthDigestProvider. Proveedores comúns son mod_authn_anon, mod_authn_dbd, mod_authn_dbm, mod_authn_file, mod_authnz_ldap.
- Módulos de Autorización
- Indican como se obteñen os permisos sobre os recursos e se especifican coa directiva Require. Módulos comúns son mod_athnz_ldap, mod_authz_dbm, mod_authz_groupfile, mod_authz_host, mod_authz_owner e mod_authz_user.
Normalmente, a autenticación e autorización se realizan nunha directiva Directory ou dentro do .htaccess da carpeta a protexer, nese caso necesitaremos permitir a sobreescritura do permiso AuthConfig: AllowOverride AuthConfig.
Necesitaremos un ficheiro cos usuarios e passwords. O formato e almacenamento de este arquivo depende do proveedor de autenticación elexido. Podemos utilizar por exemplo, mod_authn_file, que un ficheiro de texto xestionado coa utilidade htpasswd. Para crear o ficheiro de passwords:
htpasswd -c /etc/apache/security/mysite/passfile usuario
A configuración a incluír na sección Directory correspondente, ou no ficheiro .htaccess pode ser similar a esta:
AuthType Basic
AuthName "Sitio Restrinxido"
AuthBasicProvider file
AuthUserFile /etc/apache/security/mysite/passfile
Require valid-user
Na documentación de apache podes ver todas as posibilidades de configuración.
Outro método de autenticación dos clientes consiste no uso de certificados dixitais. O Servidor Web pode solicitarlle ao cliente o envío dun certificado de cliente válido para permitirlle acceder ao site ou a carpeta protexida. En este artigo podes ver como se realizaría a configuración do servidor Apache para este cometido.
Http Seguro
Https é a versión segura do protocolo Http. Non é un protocolo distinto de Http, se non que é a combinación de este último cun mecanismo de transporte SSL ou TLS co obxecto de garantir protección da comunicación cliente-servidor. Utilízase normalmente para comunicacións como transaccións bancarias e pago de bens e servizos. Este servizo utiliza normalmente o porto TCP 443 en lugar do 80 de uso habitual, e un prefixo https://, en lugar de http://.
A comunicación entre cliente e servidor se protexe mediante cifrado de chave pública, de xeito que non sexa posible a interceptación da información, ademáis de garantir a autenticidade do servidor co que se contacta. Esto se realiza mediante o módulo Apache ssl que proporciona soporte para SSL versións 2 e 3 e TLS versión 1.
O cifrado da información emprega cifrado de chave pública ou asimétrico. O servidor ten unha parella de chaves de cifrado: Unha chave privada, que se almacena en segredo, e unha chave pública, que se distribúe nun certificado de cifrado. A información cifrada con unha das chaves únicamente se pode descifrar coa outra. Esto garantiza que a información que envía o cliente únicamente pode ser descifrada polo servidor ao que vai dirixida, e viceversa.
Para habilitar un sitio web sobre https precisamos habilitar o módulo ssl e conseguir un certificado de servidor. O certificado de servidor é un certificado x509 que contén a chave pública do servidor e está firmado por unha autoridade de certificación que resulte fiable para o navegador.
As Autoridades de Certificación proporcionan firmas de certificados con varios niveis de seguridade (e de precio) según as comprobacións que realizan previamente ao firmado da solicitude de certificado. Os navegadores Web inclúen "de fábrica" as autoridades máis importantes, aínda que se botan de menos algunhas como a dirección xeral da policía española ou a FNMT. Todos os navegadores soportan a inclusión manual de novas autoridades de certificación.
As aplicacións Web tamén poden solicitarlle ao cliente que proporcione un certificado para concederlle o acceso ao sitio. Nese caso, o navegador cliente debe ter instalados os certificados de usuario precisos que serán enviados ao servidor. O servidor previa comprobación do certificado, aceptará ou rexeitará o acceso.
Podes ver como configurar o servidor Apache para https neste documento
Internet Information Services
IIS é o servidor proporcionado pola plataforma Windows Server, e proporciona un servidor de aplicacións .NET, xunto cun Servidor Web capaz de executar ASP e ampliable mediante módulos. Igual que o Apache, soporta servidores virtuais, configuración de seguridade a nivel de directorio, autenticación e http seguro.