La historia de la creación de una nube doméstica. Parte 2. Crear un servidor - configurar LAMP en Debian

En el camino para crear nuestro propio servicio en la nube, nos acabamos de acostumbrar al sistema Debian . Ahora ha llegado el momento del siguiente paso: la creación y configuración de un servidor web, sobre la base del cual se puede lanzar Nextcloud.


Tabla de contenidos


Parte 1. Configurar su entorno Debian para el uso diario
Parte 2. Crear un servidor - configurar LAMP en Debian
Parte 3. Crear una nube personal: instalar y configurar Nextcloud
Parte 4. Actualización 2018 - Debian 9 y Nextcloud 13
Parte 5. Actualización 2019 - PHP 7.2, MariaDB 10.4 y Nextcloud 17



Navegación rápida de capítulos


Prólogo
Instalación de software
Configurar el servidor web Apache2 y acceder a él a través de los protocolos HTTP y HTTPS
Ajuste de SQL
Configuración de PHP
Configuración de acceso SSH
Protección de acceso
Referencia del servidor web
Referencia de MySQL
Material de referencia de Fail2ban



Prólogo


La primera parte de esta historia mostró una de las posibles opciones para configurar la GUI de Debian para un uso conveniente y familiar (punto de vista exclusivamente subjetivo del autor) por parte de una persona que llegó a Linux desde Windows. Y si solo utilicé el sistema host para configurar la máquina virtual con Debian, entonces específicamente trabajé solo en esta máquina virtual, buscando información en Internet, tomando notas en Notepadqq o gedit, escuchando música a través de Audacious, abriendo archivos a través de LibreOffice y similares. De esta manera, puede acostumbrarse y sentirse mucho más profundo y apreciar trabajar con el sistema operativo y su entorno, que es bastante completo y funcional en el paquete estándar de Debian.

Por el momento, nuestro sistema está configurado de tal manera que en el futuro solo puede usar la línea de comandos con un editor de texto de consola, por ejemplo, nano o usar el administrador de archivos Double Commander con el editor Notepadqq integrado. Es posible combinar estos dos métodos, por ejemplo, navegando en el sistema y editando archivos de configuración a través del administrador de archivos, y todos los demás comandos a través de la consola. Todos los métodos son equivalentes para lograr el resultado final.

El objetivo actual es crear un servidor, al que se dedicará esta parte. El servidor se puede configurar con la instalación y el uso de la interfaz gráfica, y sin él. En el segundo caso, de la parte anterior, simplemente puede omitir las secciones relacionadas con la instalación y configuración de software para la interfaz gráfica y su configuración, instalando paquetes de software gráfico y herramientas vmware.

No veo nada de malo en usar la interfaz gráfica al crear un servidor: si es más familiar, más conveniente y cómodo para una persona crear su primer o segundo servidor con un entorno gráfico, ¿por qué no? Al final, mi servidor web con una interfaz gráfica funcionó durante un año y funcionará tantos años como sea necesario. Sin embargo, debe tener en cuenta algunos puntos.

Idealmente, una vez configurado, el sistema tendrá que funcionar sin nuestra intervención durante mucho tiempo. Mi servidor en la versión "final" se configuró en dos días y funcionó sin intervención durante casi un año. Esto significa que la interfaz gráfica se utilizó hasta el 0.05% de la existencia activa del servidor (la computadora solo funciona durante medio día) y al mismo tiempo consumió recursos: RAM, espacio en disco, tiempo de procesador. Todos estos recursos se gastan mejor para garantizar el funcionamiento del servidor en sí: por ejemplo, aumentar el límite de memoria para PHP o almacenar más datos de usuario en el disco duro. Además, en caso de problemas y mal funcionamiento cuando se trabaja con un servidor remoto real, a menudo es mucho más fácil usar el acceso SSH . En este contexto, la presencia de una interfaz gráfica no es deseable y es por eso que el segundo servidor en mi red ya era una máquina virtual sin un entorno gráfico en el que solo Midnight Commander se instaló desde el software gráfico, que utilicé para navegar el sistema de archivos y editar los archivos de configuración a través de su editor de Mcedit . Por lo tanto, la siguiente es una instrucción universal: los comandos dados con énfasis en el uso de la línea de comandos, sin embargo, se entiende que por primera vez el usuario configura la máquina con un entorno gráfico, lo que se debe al uso de un navegador para verificar localmente la disponibilidad de los sitios creados y algunas características de configuración del programa de correo.

En el proceso de creación del servidor y al agregar nuevos sitios, acumulé información de fondo que puede ser útil para un usuario novato. Lo describí después del material sobre la instalación y configuración del servidor.

Nota
Al seguir leyendo en las construcciones del formulario http: // 127.0.0.1 (https: // 127.0.0.1), el espacio después de http: // (https: //) debe eliminarse al ingresar a la barra de direcciones del navegador. Se insertó un espacio al publicar este artículo para evitar que el motor convierta automáticamente el texto en enlaces.



Instalación de software


