Reverse Proxy (Apache et Nginx)

Bonjour,

Merci pour votre aide.

L’objectif est de faire de l’hébergement de site avec plusieurs domaines avec une IP WAN. Le reverse Proxy permet d’avoir l’architecture Frontal / Back-Office.

Le serveur frontal :

Centralisation des certificats (Facilité de gestion)
Rediriger la demande vers le serveur.
Protéger les serveurs en back office
Répartiteur de charge.

Le serveur Back-office

Propose le service demandé (Web, SQL, FTP etc)
Plusieurs serveurs

Exemple:

Site1.com:80 > Frontal > Machine_1:80
Site1.com:443 > Frontal > Machine_1:81

Site2.com:80 > Frontal > Machine_2:80
Site2.com:443 > Frontal > Machine_2:81

En termes de sécurité, le serveur back-office sera protéger car le serveur frontal sera attaquer.
Et pour la gestion, j’ai juste à modifier le frontal.

Apache et Nginx sont capables de faire sans reverse proxy avec de simple vhost :wink:

Le reverse proxy en générale est là pour porter du ssl, effectuer une coupure avec l’extérieur, effectuer des opérations de filtrage/restrictions diverses, de la réécriture d’url …

1 J'aime

Bonjour clochette,

J’étais en train de réécrire mon message .

Protégé de quoi ?
Si tu héberges une application web qui présente une faille de sécurité, ce n’est pas la présence d’un mandataire inverse en frontal qui empêchera de l’exploiter.
Plus une architecture est complexe, plus sa sécurisation demandera du temps et de l’attention.

Tu parle d’hébergement , un serveur web ne peut à la fois être serveur du site et reverse proxy du même site.

Le reverse proxy permet d’avoir des règles de sécurité d’utilisation et de vérifier que les requêtes y sont conformes.
Qui plus est, ce n’est pas le cas ici mais encore, tu peux ainsi faire en sorte de ne pas exposer ton site web y compris de ne pas le mettre dans une zone à risque. Ton frontal est dans la DMZ exposée, ton serveur web dans une DMZ non exposée.

Il ne s’agit pas ici de protéger des failles de sécurité du développement du site, il n’en a jamais été question.

Dans une architecture multi-site, il est habituel, voir même conseillé d’utiliser des reverse-proxy en frontal pour éviter d’avoir à exposer directement sur le web les processus d’hébergement. C’est un classique de l’hébergement web depuis pas mal d’année.

Qui plus est, le RP anonymise le serveur web réel vis à vis du client extérieur. Ils intègrent maintenant assez facilement des anti-virus et autres type de scanners. Et au passage, peuvent intervenir sur l’encodage, le cache, la compression etc… Le tout sur un seul serveur et donc plus facile à configurer car centralisé.

Conformes à quoi ?
C’est à l’application web elle même de filtrer les requêtes.

Je ne comprends rien à ces histoire de DMZ exposée et non exposée. Une DMZ est par définition « exposée »…

Et donc c’est censé protéger de quoi ?

Les pratiques à la mode ne sont pas toujours les meilleures. Loin de là. Et la question initiale reste entière.

Cela n’anonymise rien du tout.
Et cela fait deux serveurs à configurer et à maintenir au lieu d’un seul. Ce qui constitue un gaspillage de ressources matérielles, énergétiques et humaines.

1 J'aime

conforme à des règles que tu établies justement dans la configuration du RP.

