Instalar y configurar usando CERBOT
Configurar cortafuegos (UFW) - ¡¡ATENCIÓN!! No desactivar OpenSSH
EN PRIMER LUGAR - 1º Comando a ejecutar
Configurar autorizaciones de acceso
Crear el archivo de usuarios y contraseñas
Usando el archivo de configuración principal
Políticas de acceso en Apache 2.4
Crear directorios y asignar permisos
Configurar Apache para usar un Alias
DistrosDefaultLayout - Debian, Ubuntu (Apache httpd 2.x)
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.
sudo apt update &&
sudo apt upgrade -y &&
sudo apt autoremove
# Reiniciar
sudo reboot
sudo apt install apache2
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
CERBOT lo activa por lo que no sería necesario hacer nada.
Comprobar si está activado:
a2query -m | grep ssl
Si no estuviera activado:
(Ver: /usr/share/doc/apache2/REAME.Debian)
sudo a2ensite default-ssl &&
sudo a2enmod ssl &&
sudo service apache2 restart
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.
Asegurarse que el acceso por SSH (port. 22) está habilitado.
sudo ufw allow 'OpenSSH'
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)
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
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
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.
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
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.
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.
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.
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>
Se va a crear un alias [/htdocs/] para acceder a /home/www/htdocs.
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
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
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
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.
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
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
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
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
Distro Default Layout - Directorios
El manual del Administrador de Debian
Apache - Autenticación y Autorización
htpasswd - Manage user files for basic authentication