Skip to content

Instantly share code, notes, and snippets.

@pmNiko
Last active February 7, 2023 01:49
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