L'histoire de la création d'un cloud domestique. Partie 2. Créer un serveur - configurer LAMP dans Debian

Sur le chemin de la création de notre propre service cloud, nous venons de nous habituer au système Debian . Le moment est maintenant venu pour la prochaine étape - la création et la configuration d'un serveur Web, sur la base duquel Nextcloud peut être lancé.


Table des matières


Partie 1. Configurer votre environnement Debian pour un usage quotidien
Partie 2. Créer un serveur - configurer LAMP dans Debian
Partie 3. Création d'un cloud personnel - installation et configuration de Nextcloud
Partie 4. Mise Ă  jour 2018 - Debian 9 et Nextcloud 13
Partie 5. Mise Ă  jour 2019 - PHP 7.2, MariaDB 10.4 et Nextcloud 17



Navigation rapide dans les chapitres


Préface
Installation du logiciel
Configurer le serveur Web Apache2 et y accéder via les protocoles HTTP et HTTPS
Réglage SQL
Configuration PHP
Paramètres d'accès SSH
Protection d'accès
Référence du serveur Web
Référence MySQL
Matériel de référence Fail2ban



Préface


La première partie de cette histoire a montré l'une des options possibles pour configurer l'interface graphique Debian pour une utilisation pratique et familière (point de vue exclusivement subjectif de l'auteur) par une personne venue à Linux depuis Windows. Et si je n'utilisais que le système hôte pour configurer la machine virtuelle avec Debian, je travaillais spécifiquement uniquement sur cette machine virtuelle, recherchant des informations sur Internet, prenant des notes dans Notepadqq ou gedit, écoutant de la musique via Audacious, ouvrant des fichiers via LibreOffice et autres. De cette façon, vous pouvez vous habituer et vous sentir beaucoup plus profond et apprécier de travailler avec le système d'exploitation et son environnement, qui est assez complet et fonctionnel dans le paquet Debian standard.

À l'heure actuelle, notre système est configuré de telle manière qu'à l'avenir, vous ne pourrez utiliser la ligne de commande qu'avec un éditeur de texte de console, par exemple nano, ou utiliser le gestionnaire de fichiers Double Commander avec l'éditeur Notepadqq intégré. Il est possible de combiner ces deux méthodes, par exemple, en naviguant dans le système et en éditant les fichiers de configuration via le gestionnaire de fichiers et toutes les autres commandes via la console. Toutes les méthodes sont équivalentes pour obtenir le résultat final.

L'objectif actuel est de créer un serveur, auquel cette partie sera consacrée. Le serveur peut être configuré à la fois avec l'installation et l'utilisation de l'interface graphique, et sans elle. Dans le deuxième cas, à partir de la partie précédente, vous pouvez simplement ignorer les sections concernant l'installation et la configuration du logiciel pour l'interface graphique et ses paramètres, l'installation de packages de logiciels graphiques et de vmware-tools.

Je ne vois rien de mal à utiliser l'interface graphique lors de la création d'un serveur: s'il est plus familier, plus pratique et confortable pour une personne de créer son premier ou son deuxième serveur avec un environnement graphique - pourquoi pas? Au final, mon serveur web avec une interface graphique a fonctionné pendant un an et fonctionnera autant d'années que nécessaire. Cependant, vous devez garder à l'esprit certains points.

Idéalement, une fois configuré, le système devra fonctionner sans notre intervention pendant très longtemps. Mon serveur dans la version "finish" a été configuré en deux jours, et a fonctionné sans intervention pendant près d'un an. Cela signifie que l'interface graphique a été utilisée à 0,05% de l'existence active du serveur (l'ordinateur ne fonctionne que pendant une demi-journée) et en même temps a consommé des ressources: RAM, espace disque, temps processeur. Toutes ces ressources sont mieux dépensées pour assurer le fonctionnement du serveur lui-même: par exemple, augmentez memory_limit pour PHP ou stockez plus de données utilisateur sur le disque dur. De plus, en cas de problèmes et de dysfonctionnements lors de l'utilisation d'un vrai serveur distant, il est souvent beaucoup plus simple d'utiliser l' accès SSH . Dans ce contexte, la présence d'une interface graphique n'est pas souhaitable et c'est pourquoi le deuxième serveur sur mon réseau était déjà une machine virtuelle sans environnement graphique sur lequel seul Midnight Commander a été installé à partir du logiciel graphique, que j'ai utilisé pour naviguer dans le système de fichiers et éditer les fichiers de configuration via son éditeur mcedit . Par conséquent, ce qui suit est une instruction universelle: des commandes données mettant l'accent sur l'utilisation de la ligne de commande, cependant, il est entendu que pour la toute première fois, l'utilisateur configure la machine avec un environnement graphique, ce qui est dû à l'utilisation d'un navigateur pour vérifier localement la disponibilité des sites créés et certaines fonctionnalités de la configuration du programme de messagerie.

