2 votes

Comment utiliser en toute sécurité apache2 pour proxyer plusieurs sites web ?

Désolé, j'ai surtout travaillé avec NGINX jusqu'à présent. Je voudrais utiliser apache 2 (sur un hôte) pour transférer le trafic https et http vers plusieurs sites Web fonctionnant sur des VM VirtualBox. Chaque VM a plusieurs sites Web ou applications, tous avec peu de trafic (principalement des bots de toute façon), sur ou derrière des serveurs nginx / proxies inversés. Mon routeur n'autorise que quelques ports vers l'hôte (80, 8080, 443) et le pare-feu de l'hôte est également limité à quelques applications (actuellement VirtualBox par exemple). Je préférerais ne pas ouvrir plus de ports que 80(80) et 443.

Comment puis-je le faire en toute sécurité ? En principe, l'idée est dans la conf en dessous de mais est-ce suffisant ? Devrais-je émettre des commandes en ligne de commande ? (Comment)Peut-on le rendre plus sûr ? D'autres directives sont-elles nécessaires ?

httpd.conf :

<IfDefine SERVER_APP_HAS_DEFAULT_PORTS>
    Listen 8080
</IfDefine>
<IfDefine !SERVER_APP_HAS_DEFAULT_PORTS>
    Listen 80
</IfDefine>

LoadModule mpm_prefork_module libexec/apache2/mod_mpm_prefork.so
LoadModule authn_file_module libexec/apache2/mod_authn_file.so
LoadModule authn_core_module libexec/apache2/mod_authn_core.so
LoadModule authz_host_module libexec/apache2/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache2/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache2/mod_authz_user.so
LoadModule authz_core_module libexec/apache2/mod_authz_core.so
LoadModule access_compat_module libexec/apache2/mod_access_compat.so
LoadModule auth_basic_module libexec/apache2/mod_auth_basic.so
LoadModule reqtimeout_module libexec/apache2/mod_reqtimeout.so
LoadModule filter_module libexec/apache2/mod_filter.so
LoadModule mime_module libexec/apache2/mod_mime.so
LoadModule log_config_module libexec/apache2/mod_log_config.so
LoadModule env_module libexec/apache2/mod_env.so
LoadModule headers_module libexec/apache2/mod_headers.so
LoadModule setenvif_module libexec/apache2/mod_setenvif.so
LoadModule version_module libexec/apache2/mod_version.so
LoadModule proxy_module libexec/apache2/mod_proxy.so
LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
LoadModule proxy_http_module libexec/apache2/mod_proxy_http.so
LoadModule slotmem_shm_module libexec/apache2/mod_slotmem_shm.so
LoadModule unixd_module libexec/apache2/mod_unixd.so
LoadModule status_module libexec/apache2/mod_status.so
LoadModule autoindex_module libexec/apache2/mod_autoindex.so
<IfModule !mpm_prefork_module>
    #LoadModule cgid_module libexec/apache2/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
    #LoadModule cgi_module libexec/apache2/mod_cgi.so
</IfModule>
LoadModule negotiation_module libexec/apache2/mod_negotiation.so
LoadModule dir_module libexec/apache2/mod_dir.so
LoadModule alias_module libexec/apache2/mod_alias.so
LoadModule hfs_apple_module libexec/apache2/mod_hfs_apple.so

<IfModule unixd_module>
User _www
Group _www

</IfModule>

ServerAdmin you@example.com

ServerName localhost

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<FilesMatch "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
    Require all denied
</FilesMatch>

<Files "rsrc">
    Require all denied
</Files>
<DirectoryMatch ".*\.\.namedfork">
    Require all denied
</DirectoryMatch>

ErrorLog "/private/var/log/apache2/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "/private/var/log/apache2/access_log" common

</IfModule>

<IfModule alias_module>
    ScriptAliasMatch ^/cgi-bin/((?!(?i:webobjects)).*$) "/Library/WebServer/CGI-Executables/$1"

</IfModule>

<IfModule cgid_module>
    #Scriptsock cgisock
</IfModule>

