Inicio | Gestión Documental ( Alfresco ) | Alfresco, Apache Proxy y Mod Security

Alfresco, Apache Proxy y Mod Security

Jueves, 30 de Junio de 2011 14:25

Una buena manera de publicar nuestro Alfresco al exterior, es utilizar el potencial del servidor Apache con el mod_proxy instalado, ya que al mismo tiempo podemos usar el ya citado mod_security para proteger adicionalmente nuestro Alfresco.

Para conocer los pormenores de la instalación de modSecurity puedes consultar mi otro artículo: "instalación de mod_security"

Hay dos formas de configurar el proxy: una usando el protocolo HTTP, la cual descartaremos, porque actualmente disponemos del protocolo AJP diseñado específicamente para facilitar la comunicación entre Apache y Tomcat.

Para activar mod proxy, y en particular mod ajp debemos hacer un:

  a2enmod proxy
a2enmod proxy_http
a2enmod proxy_ajp

Si vamos a recurir a mod_rewrite, debemos activar también:

a2enmod rewrite

Si recordamos, durante la instalación de nuestro Alfresco, desde la opción de instalación avanzada se nos preguntaba por el puerto AJP de Tomcat, pues el valor allí indicado nos será de gran utilidad para nuestro propósito.

En cualquier caso si consultamos:

/opt/alfresco-3.4.d/tomcat/conf/server.xml

Veremos la configuración de AJP de Tomcat:

   <!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Una vez comprobado que dicho puerto es el estandard simplemente hay que crear un nuevo host virtual en la ruta

/etc/apache2/sites-enabled

Dentro de este archivo hay que introducir la siguiente estructura y directivas:

  <VirtualHost *:80>
ServerName docs.midominio.com
ProxyPreserveHost On
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /alfresco ajp://localhost:8009/alfresco
ProxyPassReverse /alfresco ajp://localhost:8009/alfresco
ProxyPass /share ajp://localhost:8009/share
ProxyPassReverse /share ajp://localhost:8009/share
ErrorLog /var/log/apache2/alfresco-error.log
CustomLog /var/log/apache2/alfresco-access.log common
</VirtualHost>

Este tipo de configuración nos permitirá el acceso a nuestro Alfresco usando:

  http://docs.midominio.com/share
http://docs.midominio.com/alfresco

Sin embargo si queremos acceder directamente a los distintos sitios de alfresco podemos crear un subdominio para cada sitio y usar mod_rewrite:

  <VirtualHost *:80>
ServerName share.midominio.com
ProxyPreserveHost On
ProxyRequests Off
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
ProxyPass /share ajp://localhost:8009/share
ProxyPassReverse /share ajp://localhost:8009/share
RewriteEngine On
RewriteRule ^/$ "http://share.midominio.com/share/" [R=302,L]
ErrorLog /var/log/apache2/share-error.log
CustomLog /var/log/apache2/share-access.log common
</VirtualHost>

De esta manera cuando hagamos un:

http://share.midominio.com

Se reescribe a http://share.midominio.com/share, por lo que le ahorramos al usuario teclear “share”

Alfresco detrás de Mod_proxy y Mod_security

Una posibilidad a tener en cuenta si trabajamos con Apache, es instalar el mod_security, el proceso completo se describe ya en otro artículo, por lo que me centro en las particularidades.
Para hacer funcionar Alfresco detras del Security es necesario recurrir a ciertas exclusiones en la reglas de filtrado esto lo hacemos así:

Estamos usando la versión 2.6.0 del OWASP ModSecurity debemos excluir las siguientes reglas:

 <Proxy *>
SecRuleRemoveById 981184
SecRuleRemoveById 981143
SecRuleRemoveById 981060
SecRuleRemoveById 960010
SecRuleRemoveById 960015
SecRuleRemoveById 960032
</Proxy>

Y si estamos usando una versión antigua, debemos excluir las siguientes:

 <Proxy *>
SecRuleRemoveById 960015
SecRuleRemoveById 960010
</Proxy>

Sin estas exclusiones algunas funciones relacionadas con ciertas ventanas emergentes no funcionan.

De todas formas si detectamos errores con Alfresco tras activar Mod Security basta realizar una consulta a ErrorLog para ver posibles alertas de mod security, del estilo:
[Thu Jun 30 13:43:18 2011] [error] [client 212.51.44.50] ModSecurity: Warning. Match of "eq 1" against "&ARGS:CSRF_TOKEN" required. 
[file "/etc/apache2/modsecurity-crs/2.2.0/optional_rules/modsecurity_crs_43_csrf_protection.con
f"] [line "31"] [id "981143"] [msg "CSRF Attack Detected - Missing CSRF Token."] [hostname "docs.midominio.com"]
[uri "/share/proxy/alfresco/slingshot/doclib/doclist/all/site/x/documentLibrary/"] [unique_id "TgxhVn8AAAEAADn6HnAAAAAG"]

Otro punto interesante a revisar son la directivas: SecDataDir, SecUploadDir, SecTmpDir relacionadas con la configuración del mod security a nivel del archivo de configuración del Apache, deben ser correctamente definidas:

  SecDataDir  /tmp/
SecUploadDir /tmp/
SecTmpDir /tmp/

Ya que de otra forma la subida de archivos al servidor y en general la creación de temporales fallará.

De forma similar, hay que prestar atención a posibles configuraciones de los atributos SecRequestBodyLimit, SecRequestBodyInMemoryLimit, SecResponseBodyLimit que se suelen definir en el archivo apache2.conf. Estos limites se van a comportar como cuotas a la hora de subir documentos a Alfresco.

aloxa.eu x-rite gestiondecolor.es