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 quotidienPartie 2. Créer un serveur - configurer LAMP dans DebianPartie 3. Création d'un cloud personnel - installation et configuration de NextcloudPartie 4. Mise à jour 2018 - Debian 9 et Nextcloud 13Partie 5. Mise à jour 2019 - PHP 7.2, MariaDB 10.4 et Nextcloud 17
Navigation rapide dans les chapitres
PréfaceInstallation du logicielConfigurer le serveur Web Apache2 et y accéder via les protocoles HTTP et HTTPSRéglage SQLConfiguration PHPParamètres d'accès SSHProtection d'accèsRéférence du serveur WebRéférence MySQLMaté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.
RemarqueSuite à 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 hubInstallation du serveur Web Apache2:
# apt-get install apache2 apache2-docEt 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-php5Pendant 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:
# ifconfigDans 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 80Encore 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-defaultActivez l'hĂ´te virtuel:
# a2enssite 000-defaultAprès chaque modification, vous devez redémarrer les configurations d'hôte ou redémarrer le serveur:
# service apache2 reloadou
# service apache2 restartAinsi, 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.confLe 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.htmlEt supprimez le répertoire:
# rm / var / www / htmlNous redémarrons le serveur pour que les nouveaux paramètres par défaut de l'hôte virtuel prennent effet:
# service apache2 restartCréez un fichier:
# nano /var/www/.htaccessDans 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/.htaccessEt 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.crtCette 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 2048Les 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.confPour 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 opensslEn conséquence, j'ai obtenu le texte suivant:
Configurez maintenant l'hĂ´te virtuel avec le support SSL:
# nano /etc/apache2/sites-available/default-ssl.confJ'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 443Activez les modules apache pour la prise en charge SSL et HSTS:
# a2enmod ssl
# en-tĂŞtes a2enmodActiver la configuration SSL:
# a2enconf ssl-paramsActiver l'hĂ´te virtuel compatible SSL:
# a2ensite default-sslRedémarrez le serveur pour accepter tous les nouveaux paramètres:
# service apache2 restartLe 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/.htaccessDans 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/.htaccessEt 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 restartMaintenant, 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éécritureOuvrez maintenant le fichier 000-default.conf:
# nano /etc/apache2/sites-available/000-default.confEt 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 restartCréez un fichier:
# nano /var/www/.htaccessDans 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_installationAprè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 -pAprè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.iniEt 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-memcachedRegardons les paramètres de configuration du service:
# nano /etc/memcached.confDans 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 restartVous devez maintenant vous assurer que le service fonctionne. Pour ce faire, créez un fichier:
# nano /var/www/info.phpEt 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 memcachedLe terminal doit renvoyer une chaîne contenant des paramètres memcached.
Création d'un talon de messagerie pour PHPDans 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.shAvec le contenu suivant:
Rendez ce fichier exécutable:
# chmod + x /usr/bin/fake_semdmail.shCré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 / tmpEt nous attribuons des droits pour que le serveur puisse écrire des fichiers dans ce dossier:
# chmod 777 -R / var / mail / sendmailMaintenant, 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 sshOuvrons 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 106Pour organiser l'accès pour notre utilisateur utilisateur, ouvrez le fichier:
# nano / etc / ssh / sshd_configEt 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 restartMaintenant, 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 reloadtest:
# a2ensite test
# a2dissite testtest:
# a2enconf test
# a2disconf test( : «Syntax OK»):
# apache2ctl configtestHTTP 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.comHTTP :
# nano /etc/apache2/sites-available/000-default.confHTTPS :
# nano /etc/apache2/sites-available/default-ssl.conf/VirtualHost:
<Directory /var/www/site.com> Options FollowSymLinks AllowOverride All Require all granted </Directory>
-:
# service apache2 restarthttp:// 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.comHTTP :
# 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.comHTTP :
# a2ensite site.com.confHTTPS :
# a2ensite site.com-ssl.conf-:
# service apache2 restarthttp:// 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> exithttp:// 127.0.0.1/phpmyadmin user123/ pass123. db123.
root mysql c pass123 pass456:
# mysqladmin -uroot -ppass123 password pass456user123 c pass123 pass456:
# mysqladmin -uuser123 -ppass123 password pass456user123:
mysql> DROP USER 'user123'@'localhost';db123:
mysql> DROP DATABASE `db123`;
fail2ban
:
# service fail2ban restart:
# fail2ban-client statussshd:
# 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.