Skip to content

Instantly share code, notes, and snippets.

@pmNiko
Last active September 16, 2024 11:05
Show Gist options
  • Save pmNiko/c23a71bc7824e0313806269593ef49e0 to your computer and use it in GitHub Desktop.
Save pmNiko/c23a71bc7824e0313806269593ef49e0 to your computer and use it in GitHub Desktop.
Centos 7 - Apache httpd - Preparación del entorno
                 ----- Preparación del serve Centos 7 con Apache httpd ----------
       ---------__________________________________________________________________---------      

___Premisas para la puesta en producción

- Un hosting funcional con una MV de Centos 7(x64) acceso root
- Un DNS válido para poder enlazar a la IP del server
- Conocimientos básicos del shell de Unix

*Nota: todo el proceso estará realizado como root, sin embargo puede generarse un usuario con permisos root(grupo wheel) y realizar el ejemplo. Tenga en cuenta que deberá darle permisos de ejecución a los enlaces, etc.

___Configuración básica del firewall

  No es buena idea dar libre acceso a los puertos de nuestro server, por cuestiones de seguridad, 
  por lo tanto vamos a instalar y administrar el firewall de centos para lograr un acceso
  controlado.
  - Instalamos:                       yum install firewalld
  - Inicializamos:                    systemctl start firewalld
  - Listar                            firewall-cmd --list-services
                                      firewall-cmd --list-all
  
  - Agreguamos servicios:             firewall-cmd --permanent --add-service=ssh
                                      firewall-cmd --permanent --add-service=http
                                      firewall-cmd --permanent --add-service=https
                                     
  - Implentar los cambios:            firewall-cmd --reload
  - Lo habilitamos:                   systemctl enable firewalld
  
                                     

___Configuración del timezone

  - Lista de zonas horarias:          timedatectl list-timezones
  - Adosamos la zona horaria:         timedatectl set-timezone America/Argentina/Buenos_Aires
  - Confirmación de la zona:          timedatectl
  
___Adicionalmente configuraramos NTP
  
    Esto mantendra sincronizada la hora con otros servidores para corregir 
    la hora automticamente, alinenadose con los servidores globales.
    
    - Instalamos el modulo:             yum install ntp
    - Iniciamos:                        systemctl start ntpd
    - Habilitamos el servicio:          systemctl enable ntpd
    
    
___Instalación de Apache 

    - Actualización:                      yum update httpd
    - Instalación:                        yum install httpd
    - Iniciar el servicio:                systemctl start httpd
    - Estado del servicio:                systemctl status httpd
    
   En este momento deberiamos ser capaces de ver la pantalla de bienvenida de Apache 
   accediendo a la url http://<IP SERVER>  o   http://<DNS>   o   http://<CNAME><DNS>
   
                           Configuración básica 

   ----------------   Trabajando con host vistuales en Apache   ------------------

La forma básica de trabajar con el server de Apache sería utilizando la carpeta por defecto "html" o creando una con un nombre distinto "example_html" y redirigiendo el host.

El hecho es que también podemos usar los vistual host como un proxy server y tener directorios parañlelos para cada uno de nuestro servicios. Pero para lograr el objectivo debemos abrir las politicas de SELinux. SELinux le permite personalizar las politicas por defecto ya que Apache debera contar con poder escribir en los archivos necesarios que vallamos a definir para nuestros VHOST.