Dans le processus de création du serveur et lors de l'ajout de nouveaux sites, j'ai accumulé des informations de fond qui peuvent être utiles à un utilisateur novice. Je l'ai décrit après le matériel sur l'installation et la configuration du serveur.

Remarque
Suite à la lecture des constructions du formulaire http: // 127.0.0.1 (https: // 127.0.0.1), l'espace après http: // (https: //) doit être supprimé lors de la saisie de la barre d'adresse du navigateur. Un espace a été inséré lors de la publication de cet article afin d'empêcher le moteur de convertir automatiquement le texte en liens.



Installation du logiciel


Apache et Nginx sont une paire de serveurs Web open source sur lesquels environ 55% des serveurs dans le monde sont construits. Apache est le serveur Web le plus populaire depuis 1995 et je l'ai choisi en espérant une bonne documentation, une popularité et, pour ainsi dire, je voulais recommencer depuis le début. Cela ne signifie pas que Nginx est pire: Nginx est plus efficace pour consommer des ressources et travailler sous charge. Dans le segment russe d'Internet, le serveur Nginx occupe environ 65%, tandis qu'Apache - environ 18%. Un bon article comparatif de deux serveurs est publié sur le hub

Installation du serveur Web Apache2:

# apt-get install apache2 apache2-doc

Et c'est tout. Une vingtaine de mégaoctets et un serveur web sont déjà installés. Aucun redémarrage ou réglage n'est nécessaire - le serveur sait déjà ouvrir des pages HTML . Cependant, un site Web moderne sur Internet n'est pas seulement un ensemble de fichiers statiques, de styles, de polices, etc., comme il y a vingt ans. Un site moderne contient des scripts écrits en PHP et les informations dynamiques (par exemple, le contenu texte, les commentaires, les profils utilisateur) ne sont pas écrites dans des fichiers à côté des fichiers PHP, mais dans une base de données SQL spéciale. Pour un serveur complet, vous devez prendre en charge ces technologies. De plus, ce n'est pas difficile:

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

Pendant l'installation de MySQL, il vous sera demandé de définir le mot de passe du superutilisateur mysql et vous devrez sélectionner le serveur apache2 pour configurer automatiquement le travail avec mysql. Lors de l'installation du paquet phpmyadmin , j'ai accepté de configurer automatiquement le paquet et partout entré le mot de passe root mysql. L'installation de PHP se produit sans aucune demande.

Je n'ai pas utilisé PHP7 plus rapide ou MariaDB gratuit comme remplacement SQL ouvert alternatif et j'ai décidé de construire mon serveur sur le LAMP «canonique» = Linux + Apache + MySQL + PHP, en utilisant des solutions anciennes et éprouvées, en cas de problèmes avec lesquels je pouvais rapidement et trouver facilement des informations sur Internet.

Trois équipes (qui en fait peuvent être réduites à une) et nous avons installé localement un serveur à part entière et moderne. C'est très simple!

