Apache - Instalación Apache en Ubuntu


Índice:

   Proceso

      Actualizar el SO

      Instalar Apache2

      Configurar SSL / HTTPS

         Instalar y configurar usando CERBOT

         Activar el módulo ssl

      Configurar cortafuegos (UFW) - ¡¡ATENCIÓN!! No desactivar OpenSSH

         EN PRIMER LUGAR - 1º Comando a ejecutar

         Configuración

         Conjunto completo de comandos

         Comandos

      Configurar autorizaciones de acceso

         Crear el archivo de usuarios y contraseñas

         Usando el archivo de configuración principal

         Usando archivos .htaccess

         Directiva Require

         Políticas de acceso en Apache 2.4

      Crear un Alias

         Crear directorios y asignar permisos

         Configurar Apache para usar un Alias

         Ajustar configuración Alias

   DistrosDefaultLayout - Debian, Ubuntu (Apache httpd 2.x)

   Script,s de trabajo

   Comandos

   Documentación

      Enlaces


Proceso  ⮴  

Incluir al usuario en el grupo sudo si es necesario

      sudo su

      usermod -a -G sudo juanp

      groups juanp


El último comando se emplea para comprobar que está incluido.


Actualizar el SO  ⮴  

    sudo apt update       &&

    sudo apt upgrade -y   &&

    sudo apt autoremove


    # Reiniciar

    sudo reboot


Instalar Apache2  ⮴  

      sudo apt install apache2    


Configurar SSL / HTTPS  ⮴  

Instalar y configurar usando CERBOT  ⮴  

Usar CERBOT


Abrir los puertos en el firewall que Let’s Encrypt utiliza para validar la

propiedad del dominio. Al solicitar un certificado en lets-encrypt es nece-

sario que los puertos 80 y 443 de la IP externa apunten a la IP del equipo.


Si hubiera algún paquete de Certbot instalado utilizando un gestor de pa-

quetes del sistema operativo como apt, dnf o yum, hay que eliminarlo antes

de instalar el snap de Certbot.


Dominio: homebadajoz.ddns.net


      sudo snap install --classic certbot             &&

      sudo ln -s /snap/bin/certbot /usr/bin/certbot   &&   

      sudo certbot --apache                           &&

      sudo certbot renew --dry-run


      # Reiniciar Apache

      sudo service apache2 restart


Comprobar el funcionamiento del servidor


Activar el módulo ssl  ⮴  

CERBOT lo activa por lo que no sería necesario hacer nada.


Comprobar si está activado:

        a2query -m | grep ssl


Si no estuviera activado:

Apache SSL/TLS Encryption

(Ver: /usr/share/doc/apache2/REAME.Debian)

          sudo a2ensite default-ssl       &&

          sudo a2enmod ssl                &&

          sudo service apache2 restart


Configurar cortafuegos (UFW) - ¡¡ATENCIÓN!! No desactivar OpenSSH  ⮴  

Ver la guía de configuración de cortafuego (UFW).


Una vez configurado el modo HTTPS, se habilita exclusivamente el puerto 443

para el acceso al servidor.


La modificaciones pueden requerir reiniciar el sistema.


EN PRIMER LUGAR - 1º Comando a ejecutar  ⮴  

Asegurarse que el acceso por SSH (port. 22) está habilitado.

        sudo ufw allow 'OpenSSH'


Configuración  ⮴  

Una vez habilitada la regla OpenSSH, activar el cortafuegos y ver la re-

glas activas.


        sudo ufw enable             &&

        sudo ufw status -verbose


      Con la información que proporcione activar/desactivar las siguientes re-

      glas:


        -> Apache           Desactivar

        -> Apache Full      Desactivar

        -> Apache Secure    Activar


        sudo ufw allow 'Apache Secure'       &&

        sudo ufw delete allow 'Apache'       &&

        sudo ufw delete allow 'Apache Full'  &&

        sudo ufw status verbose


El resultado debería ser semejante a este


        Status: active

          To                                Action      From


          22/tcp      (OpenSSH)             ALLOW IN    Anywhere                  

          443/tcp     (Apache Secure)       ALLOW IN    Anywhere                  

          22/tcp      (OpenSSH (v6))        ALLOW IN    Anywhere (v6)             

          443/tcp     (Apache Secure (v6))  ALLOW IN    Anywhere (v6) 


Conjunto completo de comandos  ⮴  

      sudo ufw allow 'OpenSSH'             &&

      sudo ufw allow 'Apache Secure'       &&

      sudo ufw delete allow 'Apache'       &&

      sudo ufw delete allow 'Apache Full'  &&

      sudo ufw enable                      &&

      sudo ufw status verbose


Comandos  ⮴  

      man ufw

      sudo ufw status

      sudo ufw app list

      sudo ufw app info 'RULE'      

      sudo ufw status numbered

      sudo ufw status verbose    

      sudo ufw app list      

      sudo ufw enable

      sudo ufw disable

      sudo ufw reload      


Configurar autorizaciones de acceso  ⮴  

Apache - Autenticación y Autorización