<IfModule headers_module>
    RequestHeader unset Proxy early
</IfModule>

<IfModule mime_module>
    TypesConfig /private/etc/apache2/mime.types

    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz

</IfModule>

TraceEnable off

Include /private/etc/apache2/extra/httpd-mpm.conf

Include /private/etc/apache2/extra/httpd-vhosts.conf

<IfModule proxy_html_module>
Include /private/etc/apache2/extra/proxy-html.conf
</IfModule>

<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

Include /private/etc/apache2/other/*.conf

extra/httpd-vhosts.conf

ProxyRequests Off

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass        "/" "http://localhost:8082/"
    ProxyPassReverse "/" "http://localhost:8082/"
    ServerName abc.de
</VirtualHost>

<VirtualHost *:80>
    ProxyPreserveHost On
    ProxyPass        "/" "http://localhost:8081/"
    ProxyPassReverse "/" "http://localhost:8081/"
    ServerName fgh.ij
</VirtualHost>

J'ai également lu que je devais activer les modules d'apache2, en utilisant les instructions LoadModule (sur OSX) : qui sont nécessaires pour le forward proxying sécurisé ?

Je pense que j'aimerais aussi en faire usage : https://httpd.apache.org/docs/2.4/mod/mod_remoteip.html D'après la documentation, il semble que les clients mandataires (Internet, robots) ne soient pas identifiables par les serveurs Web, car ils s'identifient comme le serveur mandataire. Bien sûr, mes sites Web ont besoin de savoir qui les visite.

1voto

Piotr P. Karwasz Points 5067

Votre configuration semble correcte :

  • Puisque vous n'utilisez pas Apache en tant que proxy de transfert (vous n'avez pas l'extension ProxyRequests ), vous n'avez pas à vous soucier des droits d'accès au proxy. Votre Apache est configuré comme un reverse proxy .
  • Vous ne mentionnez pas la distribution que vous utilisez, mais en général, l'option en2mod y dis2mod sont des raccourcis permettant de créer des liens symboliques entre les fichiers /etc/apache2/mods-available y /etc/apache2/mods-enabled . Les fichiers de ce dernier répertoire sont inclus dans le fichier de configuration principal.
  • mod_remoteip est nécessaire si votre serveur Apache2 reçoit des demandes provenant d'un autre proxy inverse. Ce n'est pas votre cas : votre serveur Apache2 envoie aux serveurs en amont. Dans ce cas, vous devez regarder le ProxyAddHeaders qui est "sur par défaut.

Edit : Vous semblez confondre les concepts de forward et reverse proxy :

  • Si vous voulez que les clients demandent n'importe quelle URL par l'intermédiaire de votre serveur Apache2 (par exemple, utiliser votre serveur pour accéder à http://google.com ), vous avez besoin d'un mandataire de transfert .

  • Si vous souhaitez que votre serveur transfère de manière transparente les requêtes vers un ensemble préconfiguré de serveurs, vous avez besoin d'une fonction reverse proxy . Fondamentalement, un proxy inverse reflète le contenu d'un ensemble limité d'autres serveurs comme étant le sien.

0 votes

1. Vous n'avez pas besoin de ProxyRequests pour votre usage. Vous configurez un reverse proxy. 2. Sur les distributions Linux, les fichiers dans /etc/apache2/mods-available ne contiennent généralement qu'un LoadModule directive. Vous devez LoadModule proxy_module /path/to/module qui se trouve probablement déjà dans votre fichier de configuration.

0 votes

Oh je vois, vous avez peut-être raison. Les forward proxies sont pour le tunnelling https sur http ? Je suppose que j'aurais dû lire este avant este . Bien que cela m'échappe quelque peu. Vous pouvez m'expliquer ?

0 votes

Un forward proxy est utilisé si vous ne pouvez pas accéder directement au web (par exemple, un pare-feu restrictif qui bloque la connexion au port 80 ) ou pour des raisons de mise en cache. Vous le configurez dans votre navigateur, qui enverra toutes les demandes au serveur proxy, au lieu des serveurs web appropriés.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X