

<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>HTTP &#8211; OmnesPRO GmbH</title>
	<atom:link href="https://www.omnespro.ch/post/tag/http/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.omnespro.ch</link>
	<description></description>
	<lastBuildDate>Tue, 09 Jun 2026 23:46:45 +0000</lastBuildDate>
	<language>de-CH</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://www.omnespro.ch/wp-content/uploads/2023/07/cropped-OmnesPRO-final-large-32x32.png</url>
	<title>HTTP &#8211; OmnesPRO GmbH</title>
	<link>https://www.omnespro.ch</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>transparenter Reverse-Proxy mit SNIProxy</title>
		<link>https://www.omnespro.ch/post/transparenter-reverse-proxy-mit-sniproxy/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 27 Dec 2023 21:14:29 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[gewusstwie]]></category>
		<category><![CDATA[hint]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[SNI]]></category>
		<category><![CDATA[tom.aeby@omnespro.ch]]></category>
		<category><![CDATA[Transparent]]></category>
		<category><![CDATA[Webserver]]></category>
		<guid isPermaLink="false">https://omnespro.fuertests.ch/post/transparenter-reverse-proxy-mit-sniproxy/</guid>

					<description><![CDATA[Vor einer Weile haben wir uns mit SNIProxy als einem sehr einfachen Reverse Proxy&#160;befasst. Ein Nachteil, den die Verwendung von Reverse Proxies f&#252;r Web-Zugriffe oft hat, ist, dass aus Sicht des dahinterliegenden Webservers Requests nicht vom eigentlichen Client zu kommen scheinen, sondern eben vom Proxy-Rechner. Das ist unpraktisch, da in Logs und Statistiken so der [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>Vor einer Weile haben wir uns mit <a href="https://www.omnespro.ch/post/einfacher-reverse-proxy-als-weiche-zu-mehreren-webservern-und-verteilte-ssl-zertifikate">SNIProxy als einem sehr einfachen Reverse Proxy&#160;befasst</a>. Ein Nachteil, den die Verwendung von Reverse Proxies f&#252;r Web-Zugriffe oft hat, ist, dass aus Sicht des dahinterliegenden Webservers Requests nicht vom eigentlichen Client zu kommen scheinen, sondern eben vom Proxy-Rechner. Das ist unpraktisch, da in Logs und Statistiken so der eigentliche Client nicht auftaucht.</p>
<p>&#010;&#010;</p>
<p>Manche Proxies kennen M&#246;glichkeiten, um dieses Problem zu umgehen. SNIProxy l&#228;sst sich in einem transparenten Modus betreiben, in dem die Quell-Adresse der Verbindungen beibehalten wird.</p>
<p>&#010;&#010;</p>
<h3>SNIProxy im transparenten Modus</h3>
<p>&#010;&#010;</p>
<p>SNIProxy in den transparenten Modus zu versetzen ist auf den ersten Blick ganz einfach: &#220;ber die Konfigurationsdirektive <em>source client</em>&#160;im passenden Listener teilt man dem SNIProxy mit, er m&#246;chte doch bitte als Quell-Adresse f&#252;r die Verbindungen gegen innen die urspr&#252;ngliche IP des Clients verwenden, z.B. so:</p>
<p>&#010;&#010;</p>
<pre><code>listen 192.168.1.15 80 {&#010;   proto http&#010;   source client&#010;....&#010;</code></pre>
<p>&#010;&#010;</p>
<p>Als Beispiel verwenden wir 192.168.1.15 als IP f&#252;r den Proxy. Es gibt dabei allerdings die eine oder andere H&#252;rde zu umschiffen:</p>
<p>&#010;&#010;</p>
<ul>&#010;&#009;</p>
<li>Der transparente Modus funktioniert nur bei Listenern, die nur eine IP-Version verwenden. Es ist also notwendig, separate Listener f&#252;r IPv4- und IPv6-Verbindungen einzurichten. In obigem Beispiel geben wir explizit die Adresse an, auf die der Listener h&#246;ren soll, d.h. wir legen uns in diesem Beispiel auf IPv4 fest.</li>
<p>&#010;&#009;</p>
<li>Die Antwort-Pakete der Webserver, auf die SNIProxy weiterverbindet, m&#252;ssen durch den Proxy-Rechner geroutet werden. Im einfachsten Fall wird dieser als Router aufgesetzt und die Webserver erhalten ihn als Default-Gateway.</li>
<p>&#010;&#009;</p>
<li>Auf dem Proxy-Rechner selbst muss per IPTables daf&#252;r gesorgt werden, dass die Pakete auch tats&#228;chlich durch den transparenten Proxy laufen.<br />&#010;&#009;&#009;&#160;</li>
<p>&#010;</ul>
<p>&#010;&#010;</p>
<h3>iptables und Policy Route&#160;auf dem Proxy-Rechner</h3>
<p>&#010;&#010;</p>
<p>Damit der Transparentmodus richtig funktioniert, m&#252;ssen Pakete passend geleitet werden. Dies geschieht durch eine separate Routing-Tabelle, auf die Pakete per Markierung durch iptables geleitet werden:</p>
<p>&#010;&#010;</p>
<pre><code>iptables -t mangle -N DIVERT&#010;iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT&#010;iptables -t mangle -A DIVERT -j MARK --set-mark 1&#010;iptables -t mangle -A DIVERT -j ACCEPT&#010;&#010;ip rule add fwmark 1 lookup 100&#010;ip route add local 0.0.0.0/0 dev lo table 100&#010;</code></pre>
<p>&#010;&#010;</p>
<p>Auf dem Proxy-Rechner muss ausserdem Forwarding eingeschaltet sein, z.B. durch folgende Eintr&#228;ge in /etc/sysctl.conf:</p>
<p>&#010;&#010;</p>
<pre><code>net.ipv4.ip_forward=1&#010;net.ipv6.conf.all.forwarding=1&#010;</code></pre>
<p>&#010;&#010;</p>
<h3>&#010;&#009;Webtraffic auf den Webservern durch den Proxy umleiten</h3>
<p>&#010;&#010;</p>
<p>Im einfachsten Fall wird ganz einfach die Default-Route der Webserver auf den Proxy gelegt. Das ist nicht immer praktikabel. Eine Variante davon ist, lediglich die Antworten des Webservers &#252;ber den Proxy umzuleiten. Auch dies gelingt mit einer Policy-Route und einer iptables-Markierung, etwa so:</p>
<p>&#010;&#010;</p>
<pre><code>iptables -t mangle -A OUTPUT -p tcp --sport 443 -j MARK --set-mark 0x8&#010;iptables -t mangle -A OUTPUT -p tcp --sport 80 -j MARK --set-mark 0x8&#010;&#010;ip rule add fwmark 8 lookup 101&#010;ip route add 192.168.1.15 dev eth0 table 101&#010;ip route add default via 192.168.1.15 table 101&#010;</code></pre>
<p>&#010;&#010;</p>
<p>Auch hier gegen wir als Beispiel wieder vom auf der Adresse 192.168.1.15 laufenden Proxy aus und leiten alle ausgehenden Pakete mit Quellport 80 oder 443 auf diesen um.</p>
<p>&#010;</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>einfacher Reverse Proxy als Weiche zu mehreren Webservern und verteilte SSL-Zertifikate</title>
		<link>https://www.omnespro.ch/post/einfacher-reverse-proxy-als-weiche-zu-mehreren-webservern-und-verteilte-ssl-zertifikate/</link>
		
		<dc:creator><![CDATA[]]></dc:creator>
		<pubDate>Wed, 27 Dec 2023 21:02:53 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[gewusstwie]]></category>
		<category><![CDATA[hint]]></category>
		<category><![CDATA[HTTP]]></category>
		<category><![CDATA[HTTPS]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[SNI]]></category>
		<category><![CDATA[SSL]]></category>
		<category><![CDATA[tom.aeby@omnespro.ch]]></category>
		<category><![CDATA[Webserver]]></category>
		<guid isPermaLink="false">https://omnespro.fuertests.ch/post/einfacher-reverse-proxy-als-weiche-zu-mehreren-webservern-und-verteilte-ssl-zertifikate/</guid>

					<description><![CDATA[Herausforderung mehrere Webserver stellen Websites/Webanwendungen/Webdienste zur Verf&#252;gung aus Sicht des Anwenders/Netztopologie sollen all diese zum einem einzigen&#160;Knoten zusammengefasst sein &#8211; z.B. aus Gr&#252;nden der Sicherheit, der Flexibili&#228;t (Umzug von Webdiensten ohne DNS-&#196;nderungen), oder Adressknappheit nebst unverschl&#252;sseltem HTTP soll unbedingt auch HTTPS unterst&#252;tzt werden &#160; Ansatz: Reverse Proxy Die logische Antwort auf eine solche Herausforderung stellt [&#8230;]]]></description>
										<content:encoded><![CDATA[<h3>Herausforderung</h3>
<ul>
<li>mehrere Webserver stellen Websites/Webanwendungen/Webdienste zur Verf&uuml;gung</li>
<li>aus Sicht des Anwenders/Netztopologie sollen all diese zum einem einzigen&nbsp;Knoten zusammengefasst sein &#8211; z.B. aus Gr&uuml;nden der Sicherheit, der Flexibili&auml;t (Umzug von Webdiensten ohne DNS-&Auml;nderungen), oder Adressknappheit</li>
<li>nebst unverschl&uuml;sseltem HTTP soll unbedingt auch HTTPS unterst&uuml;tzt werden</li>
</ul>
<p>&nbsp;</p>
<h3>Ansatz: Reverse Proxy</h3>
<p>Die logische Antwort auf eine solche Herausforderung stellt ein Reverse Proxy dar, der aus Sicht von ausserhalb alle Web-Anfragen per HTTP und HTTPS entgegennimmt und diese an die internen Server weiterreicht. Typischerweise kommen hier Produkte wie Apache oder NGINX zum Einsatz.</p>
<p>Der klassische Ansatz hat auch Nachteile:</p>
<ul>
<li>alle Requests werden zweifach bearbeitet, einmal vom Proxy, einmal vom eigentlichen Webserver</li>
<li>Inkompatibilit&auml;ten machen dem Admin das Leben schwer</li>
<li>die Latenz steigt, die Performance leidet</li>
<li>sehr flexible L&ouml;sung mit entsprechend aufw&auml;ndiger Konfiguration</li>
<li>SSL-Zertifikate und -Schl&uuml;ssel m&uuml;ssen auf dem Reverse-Proxy vorliegen (das kann auch ein Vorteil sein)</li>
</ul>
<p>&nbsp;</p>
<h3>leichtgewichtige&nbsp;Variante: Reverse Proxying mit SNIProxy</h3>
<p><a href="https://github.com/dlundquist/sniproxy">SNIProxy</a> ist ein simpler Proxy mit sehr &uuml;berschaubarem Funktionsumfang und entsprechend einfacher Konfiguration. Als &quot;Border Proxy&quot; zwischen Anwender/Anwendung und Webserver erlaubt er es, abh&auml;ngig vom Servernamen (&quot;Virtual Host&quot;) Requests 1:1 an den dazu passenden Webserver weiterzureichen &#8211; und zwar sowohl HTTP- als auch HTTPS-basierte. Anders als vollwertige Reverse Proxies verarbeitet er selber die Anfragen nicht, sondern reicht sie unver&auml;ndert an den jeweiligen Webserver durch. S&auml;mtliche typischen Kompatibilit&auml;tsprobleme entfallen und Probleme mit Performance oder Latenz entfallen.</p>
<p>Da der SNIProxy auch SSL-Verkehr nicht selber auswertet, sondern lediglich den per SNI &uuml;bermittelten Servernamen auswertet und den Aufbau der SSL-Verbindung dem Zielserver &uuml;berl&auml;sst, ben&ouml;tigt er keinerlei SSL-Konfiguration &#8211; diese wird wie gewohnt auf den eigentlichen Webservern durchgef&uuml;hrt.</p>
<p>Nat&uuml;rlich sind&nbsp;auf Grund der einfachen Funktion auch die Einsatzszenarien begrenzt. Z.B. erlaubt SNIProxy <strong>nicht</strong>:</p>
<ul>
<li>URLs umzuschreiben</li>
<li>Requests vorzufiltern und etwaige gef&auml;hrliche Requests bereits auf dem Proxy zu blockieren</li>
</ul>
<p>Eine simple Konfiguration von SNIProxy k&ouml;nnte so aussehen:</p>
<pre><code>user daemon

pidfile /var/run/sniproxy.pid

listen 80 {
   proto http
   table hosts
   access_log {
     filename /var/log/sniproxy/access.log
   }
}

listen 443 {
   proto tls
   table hosts
   access_log {
     filename /var/log/sniproxy/access.log
   }
}

table hosts {
   server1.example  192.168.1.13
   server2.example 192.168.1.14
}
</code></pre>
<p>D.h. SNIProxy h&ouml;rt auf die Ports 80 und 443 und leitet Anfragen abh&auml;ngig vom vom Client angesprochenen Servernamen auf die internen Adressen 192.168.1.13 oder 192.168.1.14 um (auf denselben Port wie beim urspr. Request).</p>
<p>&nbsp;</p>
<h3>IP-Adresse loggen / transparenter Proxy</h3>
<p>Ein Problem, das im Zusammenhang mit Reverse Proxies regelm&auml;ssig auftritt, ist, dass es f&uuml;r den Webserver hinter dem Proxy so aussieht, als w&uuml;rde der Request vom Proxy selbst kommen. Entsprechend landet&nbsp;in den Log-Files des Webservers die IP-Adresse des Proxies, Mechanismen wie Sperren bei wiederholt falschen Login-Versuchen o.&auml;. betreffen alle Requests, und last-but-not-least sind Logauswertungen mit Tools wie <a href="http://www.webalizer.org">Webalizer</a> oder <a href="http://www.awstats.org">AWStats</a> relativ nutzlos.</p>
<p>SNIProxy bietet als Ausweg aus diesem Dilemma die M&ouml;glichkeit an, Verbindungen so durchzuschleifen, dass aus Sicht des Webservers der Zugriff von der Original-IP des Clients aus erfolgt. In einem der n&auml;chsten Beitr&auml;ge hier werden wir ein entsprechendes Setup beschreiben.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