Apache y Nginx son un par de servidores web de código abierto en los que se construyen alrededor del 55% de los servidores de todo el mundo. Apache es el servidor web más popular desde 1995 y lo elegí con la esperanza de una buena documentación, popularidad y, por así decirlo, quería comenzar desde el principio. Esto no significa que Nginx sea peor: Nginx es más eficiente al consumir recursos y trabajar bajo carga. En el segmento ruso de Internet, el servidor Nginx ocupa aproximadamente el 65%, mientras que Apache, aproximadamente el 18%. Se publica un buen artículo comparativo de dos servidores en el concentrador

Instalación del servidor web Apache2:

# apt-get install apache2 apache2-doc

Y eso es todo. Unos veinte megabytes y un servidor web ya están instalados. No se necesitan reinicios ni configuraciones: el servidor ya sabe cómo abrir páginas HTML . Sin embargo, un sitio web moderno en Internet no es solo un conjunto de archivos estáticos, estilos, fuentes y similares, como hace veinte años. Un sitio moderno contiene scripts escritos en PHP , y la información dinámica (por ejemplo, contenido de texto, comentarios, perfiles de usuario) no se escribe en archivos al lado de archivos PHP, sino en una base de datos SQL especial. Para un servidor completo, debe proporcionar soporte para estas tecnologías. Además, no es difícil:

# apt-get install mysql-server mysql-client phpmyadmin
# apt-get install php5 php5-mysql libapache2-mod-php5

Durante la instalación de MySQL, se le pedirá que establezca la contraseña de superusuario de mysql y deberá seleccionar el servidor apache2 para configurar automáticamente el trabajo con mysql. Al instalar el paquete phpmyadmin , acepté configurar automáticamente el paquete y en todas partes ingresé la contraseña de root de mysql. La instalación de PHP ocurre sin ninguna solicitud.

No utilicé PHP7 más rápido o MariaDB gratis como un reemplazo abierto alternativo para SQL y decidí construir mi servidor en el LAMP "canónico" = Linux + Apache + MySQL + PHP, usando soluciones antiguas y probadas, en caso de problemas con los que pudiera rápidamente y encontrar fácilmente información en Internet.

Tres equipos (que en realidad se pueden reducir a uno) y hemos instalado localmente un servidor moderno y completo. Es muy simple!

Pero la configuración del servidor lleva mucho más tiempo que la instalación de sus componentes. Inicialmente, en esta parte quería mostrar mis errores típicos, las soluciones falsas a los problemas y los resultados a los que condujeron, pero resultó que muchas cosas se habían borrado de mi memoria en un año, tuve que recuperar mucho de los registros, por lo que a continuación solo estableceré una instrucción de trabajo con pequeños comentarios, lo que permite lograr un resultado de trabajo universal.



Configurar el servidor web Apache2


Primero debe asegurarse de que el servidor web esté funcionando. Para hacer esto, abra un navegador y marque la dirección http: // 127.0.0.1 ( localhost ). Debería abrirse una inscripción alentadora: “Página predeterminada de Apache2 Debian. ¡Funciona! El servidor realmente funciona. Si tiene un conjunto de archivos de sitio para el año 2000, puede colocarlo en el directorio / var / www / html y probablemente se abrirá en nuestro servidor.



Todas las configuraciones básicas del servidor web se almacenan en la ruta / etc / apache2. Si abre este directorio, puede ver el archivo de configuración principal apache2.conf y los directorios conf-available, mod-available, sites-available. Estos directorios contienen archivos preconfigurados con ajustes (los llamados fragmentos), que simplemente puede usar de forma predeterminada, con sus propias ediciones, o tomarlos como plantilla para crear sus propias configuraciones. Por ejemplo, en el directorio de sitios disponibles se encuentra el archivo de configuración de host predeterminado 000-default.conf. Si lo abre y lo estudia, resulta que este archivo solo establece la ruta a lo largo de la cual se abre nuestro sitio web en la dirección http: // 127.0.0.1: “DocumentRoot / var / www / html”. Además, la línea "<VirtualHost *: 80>" significa que si libero mi máquina en una red local y accedo a ella en el puerto 80 (puerto para HTTP ), abriré un sitio ubicado en la ruta / var / www / html. ¿Cómo verificar esto?

Primero debe averiguar la dirección IP que se asignó a la máquina virtual después de cargarla. Para ver la configuración de los adaptadores de red, ejecute:

# ifconfig

En la información que se muestra en la consola, es fácil determinar que la siguiente dirección está configurada para el adaptador eth0:

inet addr:192.168.233.138

Ahora en la máquina host, abro la dirección del navegador http: // 192.168.233.138 en el navegador y espero que se abra una página familiar. Pero ... ella no abre. Después de un tiempo, mi navegador escribe: "Se agotó el tiempo de espera de la conexión". Y él escribe correctamente. De hecho, en la primera parte encendí el firewall, ¡pero el puerto 80 no se abrió! Vamos a arreglar esto:

# ufw permite 80