Mais la configuration du serveur prend beaucoup plus de temps que l'installation de ses composants. Initialement, dans cette partie, je voulais montrer mes erreurs typiques, les fausses solutions aux problèmes et les résultats qu'ils ont conduits, mais il s'est avéré que beaucoup de choses avaient été effacées de ma mémoire en un an, j'ai dû récupérer beaucoup de choses dans les dossiers, donc ci-dessous ne présentera qu'une instruction de travail avec de petites commentaires, permettant d'atteindre un résultat de travail universel.



Configurer le serveur Web Apache2


Vous devez d'abord vous assurer que le serveur Web fonctionne. Pour ce faire, ouvrez un navigateur et composez l'adresse http: // 127.0.0.1 ( localhost ). Une inscription encourageante devrait s'ouvrir: «Apache2 Debian Default Page. Ça marche! » Le serveur fonctionne vraiment. Si vous avez un ensemble de fichiers de site pour l'an 2000, vous pouvez le placer dans le répertoire / var / www / html et il s'ouvrira probablement sur notre serveur.



Tous les paramètres de base du serveur Web sont stockés dans le chemin / etc / apache2. Si vous ouvrez ce répertoire, vous pouvez voir le fichier de configuration principal apache2.conf et les répertoires conf-available, mod-available, sites-available. Ces répertoires contiennent des fichiers préconfigurés avec des paramètres (les soi-disant extraits), que vous pouvez simplement utiliser par défaut, avec vos propres modifications, ou les prendre comme modèle pour créer vos propres configurations. Par exemple, dans le répertoire sites-disponibles se trouve le fichier de configuration d'hôte par défaut 000-default.conf. Si vous l'ouvrez et l'étudiez, il s'avère que ce fichier définit simplement le chemin par lequel notre site Web s'ouvre à l'adresse http: // 127.0.0.1: «DocumentRoot / var / www / html». De plus, la ligne «<VirtualHost *: 80>» signifie que si je libère ma machine sur un réseau local et y accède sur le port 80 (port pour HTTP ), j'ouvrirai un site situé sur le chemin / var / www / html. Comment vérifier cela?

Vous devez d'abord connaître l'adresse IP qui a été attribuée à la machine virtuelle après son chargement. Pour afficher la configuration des adaptateurs réseau, exécutez:

# ifconfig

Dans les informations affichées sur la console, il est facile de déterminer que l'adresse suivante est définie pour l'adaptateur eth0:

inet addr:192.168.233.138

Maintenant sur la machine hôte, j'ouvre l'adresse du navigateur http: // 192.168.233.138 dans le navigateur et je m'attends à ce qu'une page familière s'ouvre. Mais ... elle n'ouvre pas. Après un certain temps, mon navigateur écrit: "La connexion a expiré." Et il écrit correctement. En effet, dans la première partie j'ai allumé le pare-feu, mais le port 80 ne s'est pas ouvert! Corrigeons ceci:

# ufw allow 80

Encore une fois, essayez d'ouvrir l'adresse http: // 192.168.233.138 et assurez-vous que la page attendue s'ouvre. L'hôte virtuel dans la machine virtuelle s'est ouvert de l'extérieur de toute cette virtualisation. Nous avons fait un petit pas dans la construction de notre propre petit Internet virtuel.

En plus des répertoires disponibles, il existe également des répertoires activés qui contiennent ce qui est actuellement «inclus». Si vous les regardez, vous pouvez voir que ces répertoires contiennent des liens vers des fichiers situés dans les répertoires disponibles. Il n'y a actuellement qu'un seul lien dans le répertoire activé pour les sites - le fichier /etc/apache2/sites-available/000-default.conf. C'est très pratique - nous pouvons contrôler les raccourcis sur ou hors des hôtes sans modifier leurs fichiers de configuration. De plus, la source de la configuration est de savoir si un fichier de configuration est inclus indépendamment ou non maintenant, ce qui évite les erreurs lorsqu'un élément est corrigé dans un fichier et oublié dans un autre. Pour désactiver notre hôte, vous devez supprimer le raccourci requis et pour l'activer, créez-le. Afin de ne pas supprimer ou créer des raccourcis manuellement, il est plus facile et plus fiable d'utiliser des utilitaires spéciaux.

