Software – HTTPD Apache 2.4 als Reverse Proxy unter Linux (selbst Kompilieren)

In der heutigen Zeit spielt Sicherheit eine immer größere Rolle in der IT. Gerade Server- Client Anwendungen, die über das Internet miteinander kommunizieren, sind der Gefahr ausgesetzt angegriffen zu werden. apache_logUm seine Server Anwendungen zu schützen ist es sinnvoll, die Umgebung vom Internet abzuschotten. Nur die gewünschten Kommunikationswege leitet man über eine DMZ (Demilitarized Zone) über einen entsprechenden Reverse Proxy weiter. Es gibt verschiedene Möglichkeiten einen Reverse Proxy zu realisieren. In diesem HowTo stelle ich den HTTPD Apache in der Version 2.4 für Linux vor. Der Schwerpunkt in diesem Bericht liegt in der Installation und Konfiguration der Anwendung.

Bevor wir den HTTPD Apache installieren können, müssen wir vorher einige Voraussetzungen erfüllen. Wir benötigen einige zusätzliche Includes und Libaries um die Sources des HTTPD Apaches zu übersetzen. Zum übersetzen benötigen wir einen C und einen C++ Compiler von der freien Software Bewegung GNU. Die Compiler müssen mit root und einem für das entsprechende Linux vorgesehene RPM-Paketmanagement-Programm installiert werden. Damit die Applikationen mit 64Bit übersetzt werden, sind die folgenden Umgebungsvariablen in der .bashrc zu setzen:

  • export CFLAGS=-m64
  • export CPPFLAGS=-m64

Jetzt können die folgenden Tools, mit den für den HTTPD Apache benötigten Includes und Libaries, übersetzt/installiert werden. Dies geschieht alles nach dem gleichen Prinzip; ./configure – ./make – ./make install. Wobei bei configure entsprechende Parameter wie –prefix= und/oder –with-[…]= gesetzt werden sollten.

  • PCRE (http://www.pcre.org/)
  • APR + APR-Util (https://apr.apache.org/)
  • libxml12 (http://xmlsoft.org/downloads.html)

Nachdem alle Voraussetzungen geschaffen worden, können wir den HTTPD Apache übersetzen/installieren. Die Prozedur ist ähnlich der Tools Übersetzungen. Da wir aber bei ./configure zu viele Parameter angeben müssten, erstellen wir eine config.nice Datei im Source Ordner des HTTPD Apaches mit den entsprechenden Parametern:

#! /bin/sh
#
# Created by configure

CFLAGS="-m64"; export CFLAGS
CPPFLAGS="-m64"; export CPPFLAGS
"./configure" \
"--prefix=/home/user/httpd" \
"--with-pcre=/home/user/pcre" \
"--with-apr-util=/home/user/apr-util" \
"--with-apr=/home/user/apr" \
"--with-libxml2=/home/user/libxml2/include" \
"--enable-proxy" \
"--enable-rewrite" \
"--enable-proxy-html" \
"--enable-proxy-http" \
"--enable-proxy-connect" \
"--enable-cache" \
"--enable-xml2enc" \
"CFLAGS=-m64" \
"CPPFLAGS=-m64" \
"$@"

Nachdem die Datei erstellt und befüllt wurde, muss die Datei ausgeführt werden. Mit diesem Schritt werden die Optionen für die Übersetzung gesetzt – Pfade zu den zusätzlichen Includes und Libaries, zusätzliche Module die wir für unseren HTTPD Apache brauchen und die enstprechenden Compiler Optionen.

Jetzt können wir den Apache mit „make“ übersetzen und mit „make install“ installieren.

Als nächsten Schritt muss der installierte HTTPD Apache zum Reverse Proxy konfiguriert werden. Ich empfehle 2 seperate Konfigurationsdateien zu pflegen – httpd.conf und eine proxy.conf

Beispiel httpd.conf:

ServerRoot "/home/user/httpd"
PidFile "/home/user/httpd/conf/httpd.pid"

Listen 8080

LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule reqtimeout_module modules/mod_reqtimeout.so
LoadModule filter_module modules/mod_filter.so
LoadModule mime_module modules/mod_mime.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule env_module modules/mod_env.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule version_module modules/mod_version.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
LoadModule unixd_module modules/mod_unixd.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so

<IfModule unixd_module>
User daemon
Group daemon
</IfModule>

ServerAdmin user@localhost
ServerName 217.111.111.111
#UseCanonicalName On

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

DocumentRoot "/home/user/httpd/htdocs"
<Directory "/home/user/httpd/htdocs">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "/home/user/httpd/logs/cas_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 "/home/user/httpd/logs/cas_access_log" common

    TraceEnable extended
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/home/user/httpd/cgi-bin/"
</IfModule>

<IfModule cgid_module>
    #Scriptsock logs/cgisock
</IfModule>

<Directory "/home/user/httpd/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
</IfModule>

Include /home/user/httpd/config/extra/httpd-mpm.conf

Include /home/user/httpd/config/proxy.conf
<IfModule proxy_html_module>
</IfModule>

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

Beispiel proxy.conf:

LoadFile        /home/user/libxml2/lib/libxml2.so
LoadModule      xml2enc_module          modules/mod_xml2enc.so
LoadModule      proxy_html_module       modules/mod_proxy_html.so

# Here's the declaration for W3C HTML 4.01 and XHTML 1.0
ProxyHTMLLinks  a               href
ProxyHTMLLinks  area            href
ProxyHTMLLinks  link            href
ProxyHTMLLinks  img             src longdesc usemap
ProxyHTMLLinks  object          classid codebase data usemap
ProxyHTMLLinks  q               cite
ProxyHTMLLinks  blockquote      cite
ProxyHTMLLinks  ins             cite
ProxyHTMLLinks  del             cite
ProxyHTMLLinks  form            action
ProxyHTMLLinks  input           src usemap
ProxyHTMLLinks  head            profile
ProxyHTMLLinks  base            href
ProxyHTMLLinks  script          src for
ProxyHTMLEvents onclick ondblclick onmousedown onmouseup onmouseover onmousemove onmouseout onkeypress \
                onkeydown onkeyup onfocus onblur onload onunload onsubmit onreset onselect onchange

# Allgemeine unspezifische Proxy-Anfragen verbieten:
ProxyRequests Off
# ProxyPreserveHost On

# Application <ProxyPass(Reverse)> </Internet URL> <internal link>
ProxyPass /application http://servername:20030/application
ProxyPassReverse /application http://servername:20030/application

Nachdem in der proxy.conf alle Proxy Regeln stehen, kann der HTTPD Apache nun über „./home/user/httpd/bin/apachectl start“ gestartet werden.

Mit „ps -ef | grep $USER“ sieht man jetzt alle gestarteten Apache Prozesse.

1 Kommentar


  1. Awesome article! I want people to know just how good this information is in your
    article. It’s interesting, compelling content.
    Your views are much like my own concerning this subject.

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.