Une DMZ n’est pas forcement exposée directement à Internet. C’est ce qu’on appelle une DMZ Low Risk. Une DMZ exposée directement à internet est une DMZ High Risk.
Ceci en considérant les expositions entrante et/ou sortante.
Une DMZ peut être exclusivement sortante (par exemple pour un relai de messagerie de l’interne vers l’externe, et entrante pour les email venant de l’extérieur ou les sites web.
Le fait qu’une DMZ soit entrante ou sortante n’expose pas celle-ci aux mêmes risques.

On ne parle pas de mode mais de savoir faire architectural pratiqué par la quasi totalité des entreprises spécialisées et de leurs clients à travers le monde depuis près de 15 à 20 ans.

Bien sur que si, le client « pense » être directement en connexion avec le serveur Web alors qu’il ne l’est pas, et de plus il ne peut savoir où se trouve le serveur web lui-même. c’est anonymisation par offuscation si tu veux.

Ça fait un serveur à configurer pour la partie sécurité au lieu d’avoir à gérer la sécurité de chaque site web 1 par 1. Tu n’as juste qu’un serveur de plus à configurer en plus des différents serveurs web.

Un serveur web n’est pas capable par exemple de vérifier les flags des requetes (ack, syn, etc…), d’ailleurs certaines attaques sont basé dessus. Un RP est capable de le faire. Il peut ainsi verifier la conformité des requete au niveau de toutes les couches, ce qu’un serveur web ne sait pas faire.
Il fait du cache .
Il fait de l’anti-virus.
Il peut faire de la compression de flux (mieux qu’un serveur web) .
Il peut intervenir sur l’encodage.
Il peut faire de la ré-écriture à la volée, y compris sur des couches autres que la couche applicative (couche 7)
et bien sur la répartition de charge avec des critères ou des règles qui peuvent être assez complexes.

C’est ton point de vue, qui visiblement n’a pas été confronté à la réalité des entreprises.
Avec un seul site c’est compréhensible.
Dès que tu commence à avoir 3, 4 10 ou plus sites accessibles, le reverse proxy est une nécessite.

Le reverse prxy est aussi nécessaire si tu ne peux pas exposer directement ton site web sur internet et que tu es obligé de passer par une DMZ. Il y a un grand nombre de site web qui ne peuvent pas être directement exposés sur internet (pour des raisons de sécurité, de service, …).

Par ailleurs, quand tu dois avoir une garantie de service, avec un volume d’accès important, la répartition de charge devient une nécessité, ce qui est aussi une des fonction du RP.

Quand enfin sur tes sites web, tu dois gérer une quantité importante de certificats, la centralisation de cette gestion est très utile pour économiser des ressources humaines par exemple.

Un autre avantage des RP c’est aussi de pouvoir s’assurer qu’une requête en HTTPS est bien servie en HTTPS et qu’il n’y a pas de risque de voir une requêtes HTTP passer à travers, ce qui est bien plus fréquent qu’on ne le croit.

Tu as raison sur certains points dans le cas d’une grosse infrastructure. Pour de la répartition de charge, de la centralisation, etc. oui mais uniquement si c’est justifié par de réels besoins. Pour la sécurité, attention de na pas se croire protégé et de négliger la sécurité des machines qui sont derrière le proxy.
Ceci dit on peut parfaitement avoir 10 sites web ou plus sur le même serveur, sans reverse proxy, de manière tout à fait sécurisée.

Je me place dans le contexte de la question initiale où il s’agit visiblement d’une utilisation a des fins personnelles et avec les deux IP dans un un petit LAN.

1 J'aime

Tout à fait exact, l’un n’exclue pas l’autre. Ils s’additionnent.

dans le même contexte j’ai deux accès WEB et un accès SSH que je fais passer tous les trois à travers un reverse proxy HAproxy.
je n’expose jamais directement un site web sur le net. Même avec une seule machine.

Et l’objectif de départ de la demande inclue un reverse proxy.

Bonjour,

Merci à tous pour vos réponses et point de vu .

La demande initial était de pouvoir mettre un reverse proxy en https pour plusieurs site qui seront hébergés sur plusieurs machines virtuelles différentes. (Services Web et SQL)

D’autre part le reverse proxy à l’avantage de pouvoir centralisé les certificats SSL et de protéger les serveurs web en arrière plan (back-office) qui sont souvent de grosse passoire.

Je comprends qu’en terme de sécurité, le serveur frontal ne protège pas de certaines type d’attaque mais permet un minimum de protection (scanner de port et cie)

L’objectif est d’avoir un minimum de protection, gestion simplifiés et de transmettre pour l’extérieur seulement les services nécessaires à exposer.

Bien entendu qu’il le peut, c’est d’ailleurs ce que font une grande majorité des hébergeurs fournissant de l’espace d’hébergement à pas cher packagé …

Apache et Nginx peuvent assurer ces rôles tous les deux l’un comme l’autre.
Maintenant l’intérêt est limité certes mais c’est possible.

Je pense malgré tout qu’il vaut mieux apprendre à mettre en place un serveur web bien configuré et utiliser un applicatif sérieux au niveau des standards de sécurité du web, que de sortir une infra mal sécurisé qui finalement fera plus de mal que de bien.

C’est pas ce que j’appelle des backoffices.
Et en quoi Nginx et Apache (et ce ne sont de plus pas les seuls) à jour et configuré correctement sont des passoires ?

Se tenir informé des CVE c’est une partie du métier de sysadmin :see_no_evil: :hear_no_evil: :speak_no_evil:

1 J'aime

Quand je parle du serveur, je parle du processus serveur. Un même processus apache ne peux pas faire à la fois le reverse proxy et le service web.
mais un processus pour le serveur web et un processus pour le reverse proxy, ça oui.

sauf qu’aujourd’hui il n’y a pas une seule application correctement développée à ce niveau à cause des framework qui eux même ont des failles parfois importantes.
depuis 1991 que je regarde des sites web, moins de 1% sont ne serait ce que conforme aux normes HTTP (via les DTD des documents). Donc autant s’assurer avec un reverse proxy; c’est d’ailleurs à cause de ça qu’ils existe aussi (mais pas seulement).

en plus, certains modules (apache ou nginx ou autres), utilisés dans les applications, sont eux même avec des failles qui ne peuvent être corrigées par le code lui même.

Ils ne le sont pas forcement. Mais certains modules sont eux même avec des trous, le développement de l’application aura des trous à 99,99% de chance aujourd’hui. et enfin, par essence, le service en lui-même va mettre en avant des fonctionnements qu’aujourd’hui on peut contourner, devoyer, etc…

Tu n’as aucune chance d’avoir le même niveau de sécurité sans reverse proxy qu’avec.

Sauf que ça ne l’est pas des équipe de développement web :smiley: et que le sysadmin n’est pas un développeur :slight_smile: et qu’aucun des deux n’est en général un expert sécurité (quand par miracle ils en ont une formation :wink: )

Ça tombe bien Apache est multi-processus et si besoin multi-thread. On peut donc parfaitement avoir un site servi avec un unique service Apache2 en reverse proxy.

L’utilisation d’un mandataire inverse en frontal ne te prémunira pas contre les failles de sécurité des applications web. Tu l’as toi-même reconnu plus haut !

Quels sont ces modules ? Merci de ne pas me sortir des trucs exotiques non fournis par la distribution.

Bine sûr que si. Et dans l’absolu tu as même une meilleure sécurité en éliminant une surcouche inutile.

1 J'aime

Tu avais quel FAI en 1991 ?
Même en labo universitaire (à quelques très rares exceptions près) on avait pas accès au Web en 1991.

Ben non Renater y avait accès depuis quelques années déjà. je n’ai pas dit que j’y avait forcement accès chez moi.

Non désolé, et la pratique actuelle dans toutes les architectures sécurisées dans les entreprises est plutôt dans mon sens. Ce qui vaut mieux vu que c’est, entre autre, mon boulot.
Je peux te citer des exemple:
MAAF, MMA, harmonie Mutuelles pour les mutuelles/assurances
BNP, Crédit Agricole, Société générale pour les banques
renault, Fiat, PSA, Mercedex Benz pour l’automobile
EDF pour l’electricité et le nucleaire
GEFCO pour la logistique
Orange, SFR, Bouygues telecom pour les telecom
KLM, ADP pour le transport aerien
CNES pour l’aerospatial
Alsthom, cegelec, Daher pour l’industrie.
France 3 pour l’audio-visuel
Tikehau pour la finance.

Et ça ce n’est que pour ceux que je connais.

suexec, userdir, webdav par exemple?

Pour un certain nombre de cas si. par exemple, il y a moyen avec ALOHA (basé sur HAproxy et debian) de bloquer un certain nombre d’injection SQL, les attaques de SYN flood aussi.
Mais effectivement pas toutes. Mais mieux vaut avoir le RP qui tombe que le site lui même, mettant ainsi à découvert d’autres élement sensible. Si le RP tombe on ne peut pas aller plus loin (excepté si tout est sur la même machine et que tu as accès à la machine bien sur.

processus racine, pour être plus précis. d’où l’utilité de faire le RP avec un outil le site web avec un autre.

Ben voyons, Renater a été créé en 1993. Il va falloir un moment arrêter de raconter n’importe quoi. Cela va finir pas se voir.
Et je parlais du Web, pas de l’Internet. Si tu confonds les deux c’est grave.

Les premières pages web ont été mise en service en 1991/1992 il me semble, avant il y avait le wais et le gopher.

Oui c’est la création du GIE, ca ne veut pas dire qu’il n’y avait aucun backbone juste avant.
Pour moi ca remonte assez loin, 'autant plus que des accès j’en utilisé près d’une dizaine différents.
A deux ans près? le Web c’est internet, si tu as accès à Internet tu as accès au web à partir du moment où des serveurs répondent. Tu devrais savoir ça toi qui a la science infuse.
Et si tu parle de 1993 voir 94, à cette époque j’avais accès à Internet via RTC chez moi, pas souvent car cher. C’est d’ailleurs pour ça qu’à cette époque j’ai essayé de créer une fourniture d’accès en boucle locale pour réduire les couts d’accès de la ville où j’habitais. Fourniture d’accès qui a été créé à l’époque au final par un pote à moi. sa société existe toujours par ailleurs.
Et je ne parle même pas des passerelles BBS/Internet fréquente à cette période et avant.

C’est pas un concours de Ki Ka La Plus Grosse :wink:

Et j’entends bien que pour le meileur des mondes où l’utilisation d’un proxy inverse est nécessaire il est bien de pouvoir séparer les services et redonder les rôles etc …
Mais de la à poursuivre dans le deni … il est largement possible de faire propre avec un Serveur web, il n’est pas obligatoire de séparer les applicatifs avec Apache et/ou Nginx et encore moins obligatoire de séparer les applicatifs sur des serveurs différents.

Toutes les boîtes que tu cite ne sont pas sur un unique serveur et possèdent une galaxie de serveur hébergeant une multitude de rôles.

ON n’est très loin du besoin qui a été exposé précédement.

Propre ne veut pas dire sécurisé, surtout en utilisant des frameworks comme node.js par exemple. Quelque soit la propreté du code, dans le cas d’utilisation de SSL, le/les certificat(s) vont être manipulés par diverses parties du code, ou des modules, avec le RP, les applications ne manipulent plus les certificats.
Et un point que j’avais oublié, un RP permet d’éviter le scan direct de l’application, et les fingerprintings propres à l’application.
Le service RP doit être séparé du service web. S’ils ont le même processus racine, la séparation qui est de base le principe du reverse proxy n’existe alors plus. Autant dans ce cas là ne pas en mettre effectivement.

Je te renverrai à la même réponse que Bruno, node.js, ou typo3, Symphony etc … tant qu’il y a des failles il y a des failles.

:thinking: JE cherche, mais là je vois plus quoi dire …

Le principe de base … gérer le code statique est aussi une belle idée à faire avec du reverse proxy … la séparation n’est qu’une de ces fonctions, pas LA fonction d’un proxy inverse.

C’est sans doute pourquoi tu ne comprends pas ce que je t’explique et pourquoi je ne peux prendre pour argent comptant tes certitudes.