Nuevamente, intente abrir la dirección http: // 192.168.233.138 y asegúrese de que se abra la página esperada. El host virtual en la máquina virtual se abrió desde afuera de toda esta virtualización. Dimos un pequeño paso en la construcción de nuestra propia pequeña Internet virtual.

Además de los directorios disponibles, también hay directorios habilitados que contienen lo que actualmente está "incluido". Si los mira, puede ver que estos directorios contienen enlaces a archivos ubicados en los directorios disponibles. Actualmente solo hay un enlace en el directorio habilitado para sitios: el archivo /etc/apache2/sites-available/000-default.conf. Esto es muy conveniente: podemos controlar los accesos directos dentro o fuera de los hosts sin editar sus archivos de configuración. Además, la fuente de la configuración es si un archivo de configuración se incluye de forma independiente o no ahora, y esto evita errores cuando algo se corrige en un archivo y se olvida en otro. Para deshabilitar nuestro host, debe eliminar el acceso directo requerido y, para habilitarlo, crearlo. Para no eliminar o crear accesos directos manualmente, es más fácil y más confiable utilizar utilidades especiales.

Deshabilitar el host virtual:

# a2dissite 000-default

Encienda el host virtual:

# a2enssite 000-default

Después de cada cambio, debe reiniciar las configuraciones de host o reiniciar el servidor:

# service apache2 reload

o

# service apache2 restart

Por lo tanto, ahora está disponible una comprensión básica de cómo configurar hosts regulares en apache, y luego mostraré un ejemplo de cómo configuré mi servidor para trabajar sobre protocolos HTTP y HTTPS .

Debe comenzar con el hecho de que al desconectar el host virtual predeterminado de 000, la desconexión como tal no ocurre. Es decir, el sitio se abre desde el interior y el exterior de la máquina virtual, y se abrirá independientemente de si su configuración está en la carpeta habilitada para sitios. Esto fue inesperado y pasé un tiempo relativamente largo para entender si hice todo bien o lo entendí. Hasta el final, todavía no entendía esto, aparentemente esto se debe al hecho de que la ruta / var / www / html está configurada globalmente como el directorio predeterminado para DocumentRoot. Como no quería que algo innecesario fuera incluido y accesible, decidí deshacerme del directorio html y, para todos los anidados / var / www, denegar el acceso de forma predeterminada.

Para configurar el host virtual predeterminado, edité su archivo de configuración:

# nano /etc/apache2/sites-available/000-default.conf

El contenido del archivo de configuración es el siguiente:

 <VirtualHost *:80> ServerName localhost ServerAdmin user@localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Con esta configuración, restablecí el directorio predeterminado a / var / www, permití que el servidor siguiera enlaces simbólicos en este directorio, permití al servidor ejecutar todas las directivas declaradas en los archivos .htaccess encontrados y denegué el acceso a este directorio. La lógica de estas acciones es que puedo controlar el acceso a este directorio sin acceder a la configuración del servidor web y sin reiniciarlo. Ahora necesita verificar esta solución.
Transfiere el archivo:

# mv /var/www/html/index.html /var/www/index.html

Y elimine el directorio:

# rm / var / www / html

Reiniciamos el servidor para que la nueva configuración predeterminada del host virtual surta efecto:

# service apache2 restart

Crea un archivo:

# nano /var/www/.htaccess

En el que escribimos una línea (sin comillas): "Requerir todo otorgado".

Para resumir. Ahora no hay una ruta / var / www / html, pero el host está configurado de forma predeterminada en la ruta / var / www, donde se encuentra el archivo index.html, y de manera predeterminada, a nivel del servidor web, el acceso a este directorio está denegado, pero el contenido está permitido localmente el archivo .htaccess ubicado allí.

Abra el navegador http: // 127.0.0.1 y vea la página ya familiar “Página predeterminada de Apache2 Debian. Es funciona ". Ahora verifiquemos la operatividad del control de acceso "local":
Elimine el archivo .htaccess:

# rm /var/www/.htaccess

Y actualizamos la página abierta en el navegador: la página con el aviso de restricción de acceso (Prohibido) debería abrirse. Sí, todo esto funciona, por lo que todo se hace correctamente.

En principio, estas configuraciones simples son suficientes para el funcionamiento sin complicaciones del servidor web. Pero me pareció que no era suficiente. Ahora nuestro servidor web solo puede funcionar utilizando el protocolo HTTP. Pero, ¿qué pasa con el protocolo HTTPS? Después de todo, si en el futuro trae proyectos basados ​​en este servidor web a Internet, entonces la capacidad de trabajar en este protocolo es al menos deseable. Y decidí organizar el soporte HTTPS basado en la creación de un certificado SSL autofirmado.

Primero debe obtener un certificado SSL que se instalará en nuestro servidor. No tenemos ningún dominio, y tampoco tenemos una dirección IP estática. Pero todo esto no importa, porque generaré el certificado yo mismo, utilizando las herramientas de mi sistema.