Désactivez l'hôte virtuel:

# a2dissite 000-default

Activez l'hĂ´te virtuel:

# a2enssite 000-default

Après chaque modification, vous devez redémarrer les configurations d'hôte ou redémarrer le serveur:

# service apache2 reload

ou

# service apache2 restart

Ainsi, une compréhension de base de la façon de configurer des hôtes réguliers dans apache est maintenant disponible, puis je montrerai un exemple de la façon dont j'ai configuré mon serveur pour fonctionner sur les protocoles HTTP et HTTPS .

Vous devez commencer par le fait que lors de la déconnexion de l'hôte virtuel 000 par défaut, la déconnexion en tant que telle ne se produit pas. C'est-à-dire que le site est ouvert de l'intérieur et de l'extérieur de la machine virtuelle - et s'ouvrira, que sa configuration se trouve ou non dans le dossier compatible avec les sites. C'était inattendu et j'ai passé un temps relativement long à comprendre si j'avais bien fait ou bien compris. Jusqu'à la fin, je ne comprenais toujours pas cela, apparemment cela est dû au fait que le chemin / var / www / html est défini globalement comme répertoire par défaut pour DocumentRoot. Comme je ne voulais pas que quelque chose d'inutile soit inclus et accessible, j'ai décidé de me débarrasser du répertoire html lui-même, et pour tout / var / www imbriqué, de refuser l'accès par défaut.

Pour configurer l'hôte virtuel par défaut, j'ai édité son fichier de configuration:

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

Le contenu du fichier de configuration est le suivant:

 <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> 

Avec cette configuration, j'ai réinitialisé le répertoire par défaut sur / var / www, autorisé le serveur à suivre les liens symboliques dans ce répertoire, autorisé le serveur à exécuter toutes les directives déclarées dans les fichiers .htaccess trouvés et refusé l'accès à ce répertoire. La logique de ces actions est que je peux contrôler l'accès à ce répertoire sans accéder aux paramètres du serveur Web et sans le redémarrer. Vous devez maintenant vérifier cette solution.
Transférez le fichier:

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

Et supprimez le répertoire:

# rm / var / www / html

Nous redémarrons le serveur pour que les nouveaux paramètres par défaut de l'hôte virtuel prennent effet:

# service apache2 restart

Créez un fichier:

# nano /var/www/.htaccess

Dans lequel nous écrivons une ligne (sans guillemets): "Exiger tout accordé".

Pour résumer. Maintenant, il n'y a pas de chemin / var / www / html, mais l'hôte est par défaut reconfiguré sur le chemin / var / www, où se trouve le fichier index.html, et par défaut, au niveau du serveur Web, l'accès à ce répertoire est refusé, mais le contenu est autorisé localement le fichier .htaccess qui s'y trouve.

Ouvrez le navigateur http: // 127.0.0.1 et consultez la page déjà familière «Apache2 Debian Default Page. Ça marche. " Vérifions maintenant l'opérabilité du contrôle d'accès "local":
Supprimez le fichier .htaccess:

# rm /var/www/.htaccess

Et nous mettons à jour la page ouverte dans le navigateur - la page avec l'avis de restriction d'accès (Interdit) devrait s'ouvrir. Oui, tout cela fonctionne, donc tout est fait correctement.

En principe, ces paramètres simples sont suffisants pour permettre un fonctionnement sans tracas supplémentaire du serveur Web. Mais cela ne me semblait pas suffisant. Maintenant, notre serveur Web ne peut fonctionner qu'en utilisant le protocole HTTP. Mais qu'en est-il du protocole HTTPS? Après tout, si à l'avenir pour apporter des projets basés sur ce serveur Web à Internet, la possibilité de travailler sur ce protocole est au moins souhaitable. Et j'ai décidé d'organiser le support HTTPS basé sur la création d'un certificat SSL auto-signé.

Vous devez d'abord obtenir un certificat SSL qui sera installé sur notre serveur. Nous n'avons pas de domaine et nous n'avons pas non plus d'adresse IP statique. Mais tout cela n'a pas d'importance, car je vais générer le certificat moi-même, en utilisant les outils de mon système.