Las directivas que se usan pueden ponerse ya sea en el fichero de configura-

ción principal del servidor (en la sección Directory), o en cada uno de

los ficheros de configuraciones (los archivos .htaccess) del propio directo-

rio.


Crear el archivo de usuarios y contraseñas  ⮴  

htpasswd - Manage user files for basic authentication


Crear el directorio donde se guardará el archivo de usuarios/contraseñas y

asignarle los permisos adecuados:


        sudo mkdir /etc/apache2/passwd        &&

        sudo chown 0 /etc/apache2/passwd      &&

        sudo chgrp 0 /etc/apache2/passwd      &&

        sudo chmod 775 /etc/apache2/passwd        


Crea el archivo y añade el usuario:


        htpasswd -c /etc/apache2/passwd/words user_1


Añade usuario al archivo existente:


        htpasswd /etc/apache2/passwd/words user_1


Asignar los permisos adecuados al archivo:

        sudo chown 0 /etc/apache2/passwd/words    &&

        sudo chgrp 0 /etc/apache2/passwd/words    &&

        sudo chmod 775 /etc/apache2/passwd/words        


Se puede usar el script pswd_users.sh


Usando el archivo de configuración principal  ⮴  

Si el directorio a proteger es:

        /var/www/html/docs


Incluir en la sección Directory del archivo de configuración la directiva:


Archivo: /etc/apache2/apache2.conf

          [Directory /var/www/html/docs>

            AuthType Basic

            AuthName "Restricted Files"

            AuthUserFile "/etc/apache2/passwd/words"

            Require valid-user

          [/Directory>


          Nota: sutituir [ por símbolo de menor y ] por el de mayor


Reiniciar el servidor


Ahora para acceder al directorio será necesario indicar uno de los usuarios

y contraseña incluido en el archivo /etc/apache2/passwd/words


Esta configuración se puede repetir para cada uno de los directorios que

se deseen proteger, el archivo de contraseñas puede ser diferente para ca-

da uno de ellos.



Usando archivos .htaccess  ⮴  

Si el directorio a proteger es:

        /var/www/html/docs


Incluir en la sección Directory del archivo de configuración la directiva:

        AllowOverride AuthConfig


Archivo: /etc/apache2/apache2.conf

          [Directory /var/www/html/docs>

            Options Indexes FollowSymLinks

            AllowOverride AuthConfig

            Require all granted

          [/Directory>


          Nota: sustituir [ por símbolo de menor y ] por el de mayor


Crear un archivo .htaccess en el directorio que se quiera proteger con:

        AuthType Basic

        AuthName "Private directory"

        AuthUserFile /etc/apache2/passwd/words

        Require valid-user


Reiniciar el servidor


Esta configuración se puede repetir para cada uno de los directorios que

se deseen proteger, el archivo de contraseñas puede ser diferente para ca-

da uno de ellos.


Directiva Require  ⮴  

Podemos controlar el acceso a cualquier recurso o conjunto de recurso, por

ejemplo usando una directiva Directory, con Requiere usando algunas de es-

tas opciones:


.- Require all granted: El acceso es permitido incondicionalmente.

.- Require all denied: El acceso es denegado incondicionalmente.

.- Require user userid [userid] ...: El acceso es permitido sólo si los

usuarios indicados se han autentificado.

.- Require group group-name [group-name] ...: El acceso es permitido sólo

a los grupos de usuarios especificados.

.- Require valid-user: El acceso es permitido a los usuarios válidos.

.- Require ip 10 172.20 192.168.2: El acceso es permitido si se hace des-

de el conjunto de direcciones especificadas.

.- Require host dominio: El acceso es permitido si se hace desde el domi-

nio especificado.

.- Require local: El acceso es permitido desde localhost.


Políticas de acceso en Apache 2.4  ⮴  

En la nueva versión el control de acceso se determinan con la directiva

Require, y las políticas de acceso la podemos indicar usando las directi-

vas:


.- RequireAll: Todas las condiciones dentro del bloque se deben cumplir

para obtener el acceso.

.- RequireAny: Al menos una de las condiciones en el bloque se debe

cumplir.

.- RequireNone: Ninguna de las condiciones se deben cumplir para permitir

el acceso.

        [Directory /dashboard>

          [RequireAny>

            Require ip 10.1

            Require group admins

          [/RequireAny>

        [/Directory>



Crear un Alias  ⮴  

Se va a crear un alias [/htdocs/] para acceder a /home/www/htdocs.


Crear directorios y asignar permisos  ⮴  

        sudo mkdir /home/www            &&

        sudo mkdir /home/www/htdocs     &&

        sudo chown 0 /home/www          &&

        sudo chgrp www-data /home/www   &&

        sudo chmod 775 /home/www


        sudo chown -R www-data /home/www/htdocs   &&

        sudo chgrp -R www-data /home/www/htdocs   &&

        sudo chmod 775 -R /home/www/htdocs


        # Para tener acceso con el usuario juanp 

        sudo usermod -a -G www-data juanp &&

        gropus juanp 


        # Resultado:

        drwxrwxr-x 3 root  www-data 4096 Apr  7 19:07 www

        drwxrwxr-x 2 www-data www-data 4096 Apr  7 19:17 htdocs

        -rwxrwxr-x 1 www-data www-data 157965 Apr  6 21:09 fz_300_macro.pdf        


Configurar Apache para usar un Alias  ⮴  

La configuración se hará en el virtual host definido en el fichero:

          /etc/apache2/sites-available/000-default-le-ssl.conf


También se puede hacer en fichero:

          /etc/apache2/apache2.conf


Las directivas a incluir serían:

          # 1 Alias configurada

          Alias "/htdocs/" "/home/www/htdocs/"

          [Directory "/home/www/htdocs">

            Require all granted

          [/Directory>


          Nota: sustituir [ por símbolo de menor y ] por el de mayor


Tras resetear o recargar apache ya estará disponible.

            sudo service apache2 reload

            sudo service apache2 restart


Ajustar configuración Alias  ⮴  

Un posible configuración para controlar el acceso sería:

        # 1 Alias configurada con seguridad de acceso

        Alias "/htdocs/" "/home/www/htdocs/"

        [Directory "/home/www/htdocs">

          AuthType Basic

          AuthName "Restricted Files"

          AuthUserFile "/etc/apache2/passwd/words_home"

          Require valid-user

        [/Directory>


          Nota: sustituir [ por símbolo de menor y ] por el de mayor          


En el caso de que quiera que el usuario pueda acceder al listado de los

archivos se incluirá la directiva:

Options Indexes FollowSymLinks


          00  # 1 Alias configurada con seguridad de acceso

          01  Alias "/htdocs/" "/home/www/htdocs/"

          02  [Directory "/home/www/htdocs">

          03    AuthType Basic

          04    AuthName "Restricted Files"

          05    AuthUserFile "/etc/apache2/passwd/words_home"

          06    Require valid-user

          07  [/Directory>


          Nota: sustituir [ por símbolo de menor y ] por el de mayor          



DistrosDefaultLayout - Debian, Ubuntu (Apache httpd 2.x)  ⮴  


ServerRoot              ::      /etc/apache2

DocumentRoot            ::      /var/www

Apache Config Files     ::      /etc/apache2/apache2.conf

::      /etc/apache2/ports.conf

Default VHost Config    ::      /etc/apache2/sites-available/default

::      /etc/apache2/sites-enabled/000-default

Module Locations        ::      /etc/apache2/mods-available, /etc/apache2/mods-enabled

ErrorLog                ::      /var/log/apache2/error.log

AccessLog               ::      /var/log/apache2/access.log


Notes:


The Debian/Ubuntu layout is fully documented in /usr/share/doc/apache2/README.Debian

Debian/Ubuntu use symlinks to configure vhosts and load modules. Configura-

tion files are created in their respective sites-available and mods-available

directories. To activate vhosts and modules, symlinks are created in the res-

pective sites-enabled and mods-enabled directories to the config files in

either sites-available and mods-available. Debian provides scripts to handle

this process called 'a2ensite' and 'a2enmod' which activates vhosts and modules.

The default vhost is defined in /etc/apache2/sites-available/default, and

overrides the DocumentRoot set in the server context.



Script,s de trabajo  ⮴  

Para trabajar con el servidor se ha creado los siguientes script,s:


1) pswd_users.sh: Para crear los archivos de contraseña.

2) update_files_www.sh: Actualiza el contenido del servidor web desde el di-

rectorio home de trabajo.

3) backup_conf_apache.sh: Copia la configuración y log de apache en el direc-

torio home de trabajo.


La página web se crea/modifica desde un equipo local desde el que se vuelca

la información al directorio de trabajo home del servidor para finalmente

actualizar el servidor con el script update_files_www.sh.


Para llevar los archivos modificados/creados en el equipo local al home del

servidor se emplean los comandos:


    rsync -azP --delete /home/juanp/www/web_apache/ juanp@192.168.0.137:/home/juanp/www/web_apache

    rsync -azP --delete /home/juanp/www/script/ juanp@192.168.0.137:/home/juanp/www/script





Comandos  ⮴  

Conectar con el servidor:

    ssh juanp@192.168.0.137


Reiniciar servidor:

    sudo systemctl restart apache2


Comprobar que no hay errores de sintaxis en los archivos de configuración:

    sudo apache2ctl configtest


Documentación  ⮴  

En Debian/Ubuntu la documentación puede encontrase en

/usr/share/doc/apache2


y en particular en el archivo

/usr/share/doc/apache2/REAME.Debian


The full Apache 2 documentation can be found on the web at

link=http://httpd.apache.org/docs/2.4/


or, if you have installed the apache2-doc package, in

/usr/share/doc/apache2-doc/manual/


or at

link=http://localhost/manual/


There is also a wiki that contains useful information:

link=http://wiki.apache.org/httpd/


Some hints about securing Apache 2 on Debian are available at

link=http://wiki.debian.org/Apache/Hardening


Enlaces  ⮴