Atencion Las instrucciones a continuación suponen que el servidor está instalado en una máquina sin nombre. Si hay una IP real o un nombre de dominio, deben especificarse en TRES lugares: <IP / dominio de nombre común>; <ServerName IP / Domain>; <Redirigir "/" "https: // IP / Dominio /"> - en las construcciones apropiadas, reemplace IP / Dominio con una dirección IP o nombre de dominio. En el texto a continuación, se utiliza localhost en lugar de IP / Dominio.

Generar un certificado SSL:

# openssl req -x509 -nodes -days 3650 -newkey rsa: 2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crt

Este comando creará un certificado autofirmado del estándar X.509 de inmediato durante 10 años, omitiendo la opción de protección del certificado con una frase de contraseña; esto es necesario para que al iniciar el servidor Apache pueda leer el archivo sin la intervención del usuario, ya que al configurar una contraseña, deberá ingresarlo después de cada arranque o reinicio servidor Junto con el certificado, se creará una nueva clave RSA para 2048 bits, con la cual se firmará el certificado. Las opciones –keyout y –out indican las rutas a lo largo de las cuales OpenSSL debe generar la clave y el certificado.

En el proceso de creación del certificado, se harán preguntas, a las cuales indiqué los siguientes datos:

Nombre del país = MW
Nombre del estado o provincia = Sistema solar
Nombre de localidad = Lunar
Nombre de la organización = Hellium Inc.
Nombre de la unidad organizativa = 2
Nombre común = localhost
Dirección de correo electrónico = usuario @ localhost

A continuación, cree las claves Diffie-Hellman para proporcionar compatibilidad con PFS :

# openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Los puntos y las ventajas se ejecutarán en el terminal y después del final de la caricatura, puede crear el archivo ssl-params.conf en el que se definirán los parámetros SSL para el servidor:

# nano /etc/apache2/conf-available/ssl-params.conf

Para una configuración segura y actualizada, utilicé el código generado en el generador para configurar SSL en mozilla.imtqy.com . En el generador, seleccioné el servidor Apache2, el perfil Modern y configuré correctamente las versiones del servidor y OpenSSL, que pueden reconocerse mediante los siguientes comandos:

# apache2 -v
# versión openssl

Como resultado, recibí el siguiente texto:

 # 14-01-2018 / for apache2 2.4.10 & openssl 1.0.1t # from https://mozilla.imtqy.com/server-side-tls/ssl-config-generator/ # parametrs help: https://raymii.org/s/tutorials/Strong_SSL_Security_On_Apache2.html # modern configuration, tweak to your needs SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 SSLHonorCipherOrder on SSLCompression off # OCSP Stapling, only in httpd 2.3.3 and later SSLUseStapling on SSLStaplingResponderTimeout 5 SSLStaplingReturnResponderErrors off SSLStaplingCache shmcb:/var/run/ocsp(128000) 

Ahora configure el host virtual con soporte SSL:

# nano /etc/apache2/sites-available/default-ssl.conf

Traje el texto de este archivo al siguiente formulario:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerAdmin user@localhost ServerName localhost DocumentRoot /var/www <Directory /var/www> Options FollowSymLinks AllowOverride All Require all denied </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

De lo anterior se deduce que también tenemos / var / www definido como el directorio DocumentRoot, cuyo acceso está configurado de manera similar a la configuración anterior. El mecanismo HSTS está habilitado , lo que ayuda a forzar la conexión a través del protocolo HTTPS. El soporte SSL se incluye con el certificado y la clave utilizada, así como el soporte para procesar datos de certificados en scripts PHP y CGI . La última sección está diseñada para proporcionar compatibilidad con versiones anteriores de Internet Explorer y, en general, no es necesaria.

Ahora hagamos los toques finales.

Abramos el puerto para SSL:

# ufw permite 443

Habilite los módulos de apache para el soporte SSL y HSTS:

# a2enmod ssl
# a2enmod encabezados

Habilitar configuración SSL:

# a2enconf ssl-params

Habilitar SSL habilitado host virtual:

# a2ensite default-ssl

Reinicie el servidor para aceptar todas las configuraciones nuevas:

# service apache2 restart

Así que ha llegado el momento interesante: verificar la operatividad de la nueva funcionalidad del sistema configurado.

Crea un archivo:

# nano /var/www/.htaccess

En el que prescribimos una línea: "Requerir todo otorgado".

Abrir en el navegador https: // 127.0.0.1. Se debe abrir una página sobre un certificado desconocido, después de aceptarlo (permiso único o permanente), se abrirá una página familiar con una notificación sobre un servidor web en ejecución.

Elimine el archivo .htaccess:

# rm /var/www/.htaccess

Y actualizamos la página abierta en el navegador: la página con el aviso de restricción de acceso (Prohibido) debería abrirse. Todo funciona correctamente Ahora nuestros sitios son accesibles a través de HTTP y HTTPS.

El acceso HTTP se puede dejar habilitado, deshabilitado u obligado a redirigir a HTTPS.

Para el acceso habilitado con HTTP, no es necesario hacer nada, ya que el servidor procesa las solicitudes de los puertos 80 y 443 individualmente y nuestro sitio en la carpeta / var / www se abrirá a través de HTTP y HTTPS.