Attention! Les instructions ci-dessous supposent que le serveur est installé sur une machine sans nom. S'il existe un véritable IP ou nom de domaine, alors ils doivent être spécifiés à TROIS endroits: <Nom commun IP / Domaine>; <ServerName IP / Domain>; <Redirection "/" "https: // IP / Domaine /"> - dans les constructions appropriées, remplacez IP / Domaine par une adresse IP ou un nom de domaine. Dans le texte ci-dessous, localhost est utilisé à la place de IP / Domain.

Générez un certificat SSL:

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

Cette commande créera un certificat auto-signé de la norme X.509 tout de suite pendant 10 ans en ignorant l'option de protection de certificat avec une phrase secrète - cela est nécessaire pour qu'au démarrage du serveur Apache puisse lire le fichier sans intervention de l'utilisateur, car en définissant un mot de passe, vous devrez l'entrer après chaque démarrage ou redémarrage serveur. Avec le certificat, une nouvelle clé RSA pour 2048 bits sera créée, avec laquelle le certificat sera signé. Les options –keyout et –out indiquent les chemins le long desquels OpenSSL doit générer la clé et le certificat.

Dans le processus de création du certificat, des questions seront posées, auxquelles j'ai indiqué les données suivantes:

Nom du pays = MW
Nom de l'État ou de la province = Sun System
Nom de la localité = Lunaire
Nom de l'organisation = Hellium Inc.
Nom de l'unité organisationnelle = 2
Nom commun = localhost
Adresse e-mail = utilisateur @ localhost

Ensuite, créez les clés Diffie-Hellman pour fournir un support PFS :

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

Les points et les avantages s'exécuteront dans le terminal et après la fin du dessin animé, vous pouvez créer le fichier ssl-params.conf dans lequel les paramètres SSL du serveur seront définis:

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

Pour une configuration sécurisée et à jour, j'ai utilisé le code généré dans le générateur pour configurer SSL sur mozilla.imtqy.com . Dans le générateur, j'ai sélectionné le serveur Apache2, le profil Modern et défini correctement les versions du serveur et d'OpenSSL, qui peuvent être reconnues par les commandes suivantes:

# apache2 -v
# version openssl

En conséquence, j'ai obtenu le texte suivant:

 # 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) 

Configurez maintenant l'hĂ´te virtuel avec le support SSL:

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

J'ai apporté le texte de ce fichier sous la forme suivante:

 <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 ce qui précède, il s'ensuit que nous avons également / var / www défini comme le répertoire DocumentRoot, dont l'accès est configuré de manière similaire aux paramètres précédents. Le mécanisme HSTS est activé , ce qui permet de forcer la connexion via le protocole HTTPS. La prise en charge SSL est incluse avec le certificat et la clé utilisés, ainsi que la prise en charge du traitement des données de certificat dans les scripts PHP et CGI . La dernière section est conçue pour assurer la compatibilité avec les versions antérieures d'Internet Explorer et, en général, n'est pas nécessaire.

Maintenant, faisons la touche finale.

Ouvrons le port pour SSL:

# ufw allow 443

Activez les modules apache pour la prise en charge SSL et HSTS:

# a2enmod ssl
# en-tĂŞtes a2enmod

Activer la configuration SSL:

# a2enconf ssl-params

Activer l'hĂ´te virtuel compatible SSL:

# a2ensite default-ssl

Redémarrez le serveur pour accepter tous les nouveaux paramètres:

# service apache2 restart

Le moment intéressant est donc venu: vérifier l'opérabilité des nouvelles fonctionnalités du système configuré.

Créez un fichier:

# nano /var/www/.htaccess

Dans lequel nous prescrivons une ligne: "Exiger que tout soit accordé".

Ouvrez dans le navigateur https: // 127.0.0.1. Une page sur un certificat inconnu devrait s'ouvrir, après l'avoir acceptée (autorisation unique ou permanente), une page familière avec une notification sur un serveur Web en cours d'exécution s'ouvrira.

