
El acrónimo LAMP se refiere a una combinación de pila de software de un sistema operativo Linux con servidor web Apache, servidor de base de datos MySql y soporte PHP.
Compatibilidad
Este tutorial se ha probado en las siguientes distribuciones de Linux:
Debian Linux 9 (apretar)
Última actualización:
7 de abril de 2018
En este tutorial instalaremos Debian Linux 9 (squeeze), Apache 2 con mpm-itk (para ejecutar cada web como un usuario aislado), soporte PHP 7 y servidor de base de datos MySql 5.7. Además, el tutorial cubre la instalación del servidor vsftp para proporcionar servicio FTP, la configuración de letsencrypt y la solicitud de un certificado gratuito, la instalación de phpMyAdmin y la configuración del firewall de iptables para proteger el servidor y solo permitir los puertos necesarios. Una vez que haya seguido el tutorial, tendrá un servidor web seguro y completamente funcional listo para alojar sus sitios web.
1. Actualice su sistema
Antes de seguir adelante, actualice todos los paquetes a las últimas versiones.
apt-get update && apt-get upgrade
2. Instale el servidor de base de datos MySql 5.7
Por defecto, MySql 5.5 está incluido en los repositorios estándar de Debian, que es una versión muy antigua. Instalaremos MySql 5.7 en este tutorial que requiere algunos pasos adicionales.
2.1. Descargue la herramienta de configuración del repositorio MySQL APT (puede ver más detalles y la última versión de la herramienta aquí: http://dev.mysql.com/downloads/repo/apt/)
wget https://dev.mysql.com/get/mysql-apt-config_0.8.9-1_all.deb
2.2. Instale la herramienta de configuración del repositorio APT de MySQL
dpkg -i mysql-apt-config_0.8.9-1_all.deb
Se le pedirá que seleccione el producto y la versión que desea instalar. En el primer paso, seleccione Servidor y luego seleccione mysql-5.7. Luego haga clic en Aplicar.
2.3. Actualizar APT
apt-get update
2.4. Instalar el servidor
apt-get install mysql-community-server
Cuando se haya instalado el servidor, deberá proporcionar una contraseña para el usuario root. Elija cualquier contraseña aquí, pero asegúrese de que sea una contraseña segura y algo que recuerde.
3. Instale y configure el servidor web Apache con compatibilidad con mpm-itk y PHP7
El mpm-itk es ideal cuando se alojan varios sitios web en un solo servidor para aislar los sitios. Con mpm-itk puede asegurarse de que un sitio web no pueda acceder a los archivos de otro si los permisos están configurados correctamente, más sobre eso más adelante.
3.1. Instalar los paquetes
apt-get install apache2 libapache2-mpm-itk php php-mysql
3.2. Habilite los módulos de reescritura y ssl
El módulo de reescritura es muy útil para crear URL amigables con SEO para su sitio web y es requerido por muchos marcos y aplicaciones web. El módulo SSL es necesario para proteger su sitio web con SSL / TLS (para usar https: // en lugar de http: //).
a2enmod rewrite
a2enmod ssl
3.3. Instalar módulos PHP adicionales (opcional)
Es posible que necesite algunos módulos PHP adicionales para ejecutar sus aplicaciones web. Los módulos requeridos variarán, pero con el comando a continuación puede instalar algunos módulos de uso común.
apt-get install php-curl php-gd php-mcrypt php-mbstring php-xml
3.4. Reinicie Apache para habilitar los módulos y cualquier módulo PHP adicional instalado
systemctl restart apache2
3.5. Eliminar el sitio de índice predeterminado proporcionado con Apache (opcional)
Si accede a su servidor ahora usando http: // yourserver, verá la página de índice predeterminada con algunos detalles sobre su servidor. Probablemente no quiera contarle a la gente demasiado sobre el servidor, por lo que le sugiero que reemplace este archivo con algo diferente. Para proporcionar la menor cantidad de detalles, simplemente vacíemos el archivo.
echo "" > /var/www/html/index.html
4. Cree una web (usuario, raíz web y host virtual apache)
Para cada sitio web que desee alojar en este servidor, debe crear un usuario local independiente y aislar los sitios web. El mpm-itk se asegurará de que cada acción se ejecute utilizando el usuario que proporcione en el host virtual de Apache.
4.1. Crea el usuario local
En este tutorial usaremos el dominio example.org pero, por supuesto, debe reemplazar el dominio por el que utilizará. El nombre de usuario que contiene la raíz web puede ser cualquier cosa y no tiene que estar relacionado en absoluto con el dominio de la web, pero usaremos ejemplo como nombre de usuario aquí.
adduser example
Este comando creará un usuario con el nombre de usuario ejemplo y cree un directorio de inicio para ese usuario en / home / example. Deberá proporcionar una contraseña y puede proporcionar información opcional sobre el usuario.
4.2. Crea un directorio raíz web
La raíz web es el directorio en el que se almacena su sitio web. El directorio se puede ubicar en cualquier lugar, pero solo debe asegurarse de que el usuario tenga acceso para leerlo. En este tutorial, la raíz web se ubicará en /home/example/example.org.
Usando el comando chown, cambiaremos la propiedad del nuevo directorio para que el usuario de ejemplo (y el grupo de ejemplo) tengan acceso a él.
mkdir /home/example/example.org
chown example.example /home/example/example.org
4.3. Crea un sitio Apache
Con este comando le diremos a Apache que responda a las solicitudes de los hosts example.org y www.example.org y use nuestro directorio raíz web para esos hosts. También aquí configuraremos el usuario local que se debe utilizar.
echo "<VirtualHost *:80>
ServerName example.org
ServerAlias www.example.org
DocumentRoot /home/example/example.org
AssignUserId example example
<Directory /home/example/example.org>
Options -Indexes
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
" > /etc/apache2/sites-available/example.org.conf
4.4. Habilite el sitio de Apache
Hemos ubicado la configuración del sitio en el directorio de sitios disponibles. Esto puede ser útil para poder habilitar y deshabilitar sitios fácilmente usando los comandos a2ensite y a2dissite. Para habilitar el sitio tendremos que ejecutar el siguiente comando:
a2ensite example.org
4.5. Recargue la configuración de Apache
Para decirle a Apache que use nuestro nuevo sitio, vuelva a cargar el archivo config.
systemctl reload apache2
Ahora, si va a http://example.org (o un dominio que apunta a la dirección IP de su servidor) verá un error 403 Prohibido si aún no ha colocado ningún archivo en la raíz web. Esto es normal porque en la configuración del sitio hemos deshabilitado la indexación de directorios.
5. Proteja su sitio con Letsencrypt (opcional)
Let’s Encrypt es una autoridad de certificación que proporciona certificados SSL / TLS gratuitos que se validan y firman instantáneamente y se pueden utilizar para proteger su sitio web. Los certificados son válidos por 90 días, pero puede configurar fácilmente una tarea para gestionar la renovación automáticamente.
5.1. Instale certbot que se utiliza para gestionar la solicitud y la renovación del certificado.
apt-get install python-certbot-apache
5.2. Configure Apache para permitir la verificación http
Dado que estamos usando mpm-itk, certbot no funcionará de inmediato, ya que los archivos de verificación se crean utilizando el usuario raíz y no son accesibles desde su sitio web. Para solucionar esto, agregaremos un nuevo módulo de Apache para obligar a Apache a usar un usuario diferente para leer estos archivos.
echo "Alias /.well-known/acme-challenge /var/www/html/.well-known/acme-challenge
<Directory /var/www/html/.well-known>
AssignUserId www-data www-data
</Directory>" > /etc/apache2/mods-enabled/letsencrypt.conf
Reiniciar Apache
systemctl restart apache2
5.3 Ejecute certbot para seleccionar qué sitios deben protegerse y solicitar e instalar automáticamente el certificado.
certbot --authenticator webroot --installer apache
Debe seguir algunos pasos para completar la solicitud y la instalación del certificado:
Paso 1: Escriba una lista separada por comas de los números que representan los nombres de host que deben protegerse. Si solo tiene un sitio Apache configurado, puede escribir 1,2 aquí.
Paso 2: proporcione una dirección de correo electrónico que se utilice para la renovación urgente y los avisos de seguridad. Escriba aquí una dirección de correo electrónico válida que supervise con frecuencia.
Paso 3: acepte los términos de servicio.
Paso 4: proporcione una raíz web. Escriba 1 y escriba la raíz conocida configurada anteriormente: / var / www / html. A continuación, deberá confirmar ese directorio para cada nombre de host adicional que se incluirá en el certificado.
Paso 5: Certbot creará automáticamente un sitio web Apache con su nuevo certificado SSL / TLS. En este paso, puede seleccionar si se permiten tanto http como https o si las solicitudes http deben redirigirse a https. Seleccione el método que prefiera.
Ahora puede acceder a su sitio usando https, ej. https://example.org
5.4 Configurar la renovación automática de los certificados de letsencrypt
crontab -e
43 6 * * * certbot renew --post-hook "systemctl reload apache2"
6. Instale phpMyAdmin (opcional)
phpMyAdmin es una herramienta escrita en PHP, destinada a manejar la administración de MySQL a través de la Web.
6.1. Instalar phpMyAdmin
apt-get install phpmyadmin
Hay algunos pasos necesarios para configurar phpMyAdmin:
Paso 1: se le preguntará qué servidor web debe configurarse. Compruebe apache2 y continúe.
Paso 2: configurar una base de datos para phpmyadmin. Seleccione Sí.
Paso 3: establezca una contraseña para el usuario phpmyadmin. Esto solo lo usa phpmyadmin, por lo que puede continuar y permitir que la herramienta cree una contraseña aleatoria.
Paso 4: Debe proporcionar la contraseña de root seleccionada cuando instaló el servidor MySql.
phpMyAdmin ahora está instalado y puede acceder a él en https://example.org/phpmyadmin (si ya ha creado un certificado letsencrypt) o http://example.org/phpmyadmin (si omitió el paso letsencrypt).
6.2. IP Restringir el acceso a phpMyAdmin (opcional)
phpMyAdmin es una gran herramienta para administrar MySql, pero no debe permitir que nadie acceda a la herramienta, ya que eso facilitará el acceso a sus bases de datos. Aunque se requiere una contraseña, el método de fuerza bruta o las vulnerabilidades en phpMyAdmin podrían usarse para obtener acceso.
Permitamos que solo ciertas direcciones IP accedan a phpMyAdmin.
Abra /etc/apache2/conf-available/phpmyadmin.conf en su editor de texto favorito (por ejemplo, nano /etc/apache2/conf-available/phpmyadmin.conf)
Agregue estas líneas debajo de DirectoryIndex index.php (línea 7.):
order deny,allow
deny from all
allow from x.your.ip.address
Reiniciar Apache
systemctl restart apache2
7. Instale y configure el servicio FTP
vsftpd es un servidor FTP seguro, rápido y estable. En este tutorial instalaremos vsftpd permitiendo a los usuarios locales acceder a sus directorios de inicio.
7.1. Instalar vsftpd
apt-get install vsftpd
7.2. Permita que los usuarios carguen archivos en lugar de simplemente leer archivos y habilite chroot para asegurarse de que los usuarios no puedan leer archivos fuera de sus directorios de inicio.
echo "write_enable=YES
chroot_local_user=YES" >> /etc/vsftpd.conf
7.3. Reiniciar vsftpd
/etc/init.d/vsftpd restart
7.4. Cambiar los permisos en el directorio de inicio del usuario
Cuando chroot está habilitado, debemos eliminar el acceso de escritura al directorio de inicio, lo que significa que el usuario no puede cargar nuevos archivos directamente en el directorio de inicio. Sin embargo, el usuario puede cargar archivos en subcarpetas en el directorio de inicio, incluido el directorio raíz web (por ejemplo, /home/example/example.org).
chmod u-w /home/example
vsftpd ahora está instalado y puede conectarse al servidor usando cualquier cliente FTP.
8. Configure el firewall de iptables
En general, es una buena idea no permitir el acceso a cualquier puerto al que no tengan que acceder usuarios anónimos. Incluso si todos los servicios están protegidos con contraseña, pueden ser pirateados mediante fuerza bruta o vulnerabilidades en las aplicaciones.
Usaremos el firewall de iptables y solo permitiremos http, https, ssh y ftp para usuarios anónimos.
8.1. Habilite ip_conntrack_ftp para permitir conexiones FTP pasivas
echo "ip_conntrack_ftp" >> /etc/modules
echo "net.netfilter.nf_conntrack_helper=1" >> /etc/sysctl.conf
Para ejecutar FTP pasivo, debe reiniciar el servidor
8.2. Permitir conexiones ICMP, establecidas y locales
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
8.3. Permitir que todos los usuarios se conecten a servicios web (http y https), ssh y ftp
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 20 -m conntrack --ctstate ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --sport 1024: --dport 1024: -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Considere restringir el acceso a ssh y ftp solo a las direcciones IP requeridas usando el parámetro -s (ej. -S 8.8.8.8)
8.4. Permita todas las conexiones salientes del servidor.
iptables -P OUTPUT ACCEPT
8.5. Elimine todas las conexiones entrantes que no coincidan con las reglas creadas anteriormente. Asegúrese de que ya ha permitido que su dirección IP (o todas las direcciones IP) se conecten a SSH porque, de lo contrario, su conexión se interrumpirá y quedará bloqueado en su servidor.
iptables -P INPUT DROP
iptables -P FORWARD DROP
8.6. Ahora hemos configurado todas las reglas de iptables requeridas, pero son temporales y se perderán en el próximo reinicio. Para almacenar las reglas de forma permanente, tendremos que instalar el paquete iptables-persistent y guardar las reglas.
apt-get install iptables-persistent
iptables-save > /etc/iptables/rules.v4
¡Eso es! Ahora debería tener un servidor web LAMP completamente funcional con certificado SSL / TLS, servidor FTP y software de firewall.