Para deshabilitar el acceso HTTP, solo necesita deshabilitar el host virtual correspondiente y reiniciar el servidor web:

# a2dissite 000-default
# service apache2 restart

Ahora, si abre http: // 127.0.0.1 en un navegador, se abrirá una página con una notificación sobre la ausencia de una página (No encontrado).

La tercera opción más interesante. En este caso, HTTP permanece formalmente habilitado, pero el procesamiento de datos se redirigirá a la fuerza a través de HTTPS.

Para hacer esto, primero habilite el módulo de redirección:

# a2enmod reescribir

Ahora abra el archivo 000-default.conf:

# nano /etc/apache2/sites-available/000-default.conf

Y antes de la etiqueta de cierre, agregue el siguiente texto:

 RewriteEngine On RewriteCond %{HTTPS} off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] 

Reinicie el servidor:

# service apache2 restart

Crea un archivo:

# nano /var/www/.htaccess

En el que prescribimos una línea: "Requerir todo otorgado".

Ahora, si abre la dirección http: // 127.0.0.1 en un navegador, se nos redirigirá automáticamente a https: // 127.0.0.1 con una advertencia sobre un certificado desconocido (si no se agregó previamente a la lista de exclusión en el navegador), después de aceptarlo, se abrirá uno ya familiar. página de notificación del servidor web.



Ajuste de SQL


Para la configuración inicial de mysql, simplemente ejecute el siguiente comando:

# mysql_secure_installation

Después de ingresar la contraseña de superusuario mysql, respondí las preguntas formuladas en el siguiente orden:

  • se negó a cambiar la contraseña de root;
  • confirmó la eliminación de usuarios anónimos de la base de datos;
  • Confirmó el bloqueo de la conexión remota para root (por razones de seguridad, root solo está conectado localmente);
  • confirmó la eliminación de las bases de datos de prueba;
  • acordó recargar tablas de privilegios.

Para verificar el estado de mysql, puede ejecutar el siguiente comando:

# mysql -uroot -p

Después de ingresar la contraseña de superusuario mysql, vemos el mensaje mysql, significa que el servicio está en funcionamiento. Puede salir del terminal mysql ingresando el comando de salida.

Para verificar el rendimiento de phpmyadmin, abra la dirección http: // 127.0.0.1/phpmyadmin en el navegador. Si se abre una página con una invitación para ingresar a phpmyadmin, entonces el servicio está en funcionamiento.



Configuración de PHP


Después de instalar PHP, abrí su archivo de configuración:

# nano /etc/php5/apache2/php.ini

Y trajo algunos parámetros a la siguiente forma:

  • memoria_limit = 1024M
  • default_charset = "UTF-8"
  • upload_max_filesize = 256M
  • sendmail_path = /usr/bin/fake_sendmail.sh

Usando el módulo PHP, puede proporcionar el almacenamiento en caché de datos en la memoria. El almacenamiento en caché es útil en caso de alta carga del servidor para los datos, cuya generación requiere una gran cantidad de recursos, por ejemplo, los resultados de consultas a la base de datos o el procesamiento de piezas "pesadas" de una plantilla de sitio. Como servidor de almacenamiento en caché, elegí el módulo memcached .

Instalar memcache:

[ Este texto fue escrito específicamente para el sitio geektimes.ru por AlexanderS .
El enlace a la fuente es opcional, ¡pero su referencia es altamente deseable! ]

# apt-get install memcached php5-memcached

Veamos los ajustes de configuración del servicio:

# nano /etc/memcached.conf

En la configuración, aumenté el tamaño de la memoria utilizada para el almacenamiento en caché: -m 64 -> -m 256. Y verifiqué la disponibilidad del modo de operación solo en la zona local: -l 127.0.0.1.

Reiniciamos el servicio de almacenamiento en caché y el servidor web:

# servicio memcached reiniciar
# service apache2 restart

Ahora debe asegurarse de que el servicio funcione. Para hacer esto, cree un archivo:

# nano /var/www/info.php

Y agregue el siguiente texto:

 <?php phpinfo (); ?> 

No olvide verificar la existencia del archivo .htaccess en el directorio / var / www con el contenido permisivo correspondiente, si no está allí, créelo.

Ahora puede abrir en su navegador http: // 127.0.0.1/info.php: se debe abrir una página con información sobre PHP, en la que debe verificar la sección memcached en ella. Si aparece la tabla, PHP está funcionando.

Puede verificar el servicio memcached en ejecución de esta manera:

$ ps -aux | grep memcached

El terminal debe devolver una cadena que contiene la configuración de memcached.

Crear un trozo de correo para PHP

En la configuración de PHP, se especificó un script de shell como el parámetro sendmail_path. La función de este script es guardar cartas enviadas a través de la función php mail () estándar en la máquina local, en una carpeta conveniente, y no enviarlas a ningún lado.

Crea un archivo:

# nano /usr/bin/fake_semdmail.sh