Supprimez le fichier .htaccess:

# rm /var/www/.htaccess

Et nous mettons à jour la page ouverte dans le navigateur - la page avec l'avis de restriction d'accès (Interdit) devrait s'ouvrir. Tout fonctionne correctement. Désormais, nos sites sont accessibles via HTTP et HTTPS.

L'accès HTTP peut être laissé activé, désactivé ou forcé à rediriger vers HTTPS.

Pour l'accès activé HTTP, rien n'est à faire, car le serveur traite les demandes pour les ports 80 et 443 individuellement et notre site dans le dossier / var / www s'ouvrira à la fois via HTTP et via HTTPS.

Pour désactiver l'accès HTTP, il vous suffit de désactiver l'hôte virtuel correspondant et de redémarrer le serveur Web:

# a2dissite 000-default
# service apache2 restart

Maintenant, si vous ouvrez http: // 127.0.0.1 dans un navigateur, une page avec une notification concernant l'absence de page (Not Found) devrait s'ouvrir.

La troisième option la plus intéressante. Dans ce cas, HTTP reste officiellement activé, mais le traitement des données sera redirigé de force via HTTPS.

Pour ce faire, activez d'abord le module de redirection:

# a2enmod réécriture

Ouvrez maintenant le fichier 000-default.conf:

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

Et avant la balise de fermeture, ajoutez le texte suivant:

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

Redémarrez le serveur:

# service apache2 restart

Créez un fichier:

# nano /var/www/.htaccess

Dans lequel nous prescrivons une ligne: "Exiger que tout soit accordé".

Maintenant, si vous ouvrez l'adresse http: // 127.0.0.1 dans un navigateur, nous serons automatiquement redirigés vers https: // 127.0.0.1 avec un avertissement concernant un certificat inconnu (s'il n'a pas été précédemment ajouté à la liste d'exclusion dans le navigateur), après l'avoir acceptée, une déjà familière s'ouvrira page de notification du serveur Web.



Réglage SQL


Pour la configuration initiale de mysql, exécutez simplement la commande suivante:

# mysql_secure_installation

