Etiqueta: apache

  • Instalar Drupal en servidor LAMP

    Este artículo proporciona todos los pasos realizados para instalar Drupal 6 en un equipo Ubuntu. Algunos paquetes no son imprescindibles o pueden sustituirse por otros, pero  con ellos y siguiendo estos pasos se pone en marcha una instalación Drupal.

    Paquetes necesarios

    En primer lugar se instalan los siguientes paquetes:

    sudo apt-get install apache2
    sudo apt-get install mysql-server
    sudo apt-get install php5
    sudo apt-get install php-pear
    sudo apt-get install php5-mysql
    sudo apt-get install phpmyadmin

    Durante la instalación de phpmyadmin hay que seleccionar la configuración automática para su uso con Apache.

    Descargar desde http://drupal.org/project/l10n_install la versión de Drupal 6 con opciones de localización (selección de idioma), hay que elegir la descarga core.

    Configuración de DNS

    En cualquier caso, si se desea tener un sitio concreto para Drupal y no se dispone de un servidor DNS, se debe instalar BIND (el mejor servidor DNS).

    sudo apt-get install bind9

    Pero si se instala un servidor de DNS local, antes de continuar se debe configurar el sistema para utilizarlo en primer lugar. Si se utiliza una configuración estática de red, bastaría con editar el fichero /etc/resolv.conf y añadir en la primera línea lo siguiente:

    nameserver 127.0.0.1

    Si nuestra configuración de red se obtiene por DHCP habrá que modificar la configuración del servidor DHCP para que en primer lugar proporcione la dirección de nuestro equipo. Si no se puede cambiar la configuración del servidor DHCP, o no se desea hacerlo, se puede seguir lo indicado en el artículo Configuración de un servidor DNS distinto al proporcionado por DHCP.

    La configuración del sitio dentro de BIND puede ser bastante sencilla si es suficiente con utilizar nombres como drupal6.localhost. En este caso bastará con añadir al final de /etc/bind/db.local la siguiente línea:

    drupal6 IN    CNAME   localhost.

    Atención al punto al final de la línea, no es un fin de párrafo que se haya colado, hay que ponerlo. Para configuraciones más complejas se puede seguir lo indicado en Configurar servidor DNS BIND con vistas. Es posible que también un día explique como lo tengo yo montado.

    Una vez guardado el cambio se recarga la configuración de BIND y se comprueba que todo funciona:

    sudo service bind9 reload
    ping drupal6.localhost

    Configuración de Apache

    Tras la instalación inicial de Apache el inicio del servicio proporciona el aviso siguiente:

    apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

    Para resolver este aviso, sin importancia de todas formas, se añade al fichero /etc/apache2/httpd.conf la siguiente línea:

    ServerName localhost

    Ahora se recarga la configuración de Apache y se comprueba que el aviso ha desaparecido:

    sudo service apache2 reload

    También es recomendable habilitar el módulo rewrite de Apache, que permitirá utilizar unas direcciones más prácticas para los distintos recursos del sitio Drupal.

    sudo a2enmod rewrite
    sudo service apache2 restart

    Finalmente, se necesita configurar Apache para que proporcione un contenido específico para el sitio creado, ya que, por el momento, http://localhost/ y http://drupal6.localhost/ corresponden a un mismo sitio en Apache.

    Para hacer las cosas bien se debe crear en /etc/apache2/sites-available un fichero llamado drupal6.localhost con un contenido como el siguiente, suponiendo que los ficheros de Drupal 6 se situarán en /var/www/drupal6:

    <VirtualHost *:80>
      ServerAdmin direccion@email.mia
      DocumentRoot /var/www/drupal6
    
      ServerName drupal6.localhost
      ServerAlias alias.drupal6.localhost
    
      ErrorLog /var/log/apache2/drupal6.localhost-error.log
      AccessLog /var/log/apache2/drupal6.localhost-access.log
    
      <Directory "/var/www/drupal6/">
        php_admin_value memory_limit 512M
        php_admin_value post_max_size 16M
        php_admin_value upload_max_filesize 16M
      </Directory>
    </VirtualHost>

    Tras crear el fichero /etc/apache2/sites-available/drupal6.localhost se debe habilitar su uso creando un enlace simbólico hacia él en /etc/apache2/sites-enabled y recargar la configuración para hacerla efectiva:

    cd /etc/apache2/sites-enabled
    sudo ln -s ../sites-available/drupal6.localhost 001-drupal6
    sudo service apache2 reload

    Configuración de MySQL

    En este momento, Apache está configurado y el sitio http://drupal6.localhost/phpmyadmin está disponible, desde allí, utilizando el usuario root y la contraseña introducida durante la instalación de MySQL, se accede al apartado Privlegios y se crea el usuario drupal6, especificando únicamente la contraseña y la opción para crear una base de datos del mismo nombre sobre la que el usuario tendrá todos los privilegios.

    Instalación de Drupal

    Hay que situar en el directorio /var/www/drupal6 indicado en la configuración de Apache, el contenido del fichero comprimido de Drupal 6.

    En /var/www sólo root tiene permisos de escritura, por lo que es conveniente hacer algo como lo siguiente que nos permita situar allí los ficheros de Drupal con nuestro usuario como propietario, para facilitar las posteriores tareas de mantenimiento:

    cd /var/www
    sudo mkdir drupal
    sudo chown <nuestro_usuario> drupal
    cd drupal
    tar xzvf /<ruta del directorio>/l10n_install-6.x-1.0-beta4-core.tar.gz
    cd ..
    sudo ln -s drupal/drupal-6.22 drupal6

    Ahora ya se puede acceder al sitio Drupal mediante la dirección http://drupal6.localhost/ y comenzar con la instalación de Drupal, para ello se debe conceder permiso de escritura a Apache sobre el directorio sites/default y sobre el fichero sites/default/settings.php, que debe ser una copia del ya existente sites/default/default.settings.php, esto se puede conseguir otorgando permisos de escritura para el grupo otros sobre este directorio y este fichero:

    cd /var/www/drupal6/sites/default
    cp default.settings.php settings.php
    chmod o+w settings.php
    chmod o+w .

    Una vez seleccionado el idioma de la instalación, introducidos los datos de la base de datos y del sitio web a crear, se deben restaurar los permisos originales sobre sites/default y sites/default/settings.php para evitar riesgos de seguridad.

    cd /var/www/drupal6/sites/default
    chmod o-w settings.php
    chmod o-w .

    Configuración de Drupal

    La siguiente tarea es ponerse a trabajar ya sobre el sitio Drupal creado. Para ello lo más habitual es comenzar a habilitar módulos instalados con Drupal pero aún no activos e instalar módulos y temas adicionales de terceros disponibles desde el sitio oficial de Drupal.

    Sin entrar en detalles, se exponen a continuación algunos módulos de Drupal a habilitar y otros adicionales a instalar. Esta selección no sirve a ningún propósito concreto, es simplemente un conjunto de módulos que aportan ciertas funciones que no entraré a detallar. Puede haber mejores opciones y, desde luego, no serán todos los indicados para cualquier usuario. Lo que sí será cierto para todos es que se deben crear los directorios sites/all/modules y sites/all/themes, y descomprimir allí los módulos y temas respectivamente que se descarguen.

    Módulos core habilitados:

    • Blog
    • Contact
    • Forum
    • Search
    • Statistics
    • Upload

    Módulos adicionales instalados:

  • Apache con certificado emitido por CA propia

    En el artículo Apache con SSL se indican los pasos para crear un certificado y utilizarlo para habilitar el acceso cifrado por HTTPS al servidor Apache. El único inconveniente es que el usuario del contenido cifrado recibirá en su navegador una advertencia ya que el certificado no ha sido emitido por ninguna autoridad de certificación (CA) y, por tanto, no hay forma de verificar la autenticidad del sitio web.

    Si se ha comprado el certificado a una autoridad de certificación, entonces el resto del contenido del artículo es igualmente válido y la CA garantizará la validez del certificado.

    Si no se desea comprar un certificado se puede crear una CA propia para un entorno determinado siguiendo los siguientes pasos.

    Creación de una autoridad de certificación (CA) raíz

    En primer lugar se crea un directorio para todos los ficheros relacionados con la CA:

    $ mkdir ~/ACME-CA

    Se comprobará que el fichero /etc/ssl/openssl.cnf tiene en la variable dir el directorio creado.

    A continuación se crea un certificado autofirmado para la CA. Para el nombre común (CN) se recomienda indicar algo como «Certificado raíz ACME».

    $ openssl req -config /etc/ssl/openssl.cnf -new -x509 -keyout newreq.pem \
    -out newreq.pem -days 365

    Si durante la creación del certificado se recibe el error «unable to write ‘random state’» puede que previamente se haya intentado ejecutar openssl como root y el fichero ~/.rnd no permita la escritura al usuario que ejecuta openssl. Si es así bastará con hacer propietario al usuario correspondiente.

    Una vez ejecutada la orden se tendrán en el fichero newreq.pem la clave privada (parte RSA PRIVATE KEY) y el certificado (parte CERTIFICATE). Cada una de estas partes se guardará en un fichero distinto, la clave en ~/ACME-CA/private/cakey.pem y el certificado en ~/ACME-CA/cacert.pem. A continuación se puede eliminar newreq.pem.

    Instalación del certificado de la CA raíz como certificado raíz de confianza

    Se puede proporcionar acceso al certificado raíz publicándolo en http://sitio.tld/ssl/cacert.crt para que cualquier visitante pueda instalarlo en su navegador. Hay que tener en cuenta que si alguien presenta una web falsa, en lugar de la legítima, también podría proporcionar su propio certificado raíz falso desde dicha web.

    El fichero a publicar debe contener exclusivamente el certificado, éste se obtiene así:

    $ openssl x509 -in cacert.pem -out cacert.crt

    Una vez disponible el certificado, un usuario podrá descargarlo e importarlo en la lista de certificados raíz de CA de confianza.

    Preparación de la CA raíz

    Antes de crear el certificado que se utilizará para el cifrado hay que comprobar que se disponga en ~/ACME-CA de los siguientes directorios

    newcerts
    private

    y de los siguientes ficheros

    index.txt
    serial

    El fichero index.txt deberá estar vacío y el serial contener únicamente la cadena «01», sin las comillas, como siempre.

    Creación del certificado del sitio

    Ahora ya se puede crear un certificado emitido por la CA raíz propia y que será considerado válido por cualquier navegador que confíe en dicha CA raíz. Para ello se genera una clave privada y una solicitud de certificado en el fichero newreq.pem:

    $ openssl req -config /etc/ssl/openssl.cnf -new -keyout newreq.pem \
    -out newreq.pem -days 365

    En este paso hay que proporcionar el nombre del sitio web (dominio sin protocolo ni directorios) para el que se genera el certificado en el campo «Nombre común» (CN), de lo contrario, los navegadores que accedan al sitio detectarán que el certificado no ha sido emitido para dicho sitio, aunque provenga de una CA raíz de confianza. Si lo que se desea es cifrar emails habrá que indicar la dirección de correo electrónico como nombre común.

    Ahora se firma la solicitud con el certificado de la CA y se crea el certificado para el sitio. Habrá que proporcionar la clave del certificado cacert.pem.

    
    
    
    $ openssl ca -config /etc/ssl/openssl.cnf -policy policy_anything \
    -out newcert.pem -infiles newreq.pem


    Esta orden provocará la creación del certificado en el fichero newcert.pem y en el directorio newcerts con el nombre xx.pem, donde xx será el número indicado en el fichero serial. La clave privada se guarda en newreq.pem. Los ficheros serial e index.txt también son actualizados para reflejar la creación del certificado.

    Instalación del certificado y la clave en Apache

    Este paso ya corresponde con lo explicado en el artículo Apache con SSL, salvo que en esta ocasión se proporciona un fichero para la clave y otro para el certificado en vez de proporcionar ambos en un mismo fichero.

    La clave utilizada por Apache no debe estar protegida por clave, por lo que hay que obtener una versión no segura de la calve generada:

    $ openssl rsa -in newreq.pem -out wwwCLAVE-NO-SEGURA.pem

    Este fichero deberá estar de alguna forma protegido contra accesos no deseados.

    Ahora se copian los ficheros newcert.pem y wwwCLAVE-NO-SEGURA.pem a alguna ruta accesible por Apache y se configura para utilizarlos en el fichero de configuración de Apache correspondiente:

    
    
    
    # Server Certificate:
    # Point SSLCertificateFile at a PEM encoded certificate. If
    # the certificate is encrypted, then you will be prompted for a
    # pass phrase. Note that a kill -HUP will prompt again. A test
    # certificate can be generated with `make certificate' under
    # built time.
    #SSLCertificateFile conf/ssl/ca.crt
    SSLCertificateFile sitio.tld.cert.pem
    # Server Private Key:
    # If the key is not combined with the certificate, use this
    # directive to point at the key file.
    #SSLCertificateKeyFile conf/ssl/ca.key.unsecure
    SSLCertificateKeyFile wwwCLAVE-NO-SEGURA.pem


    Un reinicio del servidor Apache y los navegadores que visiten el sitio detectarán que el certificado ha sido emitido por la CA raíz creada y, si confían en ella, admitirán el certificado como válido sin advertir al usuario sobre posibles riesgos.

    $ sudo service apache2 restart

    o

    $ sudo /etc/init.d/apache2 restart

    Si el servidor Apache falla al reiniciar puede que se deba a que no localiza el fichero de clave o el de certificado. Habrá que comprobar si la ruta proporcionada es válida y, si lo es, el contenido de los ficheros.

    Referencias

    SSL Certificates HOWTO

  • Apache con SSL

    Para habilitar HTTPS sobre una instalación de Apache 2.2 hay, en primer lugar, que obtener los paquetes que proporcionan la S, que son openssl y ssl-cert.

    # apt-get install openssl ssl-cert

    A continuación se ejecuta la siguiente orden que pedirá los datos que deben introducirse en el certificado y generará éste. Para el valor nombre se espera que se proporcione la dirección del sitio (sin la cabecera de protocolo, sólo el nombre del dominio):

    # openssl req $@ -new -x509 -days 365 -nodes -out /etc/apache2/ssl-cert/sitio.apache.pem -keyout /etc/apache2/ssl-cert/sitio.apache.pem

    Es conveniente restringir el acceso al contenido del fichero, ya que contiene la clave privada que se utilizará para el cifrado.

    # chmod 600 /etc/apache2/ssl-cert/sitio.apache.pem

    A continuación se configura Apache para el uso de SSL con el certificado generado. Pata ello lo primero es revisar el contenido de /etc/apache2/ports.conf para comprobar que Apache incluye el puerto 443 entre sus puertos de escucha.

    Listen 443

    Habilitar el módulo ssl

    # a2enmod ssl

    Si sólo se quiere aplicar a ciertos sitios se crea un VirtualHost para el puerto seguro

    <VirtualHost sitio:443>

    incluyendo lo siguiente dentro de la sección VirtualHost

    SSLEngine on
    SSLCertificateFile /etc/apache2/ssl-cert/sitio.apache.pem

    Si además sólo se quiere permitir el acceso por HTTPS se crea el sitio virtual para HTTP y se redirige al correcto mediante uno de los siguientes métodos:

    <VirtualHost sitio:80># Método 1
    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

    # Método 2
    #    RewriteEngine On
    #    RewriteCond %{SERVER_PORT} !^443$
    #    RewriteRule ^/(.*) https://%{SERVER_NAME}/$1 [L,R]
    </VirtualHost>

    Ahora se reinicia Apache

    # /etc/init.d/apache2 restart

    Si falla la redirección y en el reinicio de Apache da un error

    Could not reliably determine the server’s fully qualified domain name

    habrá que proporcionar el nombre del servidor en la sección principal de la configuración (httpd.conf)

    Servername    nombre.servidor.tld

    Referencias:

    • http://www.debianadmin.com/install-and-configure-apache2-with-php5-and-ssl-support-in-debian-etch.html
    • http://albertoliva.com/index.php/2007/01/24/redirigir-el-puerto-http-al-https-en-apache/