Ir al contenido
Otras versiones

Cargando…

Configuración de Apache HTTPS Reverse-Proxy

Exponer OpenKM directamente desde Tomcat puede ser peligroso si necesita que la aplicación sea accesible desde Internet (por ejemplo https://issues.jboss.org/browse/JBAS-3861). Como resultado, podría ser infectada por PerlBot. Además, el puerto 8080 puede estar bloqueado por un cortafuegos. Por estos motivos, es una buena práctica exponer su instalación de OpenKM a través del puerto web estándar 80. En los siguientes pasos explicamos cómo configurar Apache para gestionar estas peticiones y reenviarlas al servidor de aplicaciones Tomcat mediante el protocolo AJP13.

De la documentación de Apache: el protocolo AJP13 está orientado a paquetes. Presumiblemente se eligió un formato binario en lugar del texto plano, más legible, por razones de rendimiento. El servidor web se comunica con el contenedor de servlets mediante conexiones TCP. Para reducir el costoso proceso de creación de sockets, el servidor web intentará mantener conexiones TCP persistentes con el contenedor de servlets y reutilizar una conexión para múltiples ciclos de petición/respuesta.

Su OpenKM puede accederse desde dos zonas distintas: Internet y LAN. Esto significa que, para acceder a este servidor, necesita utilizar dos IP: la IP externa (Internet) y la IP interna (LAN).

La dirección IP interna (también conocida como “dirección IP local”) es la que asigna el router de su red local y que a menudo empieza por 192.168.x.x. Estas direcciones IP solo pueden ser vistas por otros equipos de su red local (LAN) y no por ningún equipo conectado a una red externa como Internet.

Para llegar a Internet o a un equipo de otra red, a su equipo se le suele asignar una dirección IP externa, que puede utilizarse después para referirse al equipo de su red local.

En la imagen anterior hay tres equipos en la red local a cada uno de los cuales el router ha asignado su propia dirección IP interna. El ISP está conectado al router y le proporciona una dirección IP externa que le permite comunicarse con Internet. En Internet todos ven su dirección IP externa, pero cualquier información que llega al router se “convierte” de la dirección IP externa a la dirección IP interna.

Así, si desea que su instalación de OpenKM sea accesible tanto desde la LAN como desde Internet, el truco consiste en configurar los equipos cliente para que resuelvan su IP interna (192.168.0.50) si están dentro de la LAN o la IP externa si están en Internet. Para resolver la IP de Internet (67.166.214.148), su equipo utiliza el DNS público. Por tanto, necesita configurar una especie de servidor DNS dentro de la LAN o modificar el archivo host de cada cliente para que resuelva a la IP interna.

El primer paso es instalar el software Apache necesario. En Debian / Ubuntu puede instalar Apache con un solo comando:

Ventana de terminal
$ sudo apt-get install apache2

Edite el archivo llamado /etc/apache2/apache2.conf y configure un ServerName para evitar advertencias en el proceso de arranque de Apache:

Ventana de terminal
$ vim /etc/apache2/apache2.conf
ServerRoot "/etc/apache2"
ServerName "your-domain.com"

Habilite el módulo proxy:

Ventana de terminal
$ sudo a2enmod proxy_ajp

Cree los certificados

Ventana de terminal
$ sudo mkdir /etc/apache2/ssl
$ sudo /usr/sbin/make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/apache2/ssl/apache.pem
$ sudo a2enmod ssl

Asegúrese de que el puerto 443 está configurado para escuchar en /etc/apache2/ports.conf:

Ventana de terminal
$ cat /etc/apache2/ports.conf | grep Listen

 Cree el archivo de configuración /etc/apache2/sites-available/openkm.conf con este contenido:  

Ventana de terminal
$ vim /etc/apache2/sites-available/openkm.conf
<VirtualHost *:443>
ServerName openkm.your-domain.com
RedirectMatch ^/$ /OpenKM
ProxyPass /OpenKM ajp://127.0.0.1:8009/OpenKM
ProxyPassReverse /OpenKM https://openkm.your-domain.com/OpenKM
ErrorLog /var/log/apache2/openkm.your-domain.com-error.log
CustomLog /var/log/apache2/openkm.your-domain.com-access.log combined
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/apache.pem
</VirtualHost>

El ServerName del VirtualHost debe ser distinto del ServerName de la configuración principal de Apache. Habilite esta configuración de sitio:

Ventana de terminal
$ cd /etc/apache2/sites-available/
$ sudo a2ensite openkm.conf

Edite el archivo de configuración /etc/apache2/sites-available/openkm.conf y añada este contenido

Ventana de terminal
$ vim /etc/apache2/sites-available/openkm.conf
<VirtualHost *:80>
ServerName openkm.your-domain.com
Redirect permanent / https://openkm.your-domain.com/
</VirtualHost>

Reinicie Apache:

Ventana de terminal
$ sudo /etc/init.d/apache2 restart

Compruebe el acceso a su instalación de OpenKM desde https://openkm.your-domain.com/.

Utilice el gestor de aplicaciones yum para instalar Apache:

Ventana de terminal
$ sudo yum install httpd

Habilítelo en el arranque:

Ventana de terminal
$ sudo chkconfig httpd --level 2345 on

Cree el certificado

Ventana de terminal
$ sudo yum install mod_ssl openssl crypto-utils

Genere las claves privadas ( para más información visite Apache HTTP Secure Server Configuration)

Ventana de terminal
$ genkey your-domain.com

Durante el proceso se generarán dos archivos en:

ReplaceSSLCertificateFile /etc/pki/tls/certs/your-domain.com.cert
SSLCertificateKeyFile /etc/pki/tls/private/your-domain.com.key

Ahora cree el archivo /etc/httpd/conf.d/openkm.conf con este contenido:

Ventana de terminal
$ vim /etc/httpd/conf.d/openkm.conf
<VirtualHost *:443>
ServerName openkm.your-domain.com
ProxyPass / ajp://localhost:8009/OpenKM/
ProxyPassReverse / http://your-domain.com/OpenKM/
ErrorLog /var/log/your-domain.com-error.log
CustomLog /var/log/your-domain.com-access.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/your-domain.com.cert
SSLCertificateKeyFile /etc/pki/tls/private/your-domain.com.key
</VirtualHost>

Por último, debe modificar los valores SSLCertificateFile y SSLCertificateKeyFile del archivo /etc/httpd/conf.d/ssl.conf:

Ventana de terminal
$ vim /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/your-domain.com.cert
SSLCertificateKeyFile /etc/pki/tls/private/your-domain.com.key

Reinicie Apache:

Ventana de terminal
$ sudo /etc/init.d/httpd restart

Compruebe el acceso a su instalación de OpenKM desde https://openkm.your-domain.com/.

Error Permission denied: proxy: AJP: attempt to connect

Sección titulada «Error Permission denied: proxy: AJP: attempt to connect»

Si en el registro aparece un error como Permission denied: proxy: AJP: attempt to connect, para solucionarlo ejecute el siguiente comando:

Ventana de terminal
$ /usr/sbin/setsebool httpd_can_network_connect 1

Si funciona, haga la configuración permanente para que persista tras los reinicios:

Ventana de terminal
$ /usr/sbin/setsebool -P httpd_can_network_connect 1

Si ve un error como:

Debe habilitar este módulo de Apache:  

Ventana de terminal
$ sudo a2enmod rewrite
$ sudo a2enmod proxy_http
$ sudo a2enmod headers