Après avoir entré le mot de passe du superutilisateur mysql, j'ai répondu aux questions posées dans l'ordre suivant:

  • a refusĂ© de changer le mot de passe root;
  • a confirmĂ© la suppression des utilisateurs anonymes de la base de donnĂ©es;
  • ConfirmĂ© le blocage de la connexion distante pour root (pour des raisons de sĂ©curitĂ©, root n'est connectĂ© que localement);
  • a confirmĂ© la suppression des bases de donnĂ©es de tests;
  • acceptĂ© de recharger les tables de privilèges.

Pour vérifier l'intégrité de mysql, vous pouvez exécuter la commande suivante:

# mysql -uroot -p

Après avoir entré le mot de passe du superutilisateur mysql, nous voyons l'invite mysql - cela signifie que le service est opérationnel. Vous pouvez quitter le terminal mysql en entrant la commande exit.

Pour vérifier les performances de phpmyadmin, ouvrez l'adresse http: // 127.0.0.1/phpmyadmin dans le navigateur. Si une page s'ouvre avec une invitation à entrer dans phpmyadmin, alors le service est opérationnel.



Configuration PHP


Après avoir installé PHP, j'ai ouvert son fichier de paramètres:

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

Et il a apporté quelques paramètres à la forme suivante:

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

En utilisant le module PHP, vous pouvez fournir la mise en cache des données en mémoire. La mise en cache est utile en cas de charge élevée du serveur pour les données, dont la génération nécessite une grande quantité de ressources, par exemple, les résultats des requêtes vers la base de données ou le traitement de morceaux "lourds" d'un modèle de site. En tant que serveur de mise en cache, j'ai choisi le module memcached .

Installez memcache:

[ Ce texte a été écrit spécifiquement pour le site geektimes.ru par AlexanderS .
Le lien vers la source est facultatif, mais sa référence est hautement souhaitable! ]

# apt-get install memcached php5-memcached

Regardons les paramètres de configuration du service:

# nano /etc/memcached.conf

Dans les paramètres, j'ai augmenté la taille de la mémoire utilisée pour la mise en cache: -m 64 -> -m 256. Et j'ai vérifié la disponibilité du mode de fonctionnement uniquement dans la zone locale: -l 127.0.0.1.

Nous redémarrons le service de mise en cache et le serveur Web:

# redémarrage memcached de service
# service apache2 restart

Vous devez maintenant vous assurer que le service fonctionne. Pour ce faire, créez un fichier:

# nano /var/www/info.php

Et ajoutez-y le texte suivant:

 <?php phpinfo (); ?> 

N'oubliez pas de vérifier l'existence du fichier .htaccess dans le répertoire / var / www avec le contenu permissif correspondant, s'il n'est pas là, créez-le.

Vous pouvez maintenant ouvrir dans votre navigateur http: // 127.0.0.1/info.php - une page contenant des informations sur PHP devrait s'ouvrir, dans laquelle vous devez vérifier la section memcached. Si le tableau apparaît - PHP fonctionne.

Vous pouvez vérifier le service memcached en cours d'exécution comme ceci:

$ ps -aux | grep memcached

Le terminal doit renvoyer une chaîne contenant des paramètres memcached.

Création d'un talon de messagerie pour PHP

Dans les paramètres PHP, un script shell a été spécifié comme paramètre sendmail_path. La fonction de ce script est de sauvegarder les lettres envoyées via la fonction standard php mail () sur la machine locale, dans un dossier pratique, et de ne pas les envoyer quelque part.

Créez un fichier:

# nano /usr/bin/fake_semdmail.sh

Avec le contenu suivant:

 #!/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 

Rendez ce fichier exécutable:

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

Créez les répertoires nécessaires dont vous pourriez avoir besoin si vous configurez la collecte de lettres par le programme de messagerie:

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

Et nous attribuons des droits pour que le serveur puisse écrire des fichiers dans ce dossier:

# chmod 777 -R / var / mail / sendmail

Maintenant, tout le courrier sortant sera ajouté à / var / mail / sendmail. Ils peuvent être consultés avec un éditeur de texte, ou peuvent être collectés par le programme de messagerie. Le logiciel préinstallé Debian est livré avec un client de messagerie Evolution. Lors de la configuration d'un compte, sélectionnez «Répertoires de messagerie au format Maildir» comme type de serveur et spécifiez le chemin d'accès au répertoire de messagerie (/ var / mail / sendmail), puis sélectionnez «Sendmail» comme serveur.

C’est tout. En général, nous avons terminé avec le serveur - une machine virtuelle universelle est obtenue, sur la base de laquelle vous pouvez créer vos services réseau. J'ai quitté les accès HTTP et HTTPS. Cependant, après avoir acquis de l'expérience dans la création et la configuration d'un serveur, ainsi que dans l'ajout de sites (voir ci-dessous), je recommanderais de créer une nouvelle machine virtuelle avec un serveur sans interface graphique comme consommation de ressources la plus optimale.



Paramètres d'accès SSH


Un serveur ne serait pas un serveur complet sans accès via SSH. Le soi-disant «shell» vous permet de vous connecter rapidement et en toute sécurité à un serveur distant, en utilisant, par exemple, un petit programme de mastic - sur l'ordinateur local, nous avons un accès direct au terminal du serveur distant.

Installation du service:

# apt-get install ssh

Ouvrons le port pour SSH (en fait, le port par défaut devrait être au numéro 22, mais ci-dessous j'ai redéfini le port dans la configuration SSH):

# ufw allow 106

Pour organiser l'accès pour notre utilisateur utilisateur, ouvrez le fichier:

# nano / etc / ssh / sshd_config

Et ajoutez la directive Ă  la fin du fichier:

Utilisateur AllowUsers

De plus, pour des raisons de sécurité, j'ai apporté les modifications suivantes à ce fichier:

  • port changĂ© de 22 Ă  un autre ( liste des ports ): Port 22 -> Port 106
  • dĂ©sactivĂ© le protocole hĂ©ritĂ©: Protocole 2.1 -> Protocole 2
  • accès distant dĂ©sactivĂ© pour root: PermitRootLogin oui (ou PermitRootLogin sans mot de passe) -> PermitRootLogin non

Redémarrez ensuite le service:

# service sshd restart

Maintenant, je peux exécuter le programme putty sur la machine hôte et me connecter à mon serveur en mode console en entrant l'adresse de connexion 192.168.233.138, le port 106 et le nom d'utilisateur. user. , su.




- DDoS, , VPS/VDS, , «» , . Slow HTTP DDoS , , IP .

DDoS - . , , . - SSH, , , SSH – .

, – , SSH. «» IP , , , SSH FTP. , -, , .

, fail2ban:

# apt-get install fail2ban

, . fail2ban – , , .

:

# nano /etc/fail2ban/jail.local

, . :

#
[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


, 12 IP , iptables, 30 . SSH, , -.



-


, :

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


:

# service apache2 reload

test:

# a2ensite test
# a2dissite test


test:

# a2enconf test
# a2disconf test


( : «Syntax OK»):

# apache2ctl configtest

HTTP HTTPS

, , site.com, /home/user/www. , user .

( ):

# chmod 755 /home/user

:

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

:

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

HTTP :

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

HTTPS :

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

/VirtualHost:

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

-:

# service apache2 restart

http:// 127.0.0.1/site.com https:// 127.0.0.1/site.com ( — . ). , .htaccess, : «Require all granted».

HTTP HTTPS , IP

– , : , , site.com, /home/user/www. .

( ):

# chmod 755 /home/user

:

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

:

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

HTTP :

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

:

 <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> 

HTTPS :

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

:

 <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> 

/etc/hosts «127.0.0.1 site.com»:

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

HTTP :

# a2ensite site.com.conf

HTTPS :

# a2ensite site.com-ssl.conf

-:

# service apache2 restart

http:// site.com https:// site.com ( – . ). , .htaccess, : «Require all granted».

. «» . Ce n'est pas difficile. IP . Windows, c:\Windows\System32\drivers\etc\hosts :

192.168.233.138 site.com

. , site.com . , .

, HTTPS, HTTP :

— /etc/apache2/sites-available/site.com.conf ,
— /etc/apache2/sites-available/site.com.conf RewriteEngine/RewriteCond/RewriteRule
— site.com.conf,
— : # service apache2 restart



— index.html - .

index.html:

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

:

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

http:// 127.0.0.1/site.com (https:// 127.0.0.1/site.com) http:// site.com (https:// site.com) — «TEST OK».



MySQL


user123 pass123 db123 .

mysql, mysql :

# mysql -u root -p

( «mysql>» , ):

mysql> CREATE DATABASE `db123`;

user123 pass123:

mysql> CREATE USER 'user123'@'localhost' IDENTIFIED BY 'pass123';

:

mysql> GRANT ALL PRIVILEGES ON `db123`.* TO 'user123'@'localhost';

:

mysql> FLUSH PRIVILEGES;

mysql:

mysql> exit

http:// 127.0.0.1/phpmyadmin user123/ pass123. db123.

root mysql c pass123 pass456:

# mysqladmin -uroot -ppass123 password pass456

user123 c pass123 pass456:

# mysqladmin -uuser123 -ppass123 password pass456

user123:

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

db123:

mysql> DROP DATABASE `db123`;



fail2ban


:

# service fail2ban restart

:

# fail2ban-client status

sshd:

# fail2ban-client status ssh

:

# fail2ban-client set ssh unbanip Banned_IP



, .



L'histoire de la création d'un cloud domestique. 2. — LAMP Debian.
: 1.0.1.
: 30.01.2018.
: 15.01.2020.

1.0.1 [15-01-2020]
.

1.0.0 [30-01-2018]
.
LAMP Debian 8.7.x.

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


All Articles