Se detallarán dos maneras de definir nuestras politicas para Apache.

  1_ Ajustar políticas de Apache de forma universal:

      Establecer la política de Apache de forma universal indicará a SELinux que trate de forma 
      idéntica todos los procesos de Apache usando el booleano httpd_unified. Si bien este enfoque 
      es más conveniente, no le brindará el mismo nivel de control que uno centrado en una política 
      de archivos o directorios.
      
      Ejecute el siguiente comando para configurar una política universal de Apache:
        
          $  setsebool -P httpd_unified 1
          
      El comando setsebool cambia los valores booleanos de SELinux. El marcador -P actualizará el 
      valor de tiempo de inicio y hará que este cambio persista en los reinicios. httpd_unified es 
      el booleano que indicará a SELinux que trate todos los procesos de Apache como el mismo tipo, 
      por lo que lo habrá habilitado con un valor de 1.
                                     
                                     
  2_ Ajustar políticas de Apache en un directorio:
  
      Configurar individualmente los permisos de SELinux para el directorio /var/www/example.com/log 
      le brindará mayor control sobre sus políticas de Apache, pero también puede requerir más 
      mantenimiento. Debido a que esta opción no establece políticas de forma universal, deberá fijar 
      de forma manual el tipo de contexto para cualquier nuevo directorio de registro especificado en 
      sus configuraciones de host virtuales.

      Primero, compruebe el tipo de contexto que SELinux dio al directorio /var/www/example.com/log
      Este comando enumera e imprime el contexto de SELinux del directorio. El resultado debe 
      ser similar a lo siguiente:

          $ ls -dZ /var/www/example.com/log/
          
          Output
          drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/example.com/log/
      
      El contexto actual es httpd_sys_content_t, que indica a SELinux que el proceso de Apache solo 
      puede leer archivos creados en este directorio. A través de este tutorial, cambiará el tipo de 
      contexto del directorio /var/www/example.com/log a httpd_log_t. Este tipo permitirá que Apache 
      genere archivos de registro de la aplicación web y realice anexos a ellos:
      
          $ semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
          
      A continuación, utilice el comando restorecon para aplicar estos cambios y hacer que persistan 
      a través de los reinicios:

          $ restorecon -R -v /var/www/example.com/log
          
      El indicador -R ejecuta este comando de forma recursiva, lo que significa que actualizará cualquier 
      archivo existente para que utilice el nuevo contexto. El indicador -v imprimirá los cambios de 
      contexto realizados por el comando. Verá el siguiente resultado que confirma los cambios:
      
          Output
          restorecon reset /var/www/example.com/log context unconfined_u:object_r:httpd_sys_content_t:s0-                             >unconfined_u:object_r:httpd_log_t:s0
          
      Puede enumerar los contextos una vez más para ver los cambios:
          
          $ ls -dZ /var/www/example.com/log/
          
          Output
          drwxr-xr-x. root root unconfined_u:object_r:httpd_log_t:s0 /var/www/example.com/log
          
       Ahora que el directorio /var/www/example.com/log usa el tipo httpd_log_t, estará listo 
       para probar su configuración de host virtual.
         
         
 
 3_ Probar el host virtual 
    
    Una vez que el contexto se SELinux se haya actualizado con cualquiera de los métodos, 
    Apache podrá realizar tareas de escritura en el directorio /var/www/example.com/log.
    Ahora podrá reiniciar con éxito el servicio de Apache:

            $ systemctl restart httpd

    Enumere el contenido del directorio /var/www/example.com/log para ver si Apache creó 
    los archivos de registro:
    
            $ ls -lZ /var/www/example.com/log
    
    Verá que Apache pudo crear los archivos error.log y requests.log especificados en la 
    configuración del host virtual:
    
            Output
            -rw-r--r--. 1 root root 0 Feb 26 22:54 error.log
            -rw-r--r--. 1 root root 0 Feb 26 22:54 requests.log
     
     Ahora que tiene su host virtual configurado y los permisos SELinux actualizados, 
     Apache proporcionará su nombre de dominio. Puede comprobarlo visitando http://example.com, 
     donde debería ver algo como esto:
     
     

4_ Gestor de paquetes snapd
    
      $ yum update
      $ yum install epel-release
      $ yum install snapd
      $ systemctl enable --now snapd.socket
      $ ln -s /var/lib/snapd/snap /snap
      $ reboot
      $ snap --version


5_ Error 503 al acceder a la url de la API
    Este error no se trata realmente de permisos de archivo ni nada por el estilo. 
    Lo que realmente significa es que a httpd se le ha denegado el permiso para 
    conectarse a esa dirección IP y puerto.

    La causa más común de esto es que SELinux no permite que httpd realice conexiones de red.

    Para resolverlo, debe cambiar un valor booleano de SELinux 
    (que persistirá automáticamente en los reinicios). También es posible que desee reiniciar 
    httpd para restablecer el trabajador proxy, aunque esto no es estrictamente necesario.
    
    Para permitir que apache realice conexiones de red, emita el siguiente comando.

      $ setsebool httpd_can_network_connect 1
    
      Luego reinicie apache.

      $ service httpd restart
      
    Fuente: https://stackoverflow.com/questions/25055008/reverse-proxy-with-apache-on-centos-6


___Fuentes: 

  - Firewalld-cmd: 
    https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers#configuring-a-basic-firewall
    
  - Instalación de Apache:
    https://www.digitalocean.com/community/tutorials/how-to-install-the-apache-web-server-on-centos-7-es

  - Gestor de paquetes snapd: 
    https://www.cyberithub.com/how-to-install-and-use-snapd-on-rhel-centos-7-8-using-10-easy-steps/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment