Jusqu'à précédent, j'ai construit un environnement d'application Web avec PHP7.4 + MySQL8.0 sur Apache2.4, mais je dois également aborder la sécurité; ;
Avec le firewalld standard Linux, vous pouvez spécifier uniquement qui utilise quel port sans règles de commande difficiles comme iptables ou contrôle compliqué pour chaque fichier tel que SELinux, et sécurité de base dans le pare-feu. (Bien sûr, il est relativement sûr d'utiliser la sécurité avec un contrôle compliqué même si elle est intrusive ...)
Je voudrais également utiliser le cryptage de fichiers ensemble, mais il sera difficile d'en parler, donc cette fois je ne définirai le droit d'accès avec le pare-feu que par firewalld, chown.
De plus, dans cette vérification, ** je veux vérifier s'il est accessible à partir d'un autre segment de réseau, de sorte que le serveur Web ajoutera une autre carte réseau et ajoutera un autre segment de réseau ** (192.168.1.0/24) J'utilise, mais j'ai ajouté une autre carte réseau (bien que ce soit un pont virtuel) au serveur Web pour construire 192.168.5.0/24)
--Utilisateur installé en tant que root (dans ma vérification, il s'agit d'un compte administrateur appelé admin, et il est traité par sudo à partir de là)
--Client (principal): 192.168.1.11 --Client (côté extension): 192.168.5.2
Les autres packages requis sont installés à l'aide des commandes de package standard de la distribution (dnf, apt, etc.) et n'ont pas besoin d'être téléchargés individuellement.
Pour le téléchargement, vous pouvez accéder au site officiel, le télécharger à partir de là et le transférer par FTP, ou vous pouvez l'obtenir avec wget si vous connaissez l'URL du fichier à télécharger, mais la méthode d'acquisition est omise.
Au moment de la construction du précédent lui-même, je pense que les règles suivantes existent dans firewalld.
--Port 80 à partir de 192.168.1.0/24 (HTTP): autorisé --Port 443 (HTTPS) à partir de 192.168.1.0/24: autorisé --Autres que cela, il y en a qui autorisent des ports séparés tels que SSH et Samba, mais ils sont omis ici car ils ne sont pas liés au serveur Web.
À ce stade, même si vous ajoutez un nouveau réseau de 192.168.5.0/24 comme indiqué dans la figure «Adresse IP» dans «Conditions du serveur», vous ne devriez pas pouvoir y accéder car le pare-feu n'est pas ouvert.
Ici, pour accéder au serveur Web à partir du client (192.168.5.2), entrez l'adresse IP du port du côté extension du serveur Web, https (le port est 443): //192.168.5.1/. Bien entendu, il ressort clairement de la structure du réseau que le client du côté 192.168.5.0/24 ne peut pas accéder au côté principal (192.168.1.18).
Voir (* ॑ ꒳ ॑ *) ⋆ *
Maintenant, ajoutons une règle «Port 443 (HTTPS) de 192.168.5.0/24: Autoriser» au pare-feu du serveur Web afin qu'il puisse être autorisé même à ** 192.168.5.0/24 **
Utilisez la règle enrichie de firewalld pour identifier un segment de réseau et entrez une règle pour recevoir un port spécifique. Utilisez --add-rich-rule pour saisir la règle entre '~'.
# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.5.0/24" port port="443" protocol="tcp" accept'
Cela signifie que la famille IP est IPv4, la source est 192.168.5.0/24, le port 443, le protocole est TCP et la réception est autorisée.
--Port 80 à partir de 192.168.1.0/24 (HTTP): autorisé --Port 443 (HTTPS) à partir de 192.168.1.0/24: autorisé --Port 443 (HTTPS) à partir de 192.168.5.0/24: autorisé
L'écran ci-dessus est l'écran auquel j'ai essayé d'accéder dans cet état de pare-feu. Vous pouvez certainement y accéder! !! D'ailleurs, si vous voulez le rendre accessible en permanence, ajoutez l'option "--permanent" après "firewall-cmd", et la règle restera appliquée même si vous redémarrez.
Au fait, si vous souhaitez supprimer l'autorisation du port 443 (HTTPS) du réseau 192.168.5.0/24, utilisez --remove-rich-rule et placez la règle que vous souhaitez supprimer dans le '~'. Par exemple, dans IPv4, pour supprimer la règle autorisée sur le port 443 (TCP) de 192.168.5.0/24,
# firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.5.0/24" port port="443" protocol="tcp" accept'
Si vous entrez, vous ne pourrez pas accéder au port 443 (HTTPS) à partir de 192.168.5.0/24.
Ensuite, j'ai essayé ce genre d'expérience. Si vous souhaitez refuser le port 80 (HTTP) et ne laisser que le port 443 (HTTPS) autorisé sur le segment de réseau principal 192.168.1.0/24, IPv4, port 80 à partir de 192.168.1.0/24 Supprimer la règle "Autoriser (TCP)"
# firewall-cmd --remove-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="80" protocol="tcp" accept'
Fondamentalement, firewalld bloque tout ce qui n'existe pas dans la règle par défaut, donc s'il n'est pas répertorié dans la règle, il rejettera la réception (méthode de la liste blanche), comme mentionné ci-dessus, le port 80 de 192.168.1.0/24 Si ce n'est pas dans la règle, il sera inaccessible.
Par défaut dans Apache (lorsque la source est compilée et installée), l'utilisateur exécute "daemon". Utilisez ps -aux pour afficher une liste de tous les processus et utilisateurs, et limitez-vous à ceux sur lesquels "httpd" est en cours d'exécution, donc limitez-vous avec grep httpd.
# ps -aux | grep httpd
root 14249 0.0 0.4 121504 17124 ? Ss 17:15 0:00 /usr/local/apache2/bin/httpd -k start
daemon 14250 0.0 0.5 1332460 22448 ? Sl 17:15 0:00 /usr/local/apache2/bin/httpd -k start
daemon 14251 0.0 0.4 1330220 19460 ? Sl 17:15 0:00 /usr/local/apache2/bin/httpd -k start
daemon 14252 0.0 0.6 1332460 25428 ? Sl 17:15 0:00 /usr/local/apache2/bin/httpd -k start
admin 17782 0.0 0.0 8176 924 pts/0 S+ 18:45 0:00 grep --color=auto httpd
Comme mentionné ci-dessus, l'utilisateur qui exécute l'unité principale httpd "/ usr / local / apache2 / bin / httpd" est l'utilisateur par défaut "daemon".
Donc, si vous avez explicitement décidé qui exécutera Apache, j'ai édité httpd.conf pour savoir comment le modifier. Par exemple, si vous souhaitez exécuter Apache avec le nom d'utilisateur "apache" et le nom de groupe "users" (le nom du groupe est users car nous avons expérimenté openSUSE),
# vi /usr/local/apache2/conf/httpd.conf
httpd.conf
Démon utilisateur ← Remplacer par apache
Démon de groupe ← Remplacer par les utilisateurs
Ainsi, lorsque je redémarre Apache et vérifie à nouveau l'utilisateur exécutant httpd avec ps -aux,
# ps -aux | grep httpd
root 17985 0.0 0.4 121504 16944 ? Ss 18:48 0:00 /usr/local/apache2/bin/httpd -k start
apache 17986 0.0 0.3 1327980 16060 ? Sl 18:48 0:00 /usr/local/apache2/bin/httpd -k start
apache 17987 0.0 0.2 1327980 11980 ? Sl 18:48 0:00 /usr/local/apache2/bin/httpd -k start
apache 17988 0.0 0.2 1327980 11980 ? Sl 18:48 0:00 /usr/local/apache2/bin/httpd -k start
admin 18071 0.0 0.0 8176 836 pts/0 S+ 18:48 0:00 grep --color=auto httpd
Vous pouvez voir qu'apache exécute correctement httpd.
Maintenant que nous avons changé l'utilisateur en cours d'exécution d'Apache, nous voulons gérer ce que nous voyons et ce que nous ne voulons pas que les autres voient.
Par exemple, supposons que le dossier Apache htdocs est publié sur le Web et que les fichiers suivants y existent.
# cd /usr/local/apache2/htdocs
# ls -l
24 au total
-rw-r--r--1 utilisateurs admin 304 25 juin 17:43 connect.php
-rw-r--r--1 racine racine 45 12 juin 2007 index.html
-rw-r--r--1 racine racine 20 25 juin 17:14 phpi.php
-rw-r--r--1 racine racine 172 25 juin 18:52 some.html
-rw-r--r--1 utilisateurs admin 346 25 juin 17:45 test_form.html
-rw-r--r--1 utilisateurs admin 1271 25 juin 17:45 test_form.php
Alors disons que vous accédez à "some.html". Étant donné que le propriétaire est root et que l'autorisation est 644, ce paramètre signifie que n'importe qui peut accéder à "some.html", d'ailleurs, l'accès avec Apache ne lit que, n'écrit pas ou ne s'exécute pas, alors il suffit de lire Je vais.
L'utilisateur d'exécution d'Apache est apache. À ce moment-là, j'ai pu le lire correctement
J'ai donc laissé le propriétaire en tant que root et ai changé l'autorisation de "some.html" en 600 (le rendre illisible par les autres utilisateurs et uniquement disponible pour l'utilisateur).
# chmod 600 some.html
# ls -l
24 au total
-rw-r--r--1 utilisateurs admin 304 25 juin 17:43 connect.php
-rw-r--r--1 racine racine 45 12 juin 2007 index.html
-rw-r--r--1 racine racine 20 25 juin 17:14 phpi.php
-rw-------1 racine racine 172 25 juin 18:52 some.html
-rw-r--r--1 utilisateurs admin 346 25 juin 17:45 test_form.html
-rw-r--r--1 utilisateurs admin 1271 25 juin 17:45 test_form.php
Cette fois, il est devenu interdit et ne pouvait pas être lu. C'est évident car l'utilisateur d'exécution Apache apache n'a pas le droit de lire celui de root.
Maintenant, créez "some.html" appartenant à l'utilisateur d'exécution d'Apache, modifiez-le pour qu'il ne puisse pas être lu par d'autres utilisateurs, et vérifiez s'il est à nouveau accessible.
# chown apache:users some.html
# ls -l
24 au total
-rw-r--r--1 utilisateurs admin 304 25 juin 17:43 connect.php
-rw-r--r--1 racine racine 45 12 juin 2007 index.html
-rw-r--r--1 racine racine 20 25 juin 17:14 phpi.php
-rw-------1 utilisateurs apache 172 25 juin 18:52 some.html
-rw-r--r--1 utilisateurs admin 346 25 juin 17:45 test_form.html
-rw-r--r--1 utilisateurs admin 1271 25 juin 17:45 test_form.php
Cette fois, j'ai pu accéder à (´ • ̥ ̫ • ̥ `) Vous pouvez le lire car c'est votre propre fichier
Enfin, vérifions avec html que personne n'autorise la lecture Définissez l'autorisation "some.html" sur 000 ou 200 et n'autorisez personne à lire
# chmod 200 some.html
# ls -l
24 au total
-rw-r--r--1 utilisateurs admin 304 25 juin 17:43 connect.php
-rw-r--r--1 racine racine 45 12 juin 2007 index.html
-rw-r--r--1 racine racine 20 25 juin 17:14 phpi.php
--w-------1 utilisateurs apache 172 25 juin 18:52 some.html
-rw-r--r--1 utilisateurs admin 346 25 juin 17:45 test_form.html
-rw-r--r--1 utilisateurs admin 1271 25 juin 17:45 test_form.php
C'est vrai (˙꒳ ˙ᐢ) Si vous ne permettez pas de lire vous-même, cela se produira certainement ...
Nous avons construit le middleware, et la prochaine chose à venir est de prendre des dispositions pour savoir qui autorise / refuse quoi, donc Qiita devrait définitivement définir les droits d'accès avec firewalld et le propriétaire comme base. Je voulais aussi le mettre ici
Il semble que le cryptage soit également inclus dans le domaine de la sécurité avancée, mais si vous décidez de crypter le système de fichiers, il y aura des problèmes complexes concernant la saisie du mot de passe et la synchronisation des clés, donc je pense que ce n'est pas recommandé pour les débutants. J'ai pensé, donc j'ai gardé le cryptage minimum nécessaire dans la méthode de construction HTTPS (´ • ̥ ̫ • ̥ `)
Eh bien, l'important est de ne rien mettre qui poserait problème en cas de fuite, de ne pas ouvrir de ports inutiles, c'est une prémisse absolue ...
Recommended Posts