Con los siguientes contenidos:

 #!/bin/sh prefix="/var/mail/sendmail/new" numPath="/var/mail/sendmail" if [ ! -f $numPath/num ]; then echo "0" > $numPath/num fi num=`cat $numPath/num` num=$(($num + 1)) echo $num > $numPath/num name="$prefix/letter_$num.txt" while read line do echo $line >> $name done chmod 777 $name /bin/true 

Haga que este archivo sea ejecutable:

# chmod + x /usr/bin/fake_semdmail.sh

Cree los directorios necesarios que pueda necesitar si configura la recopilación de cartas por el programa de correo:

# mkdir / var / mail / sendmail / var / mail / sendmail / cur / var / mail / sendmail / new / var / mail / sendmail / tmp

Y asignamos derechos para que el servidor pueda escribir archivos en esta carpeta:

# chmod 777 -R / var / mail / sendmail

Ahora todo el correo saliente se agregará a / var / mail / sendmail. Se pueden ver con un editor de texto o se pueden recopilar por programa de correo. El software preinstalado de Debian viene con un cliente de correo electrónico Evolution. Cuando configure la cuenta, seleccione "Directorios de correo en formato Maildir" como tipo de servidor y especifique la ruta al directorio de correo (/ var / mail / sendmail), y seleccione "Sendmail" como el servidor.

Eso es todo. En general, hemos terminado con el servidor: se obtiene una máquina virtual universal, sobre la base de la cual puede construir sus servicios de red. Dejé los accesos HTTP y HTTPS. Sin embargo, después de adquirir experiencia en la creación y configuración de un servidor, así como de agregar sitios (ver más abajo), recomendaría crear una nueva máquina virtual con un servidor sin una interfaz gráfica como el consumo de recursos más óptimo.



Configuración de acceso SSH


Un servidor no sería un servidor completo sin acceso a través de SSH. El llamado "shell" le permite conectarse de forma rápida y segura a un servidor remoto, utilizando, por ejemplo, un pequeño programa de masilla: en la computadora local tenemos acceso directo a la terminal del servidor remoto.

Instalación de servicio:

# apt-get install ssh

Abramos el puerto para SSH (de hecho, el puerto predeterminado debe estar en el número 22, pero a continuación redefiní el puerto en la configuración SSH):

# ufw permite 106

Para organizar el acceso de nuestro usuario, abra el archivo:

# nano / etc / ssh / sshd_config

Y agregue la directiva al final del archivo:

Usuario de AllowUsers

Además, por razones de seguridad, realicé los siguientes cambios en este archivo:

  • cambió el puerto de 22 a otro ( lista de puertos ): Puerto 22 -> Puerto 106
  • deshabilitó el protocolo heredado: Protocolo 2.1 -> Protocolo 2
  • acceso remoto deshabilitado para root: PermitRootLogin sí (o PermitRootLogin sin contraseña) -> PermitRootLogin no

Luego reinicie el servicio:

# service sshd restart

Ahora puedo ejecutar el programa de masilla en la máquina host y conectarme a mi servidor en modo consola ingresando la dirección de conexión 192.168.233.138, el puerto 106 y el nombre de usuario.Al conectarse, debe responder afirmativamente para aceptar las claves e ingresar la contraseña para el usuario usuario. Si necesita ejecutar comandos desde el superusuario, puede usar el comando su ya conocido.



Protección de acceso


No comencé a proteger el servidor web de DDoS, creyendo inicialmente que si está alojado en VPS / VDS, el alojamiento proporcionará una protección efectiva, y si hace que su servidor se "quede" en Internet, este problema debe abordarse seriamente y este es un tema artículo separado La protección lenta HTTP DDoS es relativamente simple de acuerdo con numerosas instrucciones en Internet, pero no lo salvará de un ataque distribuido desde muchas direcciones IP diferentes.

Con DDoS, nuestro servidor simplemente dejará de funcionar por un tiempo. Pero después de un ataque que no durará para siempre, el servidor se recuperará. Pero si alguien logra obtener acceso a través de SSH, entonces se perderá el control sobre el servidor y los datos se verán comprometidos, por lo que es una buena idea controlar el acceso al servidor a través de SSH.

Lo más simple y común que se puede hacer es cambiar el puerto estándar, lo que hicimos al configurar SSH. Hace aproximadamente cinco años, "introduje" el servidor recién creado en Internet en una dirección IP real recientemente recibida y me sorprendió que durante la semana de existencia del servidor, de la que nadie sabía nada todavía, se acumuló una gran cantidad de registros en los registros del sistema sobre intentos fallidos de autorización a través de SSH y FTP. Obviamente, en la Internet moderna, hay un número considerable de servicios robóticos que buscan computadoras con puertos abiertos e intentan conectarse a ellas clasificando las contraseñas utilizando la base de datos existente o utilizando el método de búsqueda exhaustivo.

Afortunadamente para nosotros, existe algo como fail2ban:

# apt-get install fail2ban

Inmediatamente después de la instalación, la utilidad ya está configurada para proteger la mayoría de los puertos y si aparecen más de seis intentos fallidos de conexión en los registros del sistema en diez minutos, el intruso se bloqueará durante diez minutos. El mecanismo de operación de fail2ban es bastante simple: las llamadas cárceles que activan una acción diseñada para proteger la aplicación son activadas por ciertos activadores.

Los parámetros de bloqueo se pueden configurar individualmente:

# nano /etc/fail2ban/jail.local

En el archivo creado, es necesario prescribir las configuraciones que reemplazarán a las existentes por defecto. Un ejemplo del contenido de mi archivo:

#
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 2592000
findtime = 43200
maxretry = 6
banaction = iptables-multiport
#
destemail = user@localhost
sendername = Fail2Ban
mta = sendmail
action = %(action_mwl)s

# SSH
[ssh]
enabled = true
port = 106
filter = sshd
logpath = /var/log/auth.log

#
[apache]
enabled = true
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log

# php
[apache-noscript]
enabled = true
port = http,https
filter = apache-noscript
logpath = /var/log/apache*/*error.log

#
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
logpath = /var/log/apache*/*error.log
maxretry = 2

#
[apache-nohome]
enabled = true
port = http,https
filter = apache-nohome
logpath = /var/log/apache*/*error.log
maxretry = 2


La configuración anterior le permite no controlar el acceso local, y con seis intentos de inicio de sesión incorrectos dentro de las 12 horas, la dirección IP del atacante que usa iptables estará prohibida durante 30 días. Controla no solo el acceso a los puertos para SSH, sino también las acciones sospechosas destinadas a desestabilizar el funcionamiento del servidor web.



Referencia del servidor web


Inicio, detención y reinicio del servidor:

# service apache2 start
# service apache2 stop
# service apache2 restart


Recarga de las configuraciones del servidor:

# service apache2 reload

Encendido y apagado del

host de prueba
: # a2ensite test # a2dissite test

Encendido y apagado de la configuración de prueba:

# a2enconf test
# a2disconf prueba


Comprobación de la sintaxis de los archivos (debería devolver: "Sintaxis

correcta "): # apache2ctl configtest

Opción para agregar un sitio con acceso HTTP o HTTPS utilizando un host virtual existente

Digamos que necesitamos agregar un nuevo sitio a nuestro servidor ubicado en el directorio de site.com ubicado en / home / user / www. Esto puede ser conveniente, ya que el usuario usuario no necesitará abandonar los límites de su directorio de inicio cuando trabaje con el sitio.

Establecemos los permisos para el directorio de usuarios (por si acaso):

# chmod 755 / home / user

Cree un directorio para el sitio:

$ mkdir / home / user / www /home/user/www/site.com Colocamos un

enlace simbólico al directorio del sitio:

# ln -s /home/user/www/site.com /var/www/site.com

Para agregar acceso a través de HTTP, abra el archivo:

# nano /etc/apache2/sites-available/000-default.conf

O para agregar acceso a través de HTTPS abre el archivo:

# nano /etc/apache2/sites-available/default-ssl.conf

Y agregue el siguiente contenido al archivo abierto antes de la etiqueta de cierre / VirtualHost:

 <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> 

Reiniciamos el servidor web:

# service apache2 restart Revisamos

la disponibilidad del sitio en http: // 127.0.0.1/site.com o https: // 127.0.0.1/site.com (método de verificación - ver más abajo). Cabe señalar que el sitio se abrirá independientemente de la disponibilidad del archivo .htaccess, ya que la directiva: "Requerir todo lo otorgado" se establece para el directorio con el sitio.

Opción para agregar un sitio con acceso HTTP o HTTPS utilizando un nuevo host virtual y configurar el acceso al sitio a través de su nombre de dominio, no IP.

Las condiciones de la tarea son las mismas que las anteriores: supongamos que necesitamos agregar un nuevo sitio a nuestro servidor ubicado en el directorio del sitio .com ubicado en / home / user / www. Pero ahora todavía quiero acceder al sitio ingresando solo su nombre de dominio en la línea del navegador.

Establecemos permisos para el directorio de usuarios (por si acaso):

# chmod 755 / home / user

Cree un directorio para el sitio:

$ mkdir /home/user/www/site.com Colocamos un

enlace simbólico al directorio del sitio:

# ln -s / home / user /www/site.com /var/www/site.com

Para agregar acceso a través de HTTP, cree un archivo:

# nano /etc/apache2/sites-available/site.com.conf

y agregue los siguientes contenidos:

 <VirtualHost *:80> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # Redirect HTTP->HTTPS #RewriteEngine On #RewriteCond %{HTTPS} off #RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [NC,R=301,L] ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

O para agregar acceso a través de HTTPS, cree un archivo:

# nano /etc/apache2/sites-available/site.com-ssl.conf

y agregue los siguientes contenidos:

 <IfModule mod_ssl.c> <VirtualHost _default_:443> ServerName site.com ServerAlias www.site.com ServerAdmin user@localhost DocumentRoot /var/www/site.com <Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory> # HSTS (mod_headers is required) (15768000 seconds = 6 months) Header always set Strict-Transport-Security "max-age=15768000" ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key <FilesMatch "\.(cgi|shtml|phtml|php)$"> SSLOptions +StdEnvVars </FilesMatch> <Directory /usr/lib/cgi-bin> SSLOptions +StdEnvVars </Directory> BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown </VirtualHost> </IfModule> 

Agregue la línea "127.0.0.1 site.com" a

/ etc / hosts : # echo >> / etc / hosts 127.0.0.1 site.com

Active el host HTTP:

# a2ensite site.com.conf

O active el host HTTPS:

# a2ensite site. com-ssl.conf Reiniciamos

el servidor web:

# service apache2 restart

Verificamos la disponibilidad del sitio en http: // site.com o https: // site.com (método de verificación - ver más abajo). Cabe señalar que el sitio se abrirá independientemente de la disponibilidad del archivo .htaccess, ya que la directiva: "Requerir todo lo otorgado" se establece para el directorio con el sitio.

Todas las acciones se realizan dentro de la máquina virtual invitada. Sería interesante "abrir" el sitio en el navegador del sistema host. No es dificil.Conocemos el nombre de dominio y la dirección IP de la máquina invitada. Si el sistema host es Windows, debe abrir el archivo c: \ Windows \ System32 \ drivers \ etc \ hosts y agregar la siguiente línea al final:

192.168.233.138 site.com

Después de este cambio, la computadora o el sistema host deberán reiniciarse. Ahora, cuando abra site.com en su navegador, el acceso a este será redirigido a nuestra máquina virtual. De hecho, hicimos el enrutamiento más simple en nuestro Internet personal en el nivel del sistema operativo host.

En caso de que necesite acceso al host virtual solo a través de HTTPS, pero no quiera perder conexiones a través de HTTP, puede configurar la redirección:

- cree el archivo /etc/apache2/sites-available/site.com.conf de acuerdo con las instrucciones anteriores, si no se crea
- en el archivo /etc/apache2/sites-available/site.com.conf, elimine el comentario de las tres líneas RewriteEngine / RewriteCond / RewriteRule
- active el host site.com.conf si no está activado
- reinicie el servidor: # service apache2 restart

Verificación del estado del sitio agregado

La forma más fácil de verificar la disponibilidad del sitio es colocar el archivo index.html con algún contenido en su directorio raíz.

Cree un archivo index.html:

$ nano /home/user/www/site.com/index.html

y agregue los siguientes contenidos:

 <html> <head> <title>TEST OK</title> </head> <body> <h1>TEST OK</h1> </body> </html> 

Según el método de agregar el sitio, abra en su navegador la dirección http: // 127.0.0.1/site.com (https: // 127.0.0.1/site.com) o http: // site.com (https: // site.com ): se debe abrir una página que contenga el texto "TEST OK".



Referencia de MySQL


Creación de usuario user123 con contraseña pass123 y base de datos db123 a través de la consola.

Ingrese mysql ingresando la contraseña de superusuario mysql cuando se le solicite:

# mysql -u root -p

Y cree una base de datos (no necesita escribir el prefijo "mysql>", el punto y coma es obligatorio al final):

mysql> CREATE DATABASE `db123`;

Crear usuario user123 con contraseña pass123:

mysql> CREAR USUARIO 'user123' @ 'localhost' IDENTIFICADO POR 'pass123';

Otorgue privilegios al usuario en la base de datos:

mysql> OTORGUE TODOS LOS PRIVILEGIOS EN `db123`. * A 'user123' @ 'localhost';

Actualizar tabla de privilegios:

mysql> FLUSH PRIVILEGES;

Salga de mysql:

mysql> salir

Para verificar, abra la dirección http: // 127.0.0.1/phpmyadmin e inicie sesión con los detalles de acceso user123 / pass123. Se debe abrir el acceso a la base de datos db123.

Cambiar la contraseña para root mysql con pass123 a pass456:

# mysqladmin -uroot -ppass123 contraseña pass456

Cambiar la contraseña para user123 de pass123 a pass456:

# mysqladmin -uuser123 -ppass123 contraseña pass456

Eliminando user123:

mysql> DROP USER 'user123' @ 'localhost' ;

Eliminar la tabla db123:

mysql> DROP DATABASE `db123`;



Material de referencia de Fail2ban


Reiniciando el servicio:

# service fail2ban restart

Revisando las reglas de ejecución:

# fail2ban-client status

Estadísticas detalladas sobre la regla sshd:

# fail2ban-client status ssh

Unbanning:

# fail2ban-client set ssh unbanip Banned_IP



Regrese al principio, a la tabla de contenido .



La historia de la creación de una nube doméstica.Parte 2. Crear un servidor: configurar LAMP en Debian.
Versión de texto: 1.0.1.
Fecha de primera publicación: 30/01/2018.
Última edición: 15/01/2020.

Actualizar registro
1.0.1 [15-01-2020]
Actualización de la tabla de contenido.

1.0.0 [30-01-2018]
La primera versión.
Describe cómo instalar y configurar LAMP en Debian 8.7.x.

Source: https://habr.com/ru/post/es409915/


All Articles