<?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>Dirks Blog</title>
	<atom:link href="http://blog.proesdorf.de/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.proesdorf.de</link>
	<description></description>
	<lastBuildDate>Wed, 20 Jul 2011 13:41:39 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Typo3: Grafiken und Absätze im RSS-Feed von &#8220;tt_news&#8221; anzeigen</title>
		<link>http://blog.proesdorf.de/2011/07/17/typo3-grafiken-und-absaetze-im-rss-feed-von-tt_news-anzeigen.html</link>
		<comments>http://blog.proesdorf.de/2011/07/17/typo3-grafiken-und-absaetze-im-rss-feed-von-tt_news-anzeigen.html#comments</comments>
		<pubDate>Sun, 17 Jul 2011 21:03:56 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[tt_news]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=278</guid>
		<description><![CDATA[Mittels der Typo3-Extension &#8220;tt_news&#8221; lassen sich nicht nur Nachrichten in eine Typo3-Seite integrieren, diese können auch mittels RSS-Feed exportiert werden. In der Dokumentation der Extension wird die Einrichtung eines RSS-Feeds unter &#8220;XML feeds from tt_news&#8221; beschrieben. Das Ergebnis ist ein RSS 2.0 Feed, ohne Grafik und ohne Absätze. Dieser Artikel beschreibt, wie dies zugefügt werden [...]]]></description>
			<content:encoded><![CDATA[<p>Mittels der Typo3-Extension &#8220;tt_news&#8221; lassen sich nicht nur Nachrichten in eine Typo3-Seite integrieren, diese können auch mittels RSS-Feed exportiert werden.</p>
<p>In der Dokumentation der Extension wird die Einrichtung eines RSS-Feeds unter &#8220;<a title="Documentation: News (EXT: news) Kapitel &quot;XML feeds from tt_news&quot;" href="http://typo3.org/documentation/document-library/extension-manuals/tt_news/3.0.1/view/1/4/#id2515185" target="_blank">XML feeds from tt_news</a>&#8221; beschrieben.</p>
<p>Das Ergebnis ist ein RSS 2.0 Feed, ohne Grafik und ohne Absätze. Dieser Artikel beschreibt, wie dies zugefügt werden können.<span id="more-278"></span></p>
<p>Der in der Dokumentation aufgelistete TypoScript Code dient als Basis für die weiteren Ausführungen:</p>
<p><strong>Konstanten:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tt_news <span style="color: #009900;">&#123;</span>
  displayXML <span style="color: #009900;">&#123;</span>
    rss2_tmplFile <span style="color: #339933; font-weight: bold;">=</span> EXT<span style="color: #339933; font-weight: bold;">:</span><span style="color: #000066; font-weight: bold;">tt_news</span><span style="color: #339933; font-weight: bold;">/</span>res<span style="color: #339933; font-weight: bold;">/</span>rss_2<span style="color: #339933; font-weight: bold;">.</span>tmpl
    xmlFormat <span style="color: #339933; font-weight: bold;">=</span> rss2
    xmlTitle <span style="color: #339933; font-weight: bold;">=</span> example<span style="color: #339933; font-weight: bold;">.</span>com<span style="color: #339933; font-weight: bold;">:</span> Latest News
    xmlLink <span style="color: #339933; font-weight: bold;">=</span> http<span style="color: #339933; font-weight: bold;">:</span><span style="color: #aaa; font-style: italic;">//example.com/</span>
    xmlDesc <span style="color: #339933; font-weight: bold;">=</span> Latest News
    xmlLang <span style="color: #339933; font-weight: bold;">=</span> en
    xmlIcon <span style="color: #339933; font-weight: bold;">=</span> fileadmin<span style="color: #339933; font-weight: bold;">/</span><span style="color: #000066; font-weight: bold;">tt_news_article</span><span style="color: #339933; font-weight: bold;">.</span>gif
    title_stdWrap<span style="color: #339933; font-weight: bold;">.</span>htmlSpecialChars <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    title_stdWrap<span style="color: #339933; font-weight: bold;">.</span>htmlSpecialChars<span style="color: #339933; font-weight: bold;">.</span>preserveEntities <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    subheader_stdWrap<span style="color: #339933; font-weight: bold;">.</span>stripHtml <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    subheader_stdWrap<span style="color: #339933; font-weight: bold;">.</span>htmlSpecialChars <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    subheader_stdWrap<span style="color: #339933; font-weight: bold;">.</span>htmlSpecialChars<span style="color: #339933; font-weight: bold;">.</span>preserveEntities <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    subheader_stdWrap<span style="color: #339933; font-weight: bold;">.</span>crop <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">100</span> <span style="color: #339933; font-weight: bold;">|</span> <span style="color: #339933; font-weight: bold;">...</span> <span style="color: #339933; font-weight: bold;">|</span> <span style="color: #cc0000;">1</span>
    subheader_stdWrap<span style="color: #339933; font-weight: bold;">.</span>ifEmpty<span style="color: #339933; font-weight: bold;">.</span>field <span style="color: #339933; font-weight: bold;">=</span> bodytext
    xmlLastBuildDate <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Darauf das die Werte für &#8220;xmlTitle&#8221;, &#8220;xmlLink&#8221; &#8220;xmlDesc&#8221;, &#8220;xmlLang&#8221; und &#8220;xmlIcon&#8221; den lokalen Gegebenheiten angepasst werden müssen, wird hier nicht weiter eingegangen. Die Einträge für &#8220;title_stdWrap&#8221; und &#8220;subheader_stdWrap&#8221; können auch, wenn dort nichts geändert werden soll, ganz gelöscht werden, da sie die Defaults der Extension darstellen.</p>
<p><strong>Setup:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">xmlnews</span> <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #990000; font-weight: bold;">PAGE</span>
<span style="color: #000066; font-weight: bold;">xmlnews</span> <span style="color: #009900;">&#123;</span>
  typeNum <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">100</span>
  <span style="color: #cc0000;">10</span> <span style="color: #339933; font-weight: bold;">&gt;</span>
  <span style="color: #cc0000;">10</span> <span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tt_news
  <span style="color: #cc0000;">10</span><span style="color: #339933; font-weight: bold;">.</span>pid_list <span style="color: #339933; font-weight: bold;">&gt;</span>
  <span style="color: #cc0000;">10</span><span style="color: #339933; font-weight: bold;">.</span>pid_list <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;"><span style="color: #009900; font-weight: bold;">$</span>plugin<span style="color: #339933; font-weight: bold;">.</span><span style="color: #000066; font-weight: bold;">tt_news</span>.pid_list</span><span style="color: #009900;">&#125;</span>
  <span style="color: #cc0000;">10</span><span style="color: #339933; font-weight: bold;">.</span>singlePid <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;"><span style="color: #009900; font-weight: bold;">$</span>plugin<span style="color: #339933; font-weight: bold;">.</span><span style="color: #000066; font-weight: bold;">tt_news</span>.singlePid</span><span style="color: #009900;">&#125;</span>
  <span style="color: #cc0000;">10</span><span style="color: #339933; font-weight: bold;">.</span>defaultCode <span style="color: #339933; font-weight: bold;">=</span> XML
  <span style="color: #000066; font-weight: bold;">config</span> <span style="color: #009900;">&#123;</span>
    disableAllHeaderCode <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    additionalHeaders <span style="color: #339933; font-weight: bold;">=</span> Content-type<span style="color: #339933; font-weight: bold;">:</span>text<span style="color: #339933; font-weight: bold;">/</span>xml
    no_cache <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    xhtml_cleaning <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">0</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Wichtig ist, das die Konstanten &#8220;pid_list&#8221; und &#8220;singlePid&#8221; in TypoScript definiert werden.</p>
<h2>Anpassung XML-Template</h2>
<p>Damit das XML-Template nicht bei einem Upgrade der Extension überschrieben wird, wird es in einem ersten Schritt eine Kopie erstellt:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">cp -a typo3conf/ext/tt_news/res/rss_2.tmpl fileadmin/tpl/ext/ttnews_rss_2.tmpl</pre></div></div>

<p>In das kopierte Template wird der Marker &#8220;###NEWS_IMAGE###&#8221; in den &#8220;content:encoded&#8221; Tag eingefügt, so dass dieser wie folgt aussieht:</p>
<pre>&lt;content:encoded&gt;&lt;![CDATA[###NEWS_IMAGE### ###NEWS_CONTENT###]]&gt;&lt;/content:encoded&gt;</pre>
<p>Das komplette Template lässt sich <a title="tt_news RSS 2.0 Template" href="/wp-content/uploads/2011/07/ttnews_rss_2.tmpl_.txt">hier</a> herunterladen.</p>
<p>Eingebunden wird das kopierte HTML-Template mittels:</p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tt_news<span style="color: #339933; font-weight: bold;">.</span>displayXM<span style="color: #339933; font-weight: bold;">.</span>rss2_tmplFile <span style="color: #339933; font-weight: bold;">=</span> fileadmin<span style="color: #339933; font-weight: bold;">/</span>tpl<span style="color: #339933; font-weight: bold;">/</span>ext<span style="color: #339933; font-weight: bold;">/</span>ttnews_rss_2<span style="color: #339933; font-weight: bold;">.</span>tmpl</pre></div></div>

<h2>Grafik anpassen</h2>
<p>Anstelle des Marker wird im RSS-Feed nun die Grafik des jeweiligen News-Artikels ausgegeben, wobei die Grafik nicht in ihrer Größe angepasst wird. Dies muss nun in TypoScript erfolgen.</p>
<p>Hierfür wird im Setup bei &#8220;plugin.tt_news.displayXML.image&#8221; eine maximale Weite oder Höhe definiert:</p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tt_news<span style="color: #339933; font-weight: bold;">.</span>displayXML <span style="color: #009900;">&#123;</span>
	image <span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">file</span><span style="color: #339933; font-weight: bold;">.</span>maxW <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">120</span>
		<span style="color: #aaa; font-style: italic;">#file.maxH = 90</span>
	<span style="color: #009900;">&#125;</span>
	xmlWebMaster <span style="color: #339933; font-weight: bold;">=</span> webmaster@example<span style="color: #339933; font-weight: bold;">.</span>com
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Wichtig ist, dass entweder die maximale Weite oder die maximale Höhe angeben werden. Wenn beide Werte angegeben werden, werden die Grafiken fest auf diesen Wert skaliert. In den meisten Fällen ist sicherlich die maximale Weite angeben, wenn der RSS-Feed aber automatisch (z.B. mittels <a title="Anwendung RSS Graffiti bei Facebook" href="http://www.facebook.com/RSS.Graffiti" target="_blank">RSS.Graffiti</a>) auf Facebook eingebunden werden soll, ist für maximale Höhe ein Wert von 80 oder mehr sinnvoll, da ansonsten die Grafiken von Facebook oft nicht eingebunden werden.</p>
<p>Die Angabe des Webmasters bei &#8220;xmlWebMaster&#8221; kann bei technischen Problemen für die Kontaktaufnahme sinnvoll sein.</p>
<p>Nun benötigen die Grafiken noch eine absolute URL. Hierfür wird im Setup den relativen Links ein Präfix geben:</p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">xmlnews</span><span style="color: #339933; font-weight: bold;">.</span>config<span style="color: #339933; font-weight: bold;">.</span>absRefPrefix <span style="color: #339933; font-weight: bold;">=</span> http<span style="color: #339933; font-weight: bold;">:</span><span style="color: #aaa; font-style: italic;">//example.com/</span></pre></div></div>

<h2>Absatz-Formatirung erhalten</h2>
<p>Ohne weitere Bearbeitung würde der gesamte News-Text als Fließtext, ohne jegliche Absätze, in den RSS-Readern erscheinen. Gerade bei längeren Texten kann dies dazu führen, dass der Text nicht mehr lesbar ist.</p>
<p>Abhilfe schafft hier der folgende Eintrag:</p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tt_news<span style="color: #339933; font-weight: bold;">.</span>displayXML<span style="color: #339933; font-weight: bold;">.</span>content_stdWrap<span style="color: #339933; font-weight: bold;">.</span><span style="font-weight: bold;">parseFunc</span> <span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #000066; font-weight: bold;">tt_content</span><span style="color: #339933; font-weight: bold;">.</span>text<span style="color: #339933; font-weight: bold;">.</span>20<span style="color: #339933; font-weight: bold;">.</span><span style="font-weight: bold;">parseFunc</span></pre></div></div>

<h2>Fertiges TypoScript</h2>
<p>Somit ergibt sich folgende TypoScipt:<br />
<strong>Konstanten:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tt_news <span style="color: #009900;">&#123;</span>
  displayXML <span style="color: #009900;">&#123;</span>
    pid_list <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">47</span>,<span style="color: #cc0000;">11</span>                          <span style="color: #aaa; font-style: italic;"># Wert den lokalen Gegebenheiten anpassen</span>
    singlePid <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">42</span>                            <span style="color: #aaa; font-style: italic;"># Wert den lokalen Gegebenheiten anpassen</span>
    rss2_tmplFile <span style="color: #339933; font-weight: bold;">=</span> fileadmin<span style="color: #339933; font-weight: bold;">/</span>tpl<span style="color: #339933; font-weight: bold;">/</span>ext<span style="color: #339933; font-weight: bold;">/</span>ttnews_rss_2<span style="color: #339933; font-weight: bold;">.</span>tmpl
    xmlFormat <span style="color: #339933; font-weight: bold;">=</span> rss2
    xmlTitle <span style="color: #339933; font-weight: bold;">=</span> example<span style="color: #339933; font-weight: bold;">.</span>com<span style="color: #339933; font-weight: bold;">:</span> Latest News       <span style="color: #aaa; font-style: italic;"># Wert den lokalen Gegebenheiten anpassen</span>
    xmlLink <span style="color: #339933; font-weight: bold;">=</span> http<span style="color: #339933; font-weight: bold;">:</span><span style="color: #aaa; font-style: italic;">//example.com/             # Wert den lokalen Gegebenheiten anpassen</span>
    xmlDesc <span style="color: #339933; font-weight: bold;">=</span> Latest News                     <span style="color: #aaa; font-style: italic;"># Wert den lokalen Gegebenheiten anpassen</span>
    xmlLang <span style="color: #339933; font-weight: bold;">=</span> de
    xmlIcon <span style="color: #339933; font-weight: bold;">=</span> fileadmin<span style="color: #339933; font-weight: bold;">/</span><span style="color: #000066; font-weight: bold;">tt_news_article</span><span style="color: #339933; font-weight: bold;">.</span>gif   <span style="color: #aaa; font-style: italic;"># Wert den lokalen Gegebenheiten anpassen</span>
    xmlLastBuildDate <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p><strong>Setup:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="typoscript" style="font-family:monospace;"><span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tt_news<span style="color: #339933; font-weight: bold;">.</span>displayXML <span style="color: #009900;">&#123;</span>
	image <span style="color: #009900;">&#123;</span>
		<span style="color: #aaa; font-style: italic;">#file.maxW = 120</span>
		<span style="color: #000066; font-weight: bold;">file</span><span style="color: #339933; font-weight: bold;">.</span>maxH <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">90</span>
	<span style="color: #009900;">&#125;</span>
	xmlWebMaster <span style="color: #339933; font-weight: bold;">=</span> webmaster@example<span style="color: #339933; font-weight: bold;">.</span>com  <span style="color: #aaa; font-style: italic;"># Wert den lokalen Gegebenheiten anpassen</span>
	content_stdWrap<span style="color: #339933; font-weight: bold;">.</span><span style="font-weight: bold;">parseFunc</span> <span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #000066; font-weight: bold;">tt_content</span><span style="color: #339933; font-weight: bold;">.</span>text<span style="color: #339933; font-weight: bold;">.</span>20<span style="color: #339933; font-weight: bold;">.</span><span style="font-weight: bold;">parseFunc</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">xmlnews</span> <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #990000; font-weight: bold;">PAGE</span>
<span style="color: #000066; font-weight: bold;">xmlnews</span> <span style="color: #009900;">&#123;</span>
  typeNum <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">100</span>
  <span style="color: #cc0000;">10</span> <span style="color: #339933; font-weight: bold;">&gt;</span>
  <span style="color: #cc0000;">10</span> <span style="color: #339933; font-weight: bold;">&lt;</span> <span style="color: #990000; font-weight: bold;">plugin</span><span style="color: #339933; font-weight: bold;">.</span>tt_news
  <span style="color: #cc0000;">10</span><span style="color: #339933; font-weight: bold;">.</span>pid_list <span style="color: #339933; font-weight: bold;">&gt;</span>
  <span style="color: #cc0000;">10</span><span style="color: #339933; font-weight: bold;">.</span>pid_list <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;"><span style="color: #009900; font-weight: bold;">$</span>plugin<span style="color: #339933; font-weight: bold;">.</span><span style="color: #000066; font-weight: bold;">tt_news</span>.pid_list</span><span style="color: #009900;">&#125;</span>
  <span style="color: #cc0000;">10</span><span style="color: #339933; font-weight: bold;">.</span>singlePid <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;"><span style="color: #009900; font-weight: bold;">$</span>plugin<span style="color: #339933; font-weight: bold;">.</span><span style="color: #000066; font-weight: bold;">tt_news</span>.singlePid</span><span style="color: #009900;">&#125;</span>
  <span style="color: #cc0000;">10</span><span style="color: #339933; font-weight: bold;">.</span>defaultCode <span style="color: #339933; font-weight: bold;">=</span> XML
  <span style="color: #000066; font-weight: bold;">config</span> <span style="color: #009900;">&#123;</span>
    disableAllHeaderCode <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    additionalHeaders <span style="color: #339933; font-weight: bold;">=</span> Content-type<span style="color: #339933; font-weight: bold;">:</span>text<span style="color: #339933; font-weight: bold;">/</span>xml
    no_cache <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">1</span>
    xhtml_cleaning <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #cc0000;">0</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">page</span><span style="color: #339933; font-weight: bold;">.</span>headerData<span style="color: #339933; font-weight: bold;">.</span>500 <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #990000; font-weight: bold;">TEXT</span>
<span style="color: #000066; font-weight: bold;">page</span><span style="color: #339933; font-weight: bold;">.</span>headerData<span style="color: #339933; font-weight: bold;">.</span>500<span style="color: #339933; font-weight: bold;">.</span>value <span style="color: #339933; font-weight: bold;">=</span> <span style="color: #339933; font-weight: bold;">&lt;</span>link rel<span style="color: #339933; font-weight: bold;">=</span>&quot;alternate&quot; type<span style="color: #339933; font-weight: bold;">=</span>&quot;application<span style="color: #339933; font-weight: bold;">/</span>rss<span style="color: #339933; font-weight: bold;">+</span>xml&quot; title<span style="color: #339933; font-weight: bold;">=</span>&quot;example<span style="color: #339933; font-weight: bold;">.</span>com<span style="color: #339933; font-weight: bold;">:</span> Latest News&quot; href<span style="color: #339933; font-weight: bold;">=</span>&quot;http<span style="color: #339933; font-weight: bold;">:</span><span style="color: #aaa; font-style: italic;">//example.com/index.php?id={$xmlnewsfeed_id}type=100&quot; /&gt;</span></pre></div></div>

<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2011/07/17/typo3-grafiken-und-absaetze-im-rss-feed-von-tt_news-anzeigen.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linktipp: Google war gestern, jetzt kommt Buugle</title>
		<link>http://blog.proesdorf.de/2010/09/24/linktipp-google-war-gestern-jetzt-kommt-buugle.html</link>
		<comments>http://blog.proesdorf.de/2010/09/24/linktipp-google-war-gestern-jetzt-kommt-buugle.html#comments</comments>
		<pubDate>Fri, 24 Sep 2010 20:00:36 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Netzkultur / Netzpolitik]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Linktipp]]></category>
		<category><![CDATA[Nacktscanner]]></category>
		<category><![CDATA[Schufa]]></category>
		<category><![CDATA[SWIFT]]></category>
		<category><![CDATA[Videoüberwachung]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=258</guid>
		<description><![CDATA[&#169;2012 Dirks Blog. All Rights Reserved..]]></description>
			<content:encoded><![CDATA[<p><object width="640" height="385"><param name="movie" value="http://www.youtube.com/v/YXwKKc1aBw0?fs=1&amp;hl=de_DE"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/YXwKKc1aBw0?fs=1&amp;hl=de_DE" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="640" height="385"></embed></object></p>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/09/24/linktipp-google-war-gestern-jetzt-kommt-buugle.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flattr ein Beitag zur Finanzierung von Free und Open Source Software?</title>
		<link>http://blog.proesdorf.de/2010/09/04/flattr-ein-beitag-zur-finanzierung-von-free-und-open-source-software.html</link>
		<comments>http://blog.proesdorf.de/2010/09/04/flattr-ein-beitag-zur-finanzierung-von-free-und-open-source-software.html#comments</comments>
		<pubDate>Sat, 04 Sep 2010 14:45:01 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Netzkultur / Netzpolitik]]></category>
		<category><![CDATA[Flattr]]></category>
		<category><![CDATA[Micropayment]]></category>
		<category><![CDATA[Mikrospenden]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=246</guid>
		<description><![CDATA[Vor einigen Tagen hatte ich ja schon über die Probleme mit dem Datenschutz beim Einbinden eines Flattr-Buttons geschrieben. Eine andere Diskussion bezüglich Flattr findet zzt. im Umfeld der deutschsprachigen Ubuntu Gemeinschaft statt. Es gibt sowohl Aufrufe, Free und Open Source Software mit Flattr zu unterstützen, als auch die gegensätzliche Postion. Hautkritik an Flattr ist hier [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einigen Tagen hatte ich ja schon über die <a title="Dirks Blog: User Tracking mittels “Like it”- und “Flattr”-Button?" href="http://blog.proesdorf.de/2010/08/03/user-tracking-mittels-like-it-und-flattr-button.html">Probleme mit dem Datenschutz</a> beim Einbinden eines <a title="Flattr Website" href="http://flattr.com/">Flattr</a>-Buttons geschrieben. Eine andere Diskussion bezüglich Flattr findet zzt. im Umfeld der deutschsprachigen Ubuntu Gemeinschaft statt.</p>
<p>Es gibt sowohl Aufrufe, Free und Open Source Software mit Flattr zu <a title="NODCH: Free und Open Source Software mit Flattr unterstützen" href="http://www.nodch.de/free-und-open-source-software-mit-flattr-unterstuetzen">unterstützen</a>, als auch die gegensätzliche <a title="Martin's Blog: Warum Flattr auf Planet nichts zu suchen hat" href="http://blog.martin-graesslin.com/blog/2010/09/warum-flattr-auf-planet-nichts-zu-suchen-hat/">Postion</a>. Hautkritik an Flattr ist hier die Gebühr von 10%, die Flattr bei jeder Zahlung abzieht. Martin schreibt in seinem Blog: &#8220;Von Flattr profitieren weder die Spender, noch die die Spenden erhalten, sondern einzig und  alleine Flattr&#8221;.</p>
<p>Da auf dem <a title="Wikipedia: Planet (Software)" href="http://de.wikipedia.org/wiki/Planet_%28Software%29">Planet</a> <a title="Planet ubuntuuser.de" href="http://planet.ubuntuusers.de/">ubuntuusers.de</a> zzt. Blog Beiträge mit einem Flattr-Button nicht durchgelassen werden, gibt es schon die ersten <a title="Linux und Ich: Goodby Planet ubuntuusers.de" href="http://linuxundich.de/de/ubuntu/goodby-planet-ubuntuusers-de/">Rückzüge</a> aus dieser Community.</p>
<p>Es bleibt abzuwarten, in welche Richtung diese Diskussion weiter geht und ob sich Flattr wirklich zu einem Beitrag der Finanzierung von Free und Open Source Software entwickelt.</p>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/09/04/flattr-ein-beitag-zur-finanzierung-von-free-und-open-source-software.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Installationen und Updates mit SSH</title>
		<link>http://blog.proesdorf.de/2010/08/29/wordpress-installationen-und-updates-mit-ssh.html</link>
		<comments>http://blog.proesdorf.de/2010/08/29/wordpress-installationen-und-updates-mit-ssh.html#comments</comments>
		<pubDate>Sun, 29 Aug 2010 13:20:37 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[SSH]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=54</guid>
		<description><![CDATA[Zugeben, ich bin kein Freund von FTP. Aktives oder Passives FTP, Daten- und Kontrollkanal, die Verschlüsselung nachträglich irgendwie an ein viertel Jahrhundert altes Protokoll ran gestrickt, eventuell noch einen TCP/IP-Filter (vulgo &#8220;Firewall&#8221;) dazwischen und schon wird das ganze zum Alptraum. Eine sinnvolle Alternative existiert schon lange: SSH! Also soll es diese Alternative auch bei meinem [...]]]></description>
			<content:encoded><![CDATA[<p>Zugeben, ich bin kein Freund von <a title="Wikipedia: File Transfer Protocol" href="http://de.wikipedia.org/wiki/File_Transfer_Protocol" target="_blank">FTP</a>. Aktives oder Passives FTP, Daten- und Kontrollkanal, die Verschlüsselung nachträglich irgendwie an ein viertel Jahrhundert altes Protokoll ran gestrickt, eventuell noch einen TCP/IP-Filter (vulgo &#8220;Firewall&#8221;) dazwischen und schon wird das ganze zum Alptraum. Eine sinnvolle Alternative existiert schon lange: <a title="Wikipedia: Secure File Transfer Protocol" href="http://de.wikipedia.org/wiki/Secure_File_Transfer_Protocol" target="_blank">SSH</a>! Also soll es diese Alternative auch bei meinem Blog sein.<br />
Einsatzmöglichkeiten gibt es zu Genüge. Sei es die Aktualisierung von WordPress selber, das Ausprobieren und Installieren von Themes oder die Installation und Updates der Plugins. Voraussetzung ist aber, dass Software auf dem Server installiert werden kann.<span id="more-54"></span></p>
<h2>Software</h2>
<p>Um WordPress dazu zu bringen, SSH für die Aktualisierungen zu verwenden, wird <a title="C Libary, die das SSH2 Protokoll implementiert" href="http://sourceforge.net/projects/libssh2/" target="_blank">libssh2</a> und die <a title="SSH2 PHP Bindings" href="http://pecl.php.net/package/ssh2" target="_blank">PHP Bindings</a> für SSH benötigt. Wenn diese Bestandteil der Distribution sind, gut, ansonsten müssen sie selber compiliert werden oder Pakete bei den einschlägigen Quellen gesucht werden. Für Debian habe ich Backports der aktuellen Versionen der Pakete <a title="Backport Debian Paket libssh2" href="http://backports.proesdorf.de/debian/pool/main/libs/libssh2/">libssh2</a> und <a title="Backport Debian Paket php-ssh2" href="http://backports.proesdorf.de/debian/pool/main/p/php-ssh2/">php-ssh2</a> erstellt, die in der aktuellen Debian Version &#8220;Lenny&#8221; verwendete libssh2-Version muss auch ersetzt werden.</p>
<h2>SSH-Schlüsselpaar</h2>
<p>Benötigt wird ein SSH-Schlüsselpaar. Da der Apache-Daemon lesend auf den privaten Schlüssel zugreifen muss, sollte ein extra Schlüsselpaar für die WordPress Updates verwendet werden. Hierfür im Home-Verzeichnis (oder einem anderen, nicht auf dem Webserver publizierten Verzeichnis) &#8220;ssh-keygen&#8221; ausführen:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">ssh-keygen -C WordPress -f id_wp</pre></div></div>

<p>Hierdurch wird der private Schlüssel &#8220;id_wp&#8221; und der öffentlich Schlüssel &#8220;id_wp.pub&#8221; erzeugt. Letzterer erhält zusätzlich  den Kommentar &#8220;WordPress&#8221;. Da, wie erwähnt, der Webserver auch auf den privaten Schlüssel lesend zugreifen muss, müssen die Rechte dieses Schlüssels entsprechend angepasst werden:</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">chgrp www-data id_wp.pub
chmod g+r id_wp.pub</pre></div></div>

<p>In einem weiteren Schritt muss der private Schlüssel noch die Datei &#8220;authorized_keys&#8221; eingetragen werden:</p>
<div class="wp_syntax">
<pre>cat id_wp.pub &gt;&gt; ~/.ssh/authorized_keys</pre>
</div>
<h2>WordPress konfiguieren</h2>
<p>Zum Schluss müssen noch die folgenden Zeilen der WordPress Konfiguration &#8220;wp-config.php&#8221; zugefügt werden:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">/* Updates über SSH: */</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FTP_PUBKEY'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'/home/user/id_wp.pub'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FTP_PRIKEY'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'/home/user/id_wp'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FTP_USER'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'user'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">define</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'FTP_HOST'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'localhost:22'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Selbstverständlich müssen Pfade und User an die lokalen Gegebenheiten angepasst werden.</p>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/08/29/wordpress-installationen-und-updates-mit-ssh.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Outlook Social Connector für Facebook und Windows Live</title>
		<link>http://blog.proesdorf.de/2010/08/06/outlook-social-connector.html</link>
		<comments>http://blog.proesdorf.de/2010/08/06/outlook-social-connector.html#comments</comments>
		<pubDate>Fri, 06 Aug 2010 18:46:30 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Netzkultur / Netzpolitik]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Windows Live]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=216</guid>
		<description><![CDATA[Das Facebook eine Vorliebe für die elektronischen Adressbücher seiner Nutzer hat, ist schon länger bekannt. Facebook wirbt für seinen &#8220;Facebook-Freundefinder&#8221;, wo nur die E-Mail-Adresse und das Passwort angeben muss und schon bekommen alle Kontakte, die nicht bei Facebook sind, eine Einladung. Nicht so richtig mitspielen will da Microsofts mit seinem &#8220;Outlook Social Connector für Facebook [...]]]></description>
			<content:encoded><![CDATA[<p>Das Facebook eine Vorliebe für die elektronischen Adressbücher seiner Nutzer hat, ist schon <a title="Stern Artikel über Facebook" href="http://www.stern.de/digital/online/datenschutz-warum-will-facebook-die-e-mail-adresse-meiner-tante-1540492.html">länger bekannt</a>. Facebook wirbt für seinen &#8220;Facebook-Freundefinder&#8221;, wo nur die E-Mail-Adresse und das Passwort angeben muss und schon bekommen alle Kontakte, die nicht bei Facebook sind, eine <a title="Blog von Annette Schwindt" href="http://deblog.schwindt-pr.com/2010/07/16/facebook-freundefinder-adressbuch-synchronisation/">Einladung</a>.</p>
<p>Nicht so richtig mitspielen will da Microsofts mit seinem &#8220;<a title="Microsoft Pressemitteilug" href="http://www.microsoft.com/germany/presseservice/news/pressemitteilung.mspx?id=533206">Outlook Social Connector für Facebook und Windows Live</a>&#8220;, dieser Connector sendet die Mail-Adressen nur als <a title="Microsoft Artikel" href="http://office.microsoft.com/en-us/outlook/learn-more-about-outlook-social-connector-and-privacy-HA101880243.aspx">Hash-Wert</a> an Facebook und Co, es sei denn, man drück den <strong>Add</strong>-Button, womit man Facebook auffordert, die Person einzuladen.</p>
<p>Was der Connector ansonsten bringt? Bei jeder Mail werden nun die Aktivitäten des Absenders bei Facebook und Co. angezeigt. Der &#8220;aufwendige&#8221; Schritt der manuellen Recherche entfällt, was manchen Personaler bei Einstellungen erfreuen dürfte. Für Mircosoft in es ein Versuch, an die verschlafene Entwicklung der Sozialen Netze anzuknüpfen.</p>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/08/06/outlook-social-connector.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Netzwerk-Dienste  absichern</title>
		<link>http://blog.proesdorf.de/2010/08/05/linux-netzwerk-dienste-absichern.html</link>
		<comments>http://blog.proesdorf.de/2010/08/05/linux-netzwerk-dienste-absichern.html#comments</comments>
		<pubDate>Thu, 05 Aug 2010 14:53:26 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[IT Security]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[SaMBa]]></category>
		<category><![CDATA[Squid]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=185</guid>
		<description><![CDATA[Angreifbar ist ein Netzwerk-Dienst nur, wenn er erreichbar ist und erreichbar ist er nur, wenn er an die entsprechende IP-Adresse gebunden ist. Somit sollte eine Absicherung eines Systems darin bestehen, alle nicht benötigten Netzwerk-Dienste zu deaktivieren (z.B. durch Entfernen der entsprechenden Links in den Runlevelverzeichnissen), alle nur lokal benötigten Netzwerk-Dienste je nach Bedarf an eine [...]]]></description>
			<content:encoded><![CDATA[<p>Angreifbar ist ein Netzwerk-Dienst nur, wenn er erreichbar ist und  erreichbar ist er nur, wenn er an die entsprechende IP-Adresse gebunden  ist. Somit sollte eine Absicherung eines Systems darin bestehen, alle  nicht benötigten Netzwerk-Dienste zu deaktivieren (z.B. durch Entfernen der entsprechenden Links in den  Runlevelverzeichnissen), alle nur lokal  benötigten Netzwerk-Dienste je nach Bedarf an eine interne IP-Adresse (hier als  Beispiel 10.0.0.1),  der Loopback-Adresse (127.0.0.1) oder den Unix-Socket zu binden und nur die von  außen unbedingt benötigten Dienste (z.B. SSH) an eine externe IP-Adresse  zu binden.</p>
<p><span id="more-185"></span>Was alles an Ports auf einem System offen ist, kann auf diesem System mittels <kbd>netstat -lnptu</kbd> festgestellt werden. Hierbei werden alle offenen TCP und UDP Ports mit den jeweiligen  IP-Adressen, PIDs und Programmnamen angezeigt. Weitere Informationen  sind der Manpage von &#8220;netstat&#8221; zu entnehmen.</p>
<p>Mittels Portscannern können auch andere Rechner nach offenen Ports untersucht werden oder der eigene Rechner von außen. Ein einfach Scan wäre z.B. mittels <kbd>telnet</kbd> möglich, indem versucht wird, sich mit jedem einzelnen interessanten Port zu verbinden. Moderne Scanner (wie z.B. <a href="http://nmap.org/">nmap</a>)  sind darüber hinaus in der Lage einen so genannten Stealth-Scan durch  zuführen, wobei der Verbindungsaufbau nicht komplett durch geführt wird  und somit evtl. nicht in den Logfiles gespeichert wird. Oft ist es mit  diesen Tools möglich, weitere Informationen über das gescannte System zu  erhalten, wie z.B. das jeweils verwendete Betriebssysteme oder die  Uptime.</p>
<ul>
<li><strong>Webserver Apache</strong>: In der Datei &#8220;httpd.conf&#8221; der Eintrag <samp>Listen 10.0.0.1:80</samp> für jeden (Name)VirtualHost.</li>
<li><strong>DNS-Server Bind</strong>: In der Datei &#8220;named.conf&#8221; der Eintrag <samp>listen-on { 10.0.0.1; 127.0.0.1; }</samp>.</li>
<li><strong>Common UNIX Printing System (CUPS)</strong>: In der Datei &#8220;cupsd.conf&#8221; muss für jede IP-Adresse ein Eintrag in der Form <samp>Port 10.0.0.1:631</samp> erstellt werden.Zusätzlich gibt es neben der Interface-Bindung bei CUPS ein eigenes  System von Zugriffsberechtigungen, die für jedes einzelne Verzeichnis  (z.B. admin, printers oder printer/name) gesetzt werden können. Diese  sollten für ein internes Berechtigungskonzept verwendet werden.</li>
<li><strong>Cyrus IMAP</strong>: Ab Version 2.0 wird der Cyrus IMAP Server über  einen eigenständigen Dienst &#8220;cyrmaster&#8221; gestartet, der über die Datei  &#8220;cyrus.conf&#8221; für jeden Cyrus Dienst (IMAP, POP3, Sieve, etc.) eine  eigenständige Bindung an bestimmte IP-Adressen oder einen UNIX-Sockets  ermöglicht (zuvor wurde dieser Server über den inetd gestartet).Für die verwendeten Dienste muss dort unter &#8220;SERVICES&#8221; der  &#8220;listen&#8221;-Eintrag um den Hostnamen (z.B. localhost) oder die IP-Adresse  ergänzt werden. Für den IMAP sähen die Einträge z.B. wie folgt aus:<br />
<samp>imap           cmd=&#8221;imapd -U 30&#8243; listen=&#8221;localhost:imap&#8221; prefork=0 maxchild=100<br />
imaps          cmd=&#8221;imapd -s -U 30&#8243; listen=&#8221;10.0.0.1:imaps&#8221; prefork=0 maxchild=100</samp>.<br />
Hierbei wird der IMAP-Dienst an das Loopback-Interface gebunden und der IMAP over SSL an die gewünschte Netzwerkkarte.</li>
<li><strong>DHCP Server</strong>: Auch hier kann im Runlevel-Startscript bei den  Start-Optionen die Bindung an eine oder mehrer Netzwerkkarten festgelegt  werden. Hierfür  muss dem DHCP-Daemon einfach das entsprechende  Interface übergeben werden, also z.B. <samp>dhcpd eth0 lo</samp>.Da DHCP teilweise über Broadcast-Anfragen abläuft, ist dieser Dienst  zwar weiter an die IP-Adresse 0.0.0.0 gebunden, es werden aber Anfragen,  die nicht über die angebenen Interfaces ankommen verworfen.</li>
<li><strong>Newsserver INN</strong>: In der Datei &#8220;inn.conf&#8221; der Eintrag <samp>bindaddress: 10.0.0.1</samp>.</li>
<li><strong>Datenbank MySQL</strong>: Im Runlevel-Startscript kann bei den Start-Optionen die Bindung festgelegt werden. Es gibt dort zwei Möglichkeiten:Wenn nur lokal auf die Datenbank zugegriffen werden soll, kann der Zugriff auf UNIX-Sockets reduziert werden: <samp>&#8211;skip-networking</samp>.Ansonsten kann MySQL an die interne Netzwerk-Adresse gebunden werden: <samp>&#8211;bind-address=10.0.0.1</samp>.</li>
<li><strong>Verzeichnisdienst OpenLDAP</strong>: Im Runlevel-Startscript kann als Start-Option mittels des Parameters <samp>-h URL-Liste</samp> eine Liste von URLs übergeben werden, an die der &#8220;Standalone LDAP Daemon &#8211; slapd&#8221; gebuden werden soll.Die URL-Liste besteht aus mittels Leerzeichen getrennten einzelnen URLs in der Form <samp>ldap://127.0.0.1/</samp> oder <samp>ldap://127.0.0.1:9009/</samp>,  womit &#8220;slapd&#8221; entweder an seinen Standardport 389 auf Locelhost oder  aber an einen beliebigen anderen Port (in dem Beispiel 9009) auf  Locelhost gebunden wird. Ebenso ist es möglich, mittels <samp>ldapi:///</samp> den LDAP-Server an Unix-Sockets (IPC) zu binden.</li>
<li><strong>Mailserver Postfix</strong>: In der Konfigurationsdatei &#8220;main.cf&#8221; den Parameter <samp>inet_interfaces = loopback-only</samp> eintragen.</li>
<li><strong>PostgreSQL Datenbank</strong>: In der Konfigurationsdatei &#8220;postgresql.conf&#8221; kann mittels des Eintrags <samp>virtual_host = &#8217;127.0.0.1&#8242;</samp> die Bindung an eine IP-Adresse erfolgen oder mittels des Eintrags <samp>virtual_host = localhost</samp> die Bindung an den Hostname erfolgen.Ebenso ist es möglich, den PostgreSQL Server direkt mittels der Startoptionen <samp>postmaster -h 127.0.0.1</samp> oder <samp>postmaster -h localhost</samp> zu starten.</li>
<li><strong>SaMBa-Server</strong>: In der Datei &#8220;smb.conf&#8221; die Einträge <samp>interfaces = 10.0.0.1/24</samp> und <samp>bind interfaces only = yes</samp>.Hierbei werden der Fileservice &#8220;smbd&#8221; und der Nameservice &#8220;nmbd&#8221;  unterschiedlich behandelt. &#8220;smbd&#8221; wird auf der angegebene IP-Adresse an  Port 139 gebunden während &#8220;nmbd&#8221; zum einen an diese IP-Adresse auf den  Ports 137 und 138 gebunden wird und zusätzlich noch einmal an diese  Ports auf der IP-Adresse 0.0.0.0, um Broadcast-Anfragen entgegen nehmen  zu können. Damit kann dieser Dienst zwar von überall Broadcast-Anfragen  entgegen nehmen, er verwirft sie aber, wenn sie nicht aus dem mit <samp>interfaces</samp> angegebenen Absendebereich kommen (siehe aber auch <a href="http://firma.home.proesdorf.de/linux/linux_dicht.php#113">IP-Spoofing</a>).  Wenn eine Einbindung des Rechners nicht in den Windows-Nameservice  benötigt wird, kann aber im Startscript der Start des &#8220;nmbd&#8221; komplett  deaktiviert werden.</li>
<li><strong>Mailserver Sendmail</strong>: Bei Sendmail hat sich zwischen den  Versionen 8.10.0 und 8.12.0 die Funktionsweise für die Verarbeitung  lokal erstellter Mails geändert. Ab 8.10.0 bietet Sendmail hierfür die  Funktion Message Submission Agent (MSA), nach <a href="http://www.rfc-editor.org/rfc/rfc2476.txt">RFC2476</a>, an. Diese ist ab Version 8.12.0 zwingend, da der nicht standardgemäße SMTP-Befehl XUSR nicht mehr unterstützt wird.Für die Konfiguration von Sendmail gibt es unterschiedlich  Möglichkeiten. Einmal über Konfigurationsmakros und einmal über die  mittels dieser erstellten Konfigurationsdatei.
<ul>
<li>In der m4 Konfigurationsdatei &#8220;sendmail.mc&#8221; kann mittels der Einträge <samp>DAEMON_OPTIONS(‘Addr=10.0.0.1, Name=MTA’)dnl</samp> und <samp>DAEMON_OPTIONS(‘Addr=127.0.0.1, Port=587, Name=MSA, M=E’)dnl</samp> eine Bindung an eine IP-Adresse erfolgen. Hierbei wird Sendmail als MSA  für die Mails vom lokalem Rechner an die Loopback-Adresse gebunden und  als MTA für das interne Netz an die interne IP-Adresse.Bei älteren Sendmail Versionen (vor 8.10.0) erfolgt dies mittels des Eintrags <samp>define(‘confDAEMON_OPTIONS’,‘Addr=10.0.0.1’)</samp>. Einen MSA gibt es hier, wie oben erwähnt, noch nicht.Zu Beachten ist hierbei, dass oft schon mittels der zentralen Makros  der Eintrag für den MSA gesetzt wird. Hier ist es dann notwendig, diesen  mittels des Eintrags <samp>FEATURE(`no_default_msa&#8217;)dnl</samp> erst  einmal zu deaktivieren und dann, wie zuvor beschrieben, zu setzen. Da  Sendmail nur den ersten Wert ausführt, würde ansonsten evtl. die  Einstellung wirkungslos. Deshalb muss ein vorhandener Eintrag auch immer  geändert werden und nicht mittels eines zweiten Eintrags ergänzt  werden.</li>
<li>In der Konfigurationsdatei &#8220;sendmail.cf&#8221; können die Werte <samp>O DaemonPortOptions=Addr=10.0.0.1, Name=MTA</samp> und <samp>O DaemonPortOptions=Addr=127.0.0.1, Port=587, Name=MSA, M=E</samp> gesetzt werden. Falls es schon Einträge für MTA und MSA gibt, müssen  diese entsprechend ergänzt werden, da ansonsten immer der erste Eintrag  verwendet wird. Bei älteren Sendmail Versionen gilt dies entsprechend  nur für den MTA-Eintrag.</li>
</ul>
</li>
<li><strong>Squid Web Proxy Cache</strong>: In der Datei &#8220;squid.conf&#8221; der Eintrag <samp>http_port 10.0.0.1:3128</samp> (oder ein anderer gewünschter Port wie z.b. 8080). Es sind hier mehrere  Einträge möglich, um Squid an unterschiedliche IP-Adressen/Ports zu  binden.Um die Verständigung des Squid mit anderen Nachbar-Caches über ICP  (Interprocess Comunication Protocoll) auf eine IP-Adresse zu binden,  kann der Eintrag <samp>udp_incoming_address 10.0.0.1</samp> verwendet werden. Diese kann im Standalone-Betrieb aber auch mittels <samp>icp_port 0</samp> gleich ganz deaktiviert werden.Ältere Versionen des Squid (&lt;2.3) kennen die Bindung mittels des Eintrags <samp>http_port</samp> nicht. Hier kann mittels des Eintrags <samp>tcp_incoming_address 10.0.0.1</samp> dies erreicht werden (wobei auch über ein Update mal nachgedacht werden sollte).</li>
<li><strong>SSH Daemon</strong>: In der Datei &#8220;sshd_config&#8221; der Eintrag <samp>ListenAddress 10.0.0.1</samp>.</li>
<li><strong>X-Server</strong>: Beim Aufruf des X-Servers kann mittels des Aufrufparameters <samp>-nolisten tcp</samp> die Bindung an IP-Sockets deaktiviert werden. Es erfolgt nur noch eine  Bindung an die die UNIX-Sockets, was nicht nur für den lokalen Betrieb  ausreicht, sondern auch die schnellere Verbindung ist. Im Allgemeinen  wird der X-Server über den X Display Manager (xdm) gestartet. Dort sind  die Aufrufparameter für den X-Server in der Datei &#8220;Xservers&#8221; oder  &#8220;xserverrc&#8221; (je nach Distribution) zu finden.Wenn aber ein  Remote-Zugriff für den X-Server benötigt wird, kann diese Einstellung  nicht verwendet werden. Hier kann als Alternative in der Datei Xaccess  eine detaillierte Zugriffsgewährung für einzelne Clients erfolgen oder,  als sinnvollere da sichere Alternative, die Anbindung über SSH.</li>
</ul>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/08/05/linux-netzwerk-dienste-absichern.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Tracking mittels &#8220;Like it&#8221;- und &#8220;Flattr&#8221;-Button?</title>
		<link>http://blog.proesdorf.de/2010/08/03/user-tracking-mittels-like-it-und-flattr-button.html</link>
		<comments>http://blog.proesdorf.de/2010/08/03/user-tracking-mittels-like-it-und-flattr-button.html#comments</comments>
		<pubDate>Mon, 02 Aug 2010 22:49:26 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Netzkultur / Netzpolitik]]></category>
		<category><![CDATA[Technik]]></category>
		<category><![CDATA[Datenschutz]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Firefox Extension]]></category>
		<category><![CDATA[Flattr]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Social Networking]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=160</guid>
		<description><![CDATA[Angefangen hatte alles Ende Juni, als die Betreiber von hamburg.de den Facebook &#8220;Like it&#8221;-Button von ihrer Seite nahmen und dies ausführlich begründeten. Dieser Button wird mittels des HTML iframe-Tags eingebunden, wodurch bei einem Aufruf einer  Seite, die so einen Button beinhaltet, Daten zu Facebook übertragen werden. Im Zweifelsfall handelt sich hierbei um die IP-Adresse, den [...]]]></description>
			<content:encoded><![CDATA[<p>Angefangen hatte alles Ende Juni, als die Betreiber von hamburg.de den Facebook &#8220;Like it&#8221;-Button von ihrer Seite nahmen und dies ausführlich <a title="Blog von hamburg.de" href="http://blog.hamburg.de/2010/06/22/wieso-wir-den-facebook-like-button-wieder-entfernten/">begründeten</a>. Dieser Button wird mittels des HTML <a title="SELFHTML Eintrag zu iframe" href="http://de.selfhtml.org/html/frames/eingebettete.htm">iframe</a>-Tags eingebunden, wodurch bei einem Aufruf einer  Seite, die so einen Button beinhaltet, Daten zu Facebook übertragen werden. Im Zweifelsfall handelt sich hierbei um die IP-Adresse, den verwendeten Browser und von welcher Seite man auf diese Seite gekommen ist. Diese Daten werden aber nicht nur bei Facebook-Nutzern, sondern bei allen Besuchern einer Seite übertragen. Da es immer mehr Seiten gibt, die diesen Button verwenden, ist Facebook durchaus in der Lage, nicht nur von seinen 500 Millionen Mitgliedern, ein umfangreiches Nutzerprofil zu erstellen.</p>
<p><span id="more-160"></span>Aber Facebook ist da nicht alleine, Google hat diese Möglichkeit seinen Werbebannern schon länger, Stichwort ist hier &#8220;Google Analytics&#8221; und seit diesem Frühjahr gibt es den Mircopayment-Dienst Flattr. Die auf Recht der Neuen Medien spezialisierte Kanzlei Dr. Bahr geht davon aus, dass <a title="Artikel von Dr. Bahr" href="http://www.dr-bahr.com/news/facebook-like-button-datenschutzwidrig-hamburgde-entfernt-button.html">nach deutschem Datenschutzrecht praktisch ein Großteil des Web 2.0 rechtswidrig ist</a>.</p>
<p>Wer diese mögliche Nutzerprofile nicht möchte, hat eigentlich nur noch die Möglichkeit mittels Werbeblockern in seinem Browser dies zu verhindern. Für Firefox bittet sich die Erweiterung &#8220;<a title="Website des Plugins Adblock Plus zum herunterladen" href="http://adblockplus.org/en/">Adblock Plus</a>&#8221; an. Diese muss dann noch manuell um Flattr, Facebook und ähnliche Dienste erweitert werden:<br />
<code>api.flattr.com^$third-party<br />
facebook.com^$third-party<br />
tweetmeme.com^$third-party</code></p>
<p>Es sollte aber zumindest erwähnt werden, dass mit Flattr ein Micropayment-Dienst entsteht, der sich lohnt in nächster Zeit weiter zu beobachten. Die Kommentare im Netz sind da durchaus mal <a title="Blog NETZWERTIG.COM" href="http://netzwertig.com/2010/08/02/wikileaks-setzt-auf-flattr-des-einen-freud-ist-des-anderen-freud/">positiv</a> und mal <a title="Blog F!XMBR" href="http://www.fixmbr.de/facebook-und-flattr-blocken/">negativ</a>.</p>
<p>Last but not least, ich habe ein Facebook Account, aber da weiß ich selber, was ich Facebook mitteile.</p>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/08/03/user-tracking-mittels-like-it-und-flattr-button.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Katholische Pädagogik?</title>
		<link>http://blog.proesdorf.de/2010/08/02/katholische-padagogik.html</link>
		<comments>http://blog.proesdorf.de/2010/08/02/katholische-padagogik.html#comments</comments>
		<pubDate>Mon, 02 Aug 2010 00:11:48 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Katholische Kirche]]></category>
		<category><![CDATA[Pädagogik]]></category>
		<category><![CDATA[Titanic]]></category>
		<category><![CDATA[Vatikan]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=147</guid>
		<description><![CDATA[Grade eben erst hatten wir Ihnen, dem vatikanischen Kardinalstaatssekretär, der rechten Hand von Benedikt Ratzepapst, Gottes Stellvertreterstellvertreter also, geraten, sich fürderhin in Schweigen zu hüllen und die Öffentlichkeit zu meiden wie der Pfarrer das Planschbecken, da erregten Sie sich laut Spiegel über eine Razzia bei der belgischen Bischofskonferenz, wo es galt, alte Akten über pädophile [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p>Grade eben erst hatten wir Ihnen, dem vatikanischen Kardinalstaatssekretär, der rechten Hand von Benedikt Ratzepapst, Gottes Stellvertreterstellvertreter also, geraten, sich fürderhin in Schweigen zu hüllen und die Öffentlichkeit zu meiden wie der Pfarrer das Planschbecken, da erregten Sie sich laut Spiegel über eine Razzia bei der belgischen Bischofskonferenz, wo es galt, alte Akten über pädophile Priester aufzutreiben. Die von der Polizei durchsuchten Bischöfe wurden nämlich neun Stunden lang ohne Essen und Trinken festgehalten; eine grausame und demütigende Behandlung, die man nicht einmal Tieren oder Zimmerpflanzen angedeihen lassen sollte – oder, wie Sie, Bertone, es ausdrückten: »Als wären sie Kinder«. Eminenz! Das haben Sie nicht wirklich gesagt, oder? Das hat sich der Spiegel ausgedacht, oder? Denn wenn Sie Ihren kircheninternen Kinderdrill samt Einsperren und Hungernlassen nun schon öffentlich und anlaßlos eingestehen, dann läßt das nur zwei Schlüsse zu: daß Ihnen a) schon alles wurscht ist, weil inzwischen ruhig jeder wissen kann, was in Ihrer Institution so los ist, oder daß Sie b) die relativ neue christliche Tugend der Selbstironie entdeckt haben.</p>
<p>Wir tippen auf a).</p></blockquote>
<p>Aus <a title="Titanic Artikel" href="http://www.titanic-magazin.de/badl_1008.html#c11019">TITANIC   Briefe an die Leser August 2010</a> und der erwähnte <a title="Spiegel Artikel" href="http://www.spiegel.de/spiegel/print/d-71261437.html">Artikel des Spiegels</a>.</p>
<p>Die Titianic hat es hier kurz und knapp auf den Punkt gebracht. Der eigentliche Skandal ist der Missbrauch durch diverse Kirchenvertreter, aber ursächlich hierfür ist das Menschenbild das sich in der Formulierung &#8220;Als wären sie Kinder&#8221; offenbart. Und ja, in diesem Kontext ist kein Wort unschuldig!</p>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/08/02/katholische-padagogik.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Typo3 und Social Links</title>
		<link>http://blog.proesdorf.de/2010/07/04/typo3-und-social-links.html</link>
		<comments>http://blog.proesdorf.de/2010/07/04/typo3-und-social-links.html#comments</comments>
		<pubDate>Sun, 04 Jul 2010 20:06:59 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[Facebook]]></category>
		<category><![CDATA[Social Networking]]></category>
		<category><![CDATA[Twitter]]></category>
		<category><![CDATA[Typo3]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=61</guid>
		<description><![CDATA[Eine Typo3 Installation soll Social Links erhalten. Nach einem kurzen Test der beiden Extension &#8220;form4_socialmedialinks&#8221; und &#8220;timtab_sociable&#8221; habe ich mich für die Letztere entschieden. Ausschlaggebend ist, dass auf dieser Installation die  Inhalte umfangreich über die Extension &#8220;tt_news&#8221; publiziert werden. Ich habe bei der Extension &#8220;form4_socialmedialinks&#8221; keine Möglichkeit gefunden, die URL für jeden Artikel zu Bookmarken, [...]]]></description>
			<content:encoded><![CDATA[<p>Eine Typo3 Installation soll Social Links erhalten. Nach einem kurzen Test der beiden Extension &#8220;<a title="form4_socialmedialinks im Typo3 Extension Repository" href="http://typo3.org/extensions/repository/view/form4_socialmedialinks/current/" target="_blank">form4_socialmedialinks</a>&#8221; und &#8220;<a title="timtab_sociable im Typo3 Extension Repository" href="http://typo3.org/extensions/repository/view/timtab_sociable/current/" target="_blank">timtab_sociable</a>&#8221; habe ich mich für die Letztere entschieden. Ausschlaggebend ist, dass auf dieser Installation die  Inhalte umfangreich über die Extension &#8220;tt_news&#8221; publiziert werden. Ich habe bei der Extension &#8220;form4_socialmedialinks&#8221; keine Möglichkeit gefunden, die URL für jeden Artikel zu Bookmarken, sprich es wurde immer nur die URL der Detail-Seite exportiert. <img src='http://blog.proesdorf.de/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Auf den ersten Blick hatte aber auch &#8220;timtab_sociable&#8221; einen entscheidenden Nachteil, aktuelle Social Networks, wie Facebook, Twitter und StudiVZ werden nicht unterstützt. Vorteil ist aber, die Extension kann flexibel konfiguriert werden und es können ihr damit neue Social Links beigebracht werden..</p>
<p><span id="more-61"></span>Hierfür ist in dem Template der Seite die folgendes Setup sinnvoll:</p>
<pre>### Sociable Bookmarks:
plugin.tx_timtabsociable_pi1 {
	services {
		facebook {
			icon {
				file = fileadmin/technik/facebook.png
				altText = Facebook Teilen
				titleText = Facebook Teilen
			}
			url = http://www.facebook.com/sharer.php?u=%URL%&amp;t=%TITLE%
			title = Facebook Teilen
			target &lt; plugin.tx_timtabsociable_pi1.iconTarget
			wrap &lt; plugin.tx_timtabsociable_pi1.iconWrap
		}
		twitter {
			icon {
				file = fileadmin/technik/twitter.png
				altText = Twitter
				titleText = Twitter
			}
			url = http://twitter.com/home?status=%URL%
			title = Twitter
			target &lt; plugin.tx_timtabsociable_pi1.iconTarget
			wrap &lt; plugin.tx_timtabsociable_pi1.iconWrap
		}
		myvz {
			icon {
				file = fileadmin/technik/myvz.png
				altText = studiVZ meinVZ schülerVZ
				titleText = studiVZ meinVZ schülerVZ
			}
			url = http://www.studivz.net/Suggest/Selection/?u=%URL%&amp;desc=%TITLE%
			title = studiVZ meinVZ schülerVZ
			target &lt; plugin.tx_timtabsociable_pi1.iconTarget
			wrap &lt; plugin.tx_timtabsociable_pi1.iconWrap
		}
		live {
			icon.altText = Windows Live
			icon.titleText = Windows Live
			title = Windows Live
		}
	}
	# Lokalisierung in einer deutschsprachigen Umgebung:
	# _LOCAL_LANG.de.tagline = Social Bookmarks

	# Oder lieber die Tagline ausschalten:
	# tagline &lt;

	# Nur die gewünschten Social Links anzeigen:
	activeServices = twitter,facebook,myvz,google,live,misterwong,delicious,yahoomyweb
}</pre>
<p>Ach ja, die verwendeten Grafiken:<br />
Facebook:<img class="alignnone size-full wp-image-77" title="facebook" src="http://blog.proesdorf.de/wp-content/uploads/2010/07/facebook.png" alt="Facebook Logo" width="16" height="16" /><br />
Twitter:<img class="size-full wp-image-76 alignnone" title="twitter" src="http://blog.proesdorf.de/wp-content/uploads/2010/07/twitter.png" alt="Twitter Logo" width="16" height="16" /><br />
StudiVZ: <img class="alignnone size-full wp-image-78" title="myvz" src="http://blog.proesdorf.de/wp-content/uploads/2010/07/myvz.png" alt="StudiVZ Logo" width="16" height="16" /></p>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/07/04/typo3-und-social-links.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Squid Proxy konfigurieren</title>
		<link>http://blog.proesdorf.de/2010/06/29/squid-proxy-konfigurieren.html</link>
		<comments>http://blog.proesdorf.de/2010/06/29/squid-proxy-konfigurieren.html#comments</comments>
		<pubDate>Tue, 29 Jun 2010 14:00:39 +0000</pubDate>
		<dc:creator>Dirk Prösdorf</dc:creator>
				<category><![CDATA[Technik]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Proxy]]></category>
		<category><![CDATA[Squid]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blog.proesdorf.de/?p=23</guid>
		<description><![CDATA[Dieser Text befasst sich mit der Installation und Konfiguration des &#8220;Squid Web Proxy Cache&#8221;. Grundlage ist die Squid Version 2.5.STABLE7, soweit mir aber grundlegende Veränderungen zu vorherigen Versionen aufgefallen sind, werden auch diese vorherigen Einstellungen berücksichtigt. &#8220;Squid&#8221; installieren Basis Konfiguration des &#8220;Squid&#8221; Netzwerk Optionen Cache Optionen Logfile- und Cache-Verzeichnisse Optionen für externe Programme Administrative Parameter [...]]]></description>
			<content:encoded><![CDATA[<p>Dieser Text befasst sich mit der Installation und Konfiguration des &#8220;Squid Web Proxy Cache&#8221;. Grundlage ist die Squid Version 2.5.STABLE7, soweit mir aber grundlegende Veränderungen zu vorherigen Versionen aufgefallen sind, werden auch diese vorherigen Einstellungen berücksichtigt.</p>
<p><span id="more-23"></span></p>
<ul>
<li><a href="#h11">&#8220;Squid&#8221; installieren</a></li>
<li><a href="#h12">Basis Konfiguration des &#8220;Squid&#8221;</a>
<ul>
<li><a href="#h121">Netzwerk Optionen</a></li>
<li><a href="#h122">Cache Optionen</a></li>
<li><a href="#h123">Logfile- und Cache-Verzeichnisse</a></li>
<li><a href="#h124">Optionen für externe Programme</a></li>
<li><a href="#h126">Administrative Parameter</a></li>
<li><a href="#h127">Verschiedenes</a></li>
</ul>
</li>
<li><a href="#h13">Access Control Lists (ACL)</a></li>
<li><a href="#h14">User-Authentifizierung</a>
<ul>
<li><a href="#h141">Authentifizierung mittels Passwortdatei</a></li>
<li><a href="#h142">Authentifizierung mittels Pluggable Authentication Modules (PAM)</a></li>
<li><a href="#h143">Authentifizierung mittels Lightweight Directory Access Protokoll (LDAP)</a></li>
<li><a href="#h144">Authentifizierung gegen eine Windows NT Domäne</a></li>
</ul>
</li>
<li><a href="#h15">&#8220;Squid&#8221; als Transparenter Proxy</a></li>
<li><a href="#h16">&#8220;Squid&#8221; starten</a></li>
</ul>
<p>Die Webseiten des <a href="http://www.squid-cache.org/">Squid Web Proxy Cache</a>.<br />
Eine deutsche Übersetzung des <a href="http://www.squid-handbuch.de/">Squid Proxyserver Administrationshandbuch</a>.</p>
<hr class="half " />
<h2><a name="h11"></a>&#8220;Squid&#8221; installieren</h2>
<p>Falls keine aktuelle Version des Squid Proxy der verwendeten Linux Distribution beiliegt, kann die aktuelle Version von der <a href="http://www.squid-cache.org/">Squid Seite</a> aus bezogen werden. Diese wird mit den folgenden Befehlen kompiliert und installiert:</p>
<p><kbd>$ ./configure --prefix=/usr/local/squid<br />
$ make all<br />
# make install</kbd></p>
<p>Hierbei wird Squid in das Verzeichnis <samp>/usr/local/squid</samp> installiert.</p>
<p>Wer die Konfigurationsdateien lieber im Verzeichnis <samp>/etc/squid</samp> liegen haben möchte statt in <samp>/usr/local/squid/etc</samp>, der kann bei <kbd>./configure</kbd> auch noch die Option <kbd>--sysconfdir=/etc/squid</kbd> angeben.</p>
<p>Wer lieber deutschsprachige Fehlerseiten verwenden möchte, kann <kbd>./configure</kbd> noch zusätzlich die Option <kbd>--enable-err-language=German</kbd> übergeben. Somit sähe der <kbd>./configure</kbd>-Aufruf wie folgt aus:</p>
<p><kbd>$ ./configure --prefix=/usr/local/squid --sysconfdir=/etc/squid --enable-err-language=German</kbd></p>
<h2><a name="h12"></a>Basis Konfiguration des &#8220;Squid&#8221;</h2>
<p>Konfiguriert wird der Squid Proxy über die Konfigurationsdatei <samp>squid.conf</samp>. Eine Vorlage hierfür liegt, ausgehend von der obigen Installation, nun entweder im Verzeichnis <samp>/usr/local/squid/etc</samp> oder <samp>/etc/squid</samp>. In älteren GNU/Debian Paketen liegt sie unter <samp>/etc</samp>. Wenn schon, vielleicht von einer älteren Squid Version, dort eine Konfigurationsdatei liegt, wird diese nicht überschrieben. Zusätzlich wird noch in jedem Fall eine zweite Vorlage <samp>squid.conf.default</samp> dort angelegt. Diese ist recht praktisch, wenn man von einer älteren Squid Version updatet.</p>
<p>Nachfolgend werden nun relevante Teile der Einstellungen in der Konfigurationsdatei <samp>squid.conf</samp> beschrieben. Diese Aufstellung erhebt keinen Anspruch auf Vollständigkeit. Besonders auf den Bereich &#8220;Proxy-Farmen (neighbor caches)&#8221; wird nicht eingegangen. Ebenso wird auf Einstellungen, deren Default-Werte übernommen werden können, nur selten eingegangen.</p>
<p>Eine ausführlichere Beschreibung ist in der Konfigurationsdatei selbst enthalten oder als FAQs auf den Webseiten des Squid Proxy.</p>
<h3><a name="h121"></a>Netzwerk Optionen</h3>
<p>Hier sind einige Einstellungen zu den Netzwerkbindungen und den verwendeten Protokollen zu treffen.</p>
<h4>Netzwerkbindung:</h4>
<pre>#  TAG: http_port
#   Usage:  port
#       hostname:port
#       1.2.3.4:port
…
#Default:
# http_port 3128
http_port 10.0.0.1:3128
http_port 10.0.0.1:8080</pre>
<p>Hier wird festgelegt, auf welchem Port oder IP-Adresse/Port bzw. Hostname/Port Squid Verbindungen annimmt. Hierbei können mehrere Adressen in unterschiedlichen Zeilen angegeben werden.</p>
<p>Die Standardeinstellung ist, dass Squid Verbindungen auf allen IP-Adressen des Rechners auf Port 3128 entgegen nimmt. Eine sinnvolle Änderung wäre das binden an die interne IP-Adresse (z.B. 10.0.0.1), damit der Proxy nur von intern zu erreichen ist. Außerdem erwachten viele Anwender einen Proxy auf dem Port 8080, deshalb kann es recht sinnvoll sein, Squid auf beiden Ports lauschen zu lassen..</p>
<h4>ICP Protokoll:</h4>
<pre>#  TAG: icp_port
…
#Default:
# icp_port 3130
icp_port 0</pre>
<p>Das Internet Cache Protocoll (ICP) dient der Kommunikation des Squids mit anderen Proxies und ist definiert im <a href="http://www.rfc-editor.org/rfc/rfc2186.txt">RFC2186</a> und <a href="http://www.rfc-editor.org/rfc/rfc2187.txt">RFC2187</a>. Eine Kommunikation mit anderen Proxies wird eher in größeren Netzwerken benötigt und dementsprechend sollte dieses Protokoll im Einzelbetrieb mittels der Portangabe 0 deaktiviert werden.</p>
<h3><a name="h122"></a>Cache Optionen</h3>
<h4>Bestimmte Objekte nicht speichern:</h4>
<pre>#  TAG: no_cache
…
#We recommend you to use the following two lines.
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY</pre>
<p>Hier kann dem Proxy mittels Access Control Lists (ACL) mitgeteilt werden, welche Seiten nicht gespeichert werden sollen. Die Voreinstellung erfasst einen großen Teil der dynamischen Websites, indem alle Adressen, die ein &#8220;cgi-bin&#8221; oder ein Fragezeichen (dieses trennt die Aufrufparameter einer Seite von der Seitenadresse und muss in Regulären Ausdrücken mit einen Backslash &#8220;\&#8221; maskiert werden) beinhalten, vom Speichern ausgeschlossen werden.</p>
<p>Hier können weitere Adressen, wie zum Beispiel der eigene Server oder das lokale Netzwerk eingetragen werden.</p>
<p>Weitergehende Hinweise zur Verwendung von ACLs folgen <a href="#h13">später</a>.</p>
<h4>Speichergröße:</h4>
<pre>#  TAG: cache_mem   (bytes)
…
#Default:
# cache_mem 8 MB
cache_mem 32 MB</pre>
<p>Hier wird festgelegt, wieviel Arbeitsspeicher Squid maximal dafür verwendet einkommende Daten, sehr oft angefragte Objekte und sog. Negative-Cached Objekte (diverse Statusmeldungen des HTTP-Protokolls) im Arbeitsspeicher zwischen zu speichern. Hierbei haben einkommende Daten absoluten Vorrang.</p>
<p>Diese Angabe bezieht sich nicht auf den von Squid insgesamt benötigten Arbeitsspeicher, sondern ist nur ein bestimmter Teil davon.</p>
<p>Bei der heutigen Ausstattung von PCs mit Arbeitsspeicher kann diese Angabe ruhigverdoppelt oder vervierfacht werden. Auf Proxies, die für die Versorgung ganzer Netzwerke zuständig sind, sollte dies sogar geschehen.</p>
<h3><a name="h123"></a>Logfile- und Cache-Verzeichnisse</h3>
<h4>Cache-Verzeichnis:</h4>
<pre>#  TAG: cache_dir
…
#Default:
# cache_dir ufs /usr/local/squid/var/cache 100 16 256
cache_dir ufs /var/cache/squid 100 16 256</pre>
<p>Hier wird festgelegt, welche Speichermethode verwendet wird, in welchem Verzeichnis der Cache liegen soll, wie groß der Cache sein soll und welche Unterverzeichnisstruktur verwendet werden soll.</p>
<p>Als Speichermethode ist standardmäßig nur &#8220;ufs&#8221; (Unix Filesystem) verfügbar. Andere Speichermethoden sind nur dann verfügbar, wenn sie extra mit ein kompiliert wurden.</p>
<p>Das Verzeichnis sollte entsprechend den eigenen Gegebenheiten (Festplattenplatz) und grundsätzlichen Überlegungen (was wird beeinträchtigt, wenn die Festplatte voll ist) angepasst werden. Die obige Vorgabe beruht auf den bei der Installation angegebenen Parameter <samp>&#8211;prefix=/usr/local/squid</samp>. Da es sich aber bei den Inhalten des Squid-Caches um variable Daten handelt, sollten diese besser auch im entsprechenden Bereich <samp>/var</samp> des Filesystems liegen, der auch oft auf einer eigenen Festplatten-Partition liegt. Deshalb die Angabe <samp>/var/cache/squid</samp> als Cache-Verzeichnis. Hierbei ist zu beachten, dass dieses Verzeichnis existieren und für Squid beschreibbar sein muss, damit der Squid Proxy starten kann. Mit dem Befehl <kbd>squid -z</kbd> kann das Cache-Verzeichnis mit allen benötigten Unterverzeichnissen angelegt werden.</p>
<p>Die anderen Angaben (Größe in MB und Struktur &#8211; 16 Unterverzeichnisse mit jeweils 256 weiteren Unterverzeichnissen &#8211; des Caches) können so belassen werden.</p>
<h4>Logfile-Path:</h4>
<pre>#  TAG: cache_access_log
…
#Default:
# cache_access_log /usr/local/squid/var/logs/access.log
cache_access_log /var/log/squid/access.log

#  TAG: cache_log
…
#Default:
# cache_log /usr/local/squid/var/logs/cache.log
cache_log /var/log/squid/cache.log

#  TAG: cache_store_log
…
#Default:
# cache_store_log /usr/local/squid/var/logs/store.log
cache_store_log /var/log/squid/store.log</pre>
<p>Entsprechend sollten die Logfiles als variable Daten auch unter /var abgelegt werden. Hinzu kommt, dass dort auch die Logfiles der anderen Programme liegen. Hierbei ist zu beachten, dass Squid das Recht haben muss, in diesem Verzeichnis Dateien an zu legen. Deshalb ist ein eigenes Verzeichnis für die Squid-Logfiles sinnvoll.</p>
<h4>Access-Log Type:</h4>
<pre>#  TAG: emulate_httpd_log       on|off
…
#Default:
# emulate_httpd_log off
emulate_httpd_log on</pre>
<p>Standardmäßig wird das &#8220;access.log&#8221; Logfile, das Auskunft über die Zugriffe gibt, in einem Squid eigenen Format abgespeichert. Es ist aber auch möglich, das sog. &#8220;common&#8221; Format zu verwenden, das diverse HTTP-Server, wie z.B. &#8220;Apache&#8221;, verwenden, wenn man dieses Format besser auswerten kann.</p>
<h4>Prozess-ID-Datei:</h4>
<pre>#  TAG: pid_filename
…
#Default:
# pid_filename /usr/local/squid/var/logs/squid.pid
pid_filename /var/run/squid.pid</pre>
<p>Auch die Datei, die die Prozess-ID des Squids beinhaltet, sollte in dem entsprechenden Verzeichnis unter /var abgelegt werden. Auch hier ist unbedingt darauf zu achten, dass Squid das Recht haben muss, diese Datei anzulegen.</p>
<h4>Debuging Informationen in den Logfiles:</h4>
<pre>#  TAG: debug_options
…
#Default:
# debug_options ALL,1</pre>
<p>Die Logging-Optionen sind eine Kombination aus Logging-Bereich und Logging-Level, getrennt mittels Komma. Ein geringes Logging-Level führt zu kleinen Logfiles und ein Logging-Level &#8220;9&#8243; (als höchster Wert) kann zu sehr großen Logfiles führen. Der Logging-Bereich &#8220;ALL&#8221; umfasst alle Bereiche. Die Standardeinstellung &#8220;ALL,1&#8243; ist für den Normalbetrieb völlig ausreichend. Nur wenn es Probleme gibt, sollte man sich langsam in den Logging-Levels bis &#8220;9&#8243; nach oben arbeiten.</p>
<h4>Logging der IP-Adresse oder Rechner-Namens</h4>
<pre>#  TAG: log_fqdn        on|off
…
#Default:
# log_fqdn off</pre>
<p>Standardmäßig wird in den Logfiles nur die IP-Adresse den abfragenden Clients gespeichert. Wenn stattdessen der vollständige Rechnername (mit Domainteil auch Fully Qualified Domain Name = FQDN) gewünscht wird, so ist diese Option zu aktivieren.</p>
<h4>Privacy-Einstellung:</h4>
<pre>#  TAG: client_netmask
…
#Default:
# client_netmask 255.255.255.255</pre>
<p>Wenn die Privatsphäre der Clients bewahrt werden soll oder muss (z.B. Datenschutz in Unternehmen), kann hier eine Netzwerk-Maske definiert werden, die dazu führt, dass die einzelnen Logfile-Einträge nicht mehr einem Rechner zuordbar sind.</p>
<p>Eine Netzwerk-Maske von 255.255.255.0 würde dazu führen, dass bei allen IP-Adressen in den Logfiles und der <samp>cachemgr</samp> Ausgabe die letzte Stelle als &#8220;0&#8243; dargestellt wird. Beim Standardwert 255.255.255.255 wird die komplette Adresse angezeigt.</p>
<h3><a name="h124"></a>Optionen für externe Programme</h3>
<h4>Anonymous FTP-User:</h4>
<pre>#  TAG: ftp_user
…
#Default:
# ftp_user Squid@</pre>
<p>Beim Anonymous FTP-Zugriff gilt es als höflich, dass Nutzer als eine E-Mail-Adresse als Passwort eingibt. Da einige FTP-Server ohne Angabe einer gültigen E-Mail-Adresse keinen Zugriff gewähren, sollte hier eine gültige Adresse eingetragen werden.</p>
<h4>Passives FTP:</h4>
<pre>#  TAG: ftp_passive
…
#Default:
# ftp_passive on
ftp_passive off</pre>
<p>Wenn passives FTP Probleme bereitet, kann dies hier ausgeschaltet werden.</p>
<p>Aktives FTP ist aber aus Sicherheitsgründen sehr bedenklich, da die Gegenseite dann selber eine Verbindung herstellen muss, und sollte vermieden werden.</p>
<h4>Schemas zur User-Authentifizierung:</h4>
<pre>#  TAG: auth_param
…</pre>
<p>Hier können verschiedene Schemata zur User-Authentifizierung eingestellt werden.</p>
<p>Dieses Thema wird später ausführlich in einem separaten Kapitel zur <a href="#h14">User-Authentifizierung</a> behandelt.</p>
<pre>#  TAG: external_acl_type
…</pre>
<p>Mittels Hilfsprogramme können hier externe ACLs definiert werden.</p>
<p>Auch dieses Thema wird später ausführlich anhand eines <a href="#h143">LDAP-Filters</a> erklärt.</p>
<h3><a name="h126"></a>Administrative Parameter</h3>
<h4>E-Mail-Adresse des Admins</h4>
<pre>#  TAG: cache_mgr
…
#Default:
# cache_mgr webmaster</pre>
<p>E-Mail-Adresse des Squid-Admins, an den Meldungen über einen evtl. Absturz des Proxies gesendet werden sollen. Die Standardeinstellung ist &#8220;webmaster&#8221;.</p>
<h4>Standarduser und -gruppe:</h4>
<pre>#  TAG: cache_effective_user
#  TAG: cache_effective_group
…
#Default:
# cache_effective_user nobody
cache_effective_user squid
cache_effective_group squid</pre>
<p>Diese Einstellung bewirkt, dass wenn der Squid Proxy als Root gestartet wird  er die angegebene User- und Gruppen-ID annimmt. Ist kein User angegeben, wird  UID des Users &#8220;nobody&#8221; und als GID dessen Standardgruppe angenommen.</p>
<p>Wenn Squid nicht als Root gestartet wird, behält er die aktuelle UID/GID und es kann nur die GID zu einer der Gruppen gewechselt, wo der aktuelle User auch Mitglied ist.</p>
<p>Dies ist ein Schutz davor, dass der Squid-Prozess als Root volle Kontrolle über das System hätte. Die Voreinstellung &#8220;nobody&#8221; sollte aber auch nicht verwendet werden, da evtl. diverse Prozesse unter dieser User-ID laufen und bei einem erfolgreichen Angriff der Angreifer auf zu viele Programme Zugriff hätte. Es ist deshalb sinnvoll, dem Squid Proxy eine eigene UID und GID zu geben, die selbstverständlich auf dem System existieren müssen.</p>
<h4>Vollständiger Rechnername</h4>
<pre>#  TAG: visible_hostname
…
#Default:
# none</pre>
<p>Squid benötigt zum Starten einen &#8220;Fully Qualified Domain Name (FQDN)&#8221; um diesen z.B. in Fehlermeldungen zu verwenden. Dieser FQDN wird in der Konfiguration des Betriebsystems angegeben. Mittels <kbd>hostname -f</kbd> läßt sich der aktuelle FQDN des Rechners ermitteln. Wenn ein ander anderer Rechnername von Squid verwendet werden soll (oder kein FQDN definiert wurde), kann dies durch den Eintrag <samp>visible_hostname </samp> erfolgen.</p>
<h3><a name="h127"></a>Verschiedenes</h3>
<h4>Anonymisieren der IP-Adresse:</h4>
<pre>#  TAG: forwarded_for   on|off
…
#Default:
# forwarded_for on</pre>
<p>Standardmäßig wird in jede HTTP-Anfrage die IP-Adresse oder der Name des Clients über die &#8220;X-Forwarded-For&#8221;-Umgebungsvariable an den externen Server mitgeteilt:</p>
<p><samp>X-Forwarded-For: 192.1.2.3</samp></p>
<p>Wenn dies aus irgend welchen Gründen nicht gewünscht wird, muss die Option mittels <samp>forwarded_for off</samp> ausgeschaltet werden. Dies führt zu der folgenden Mitteilung an den externen Server:</p>
<p><samp>X-Forwarded-For: unknown</samp></p>
<h2><a name="h13"></a>Access Control Lists (ACL)</h2>
<p>Die Zugriffskontrollen teilen sich in zwei unterschiedliche Bereiche auf. Zuerst werden mit dem Tag acl bestimmte Zugriffslisten definiert und danach werden mittels des Tags http_access die Listen angewendet.</p>
<p>Hierbei können ACLs auf Basis von Quell- und Ziel-Adressen, URLs, Zeitangaben, Protokolle, Ports und User definiert werden.</p>
<p>Die Default-Einstellung unterbindet jegliche Verbindung nach außen und es wird zuerst einmal dies geändert. Eine weitergehende Beschreibung erfolgt evtl. zu einem später Zeitpunkt oder sollte in der Konfigurationsdatei <samp>squid.conf</samp> nachgelesen werden.</p>
<pre>#  TAG: acl
…
#Recommended minimum configuration:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443 563     # https, snews
acl Safe_ports port 70          # gopher
acl Safe_ports port 210         # wais
acl Safe_ports port 1025-65535  # unregistered ports
acl Safe_ports port 280         # http-mgmt
acl Safe_ports port 488         # gss-http
acl Safe_ports port 591         # filemaker
acl Safe_ports port 777         # multiling http
acl CONNECT method CONNECT</pre>
<p>Hier sind nun diverse ACLs definiert worden. Bis auf die ersten drei ACLs können diese m.e. gleich ganz gelöscht werden (besonders die ACLs, die vermeidlich sichere Ports definieren), da sie von einer doppelt falschen Ausgangsvoraussetzung ausgehen. Das auf Port 80 ein HTTP-Server laufen soll, ist nur eine Empfehlung. Es kann dort genau so gut eine unerwünschte Anwendung laufen. Ebenso ist es möglich, dass ein HTTP-Server (zusätzlich) auf einem anderen Port läuft. Dies kommt besonders bei &#8220;Geschlossenen Benutzer Gruppen&#8221; vor. Somit handelt man sich mit einer solchen Einstellung nur eine vermeidliche Sicherheit ein (&#8220;Security by Obscurity&#8221; ist keine Sicherheit) und evtl. noch zusätzliche Probleme, weil ein Server nicht erreichbar ist.</p>
<p>Auch das Tunneln von Verbindungen von Clients durch den Proxy lässt sich so nicht verhindern, da die Gegenseite durchaus auf einem der &#8220;Safe_ports&#8221; lauschen kann. Die ISO/OSI-Leyer 3-5 sind nicht geeignet, dies zu unterbinden und bei darüber liegenden Leyern muss man dann jedes Paket einzeln bewerten, womit man sich die SSL-Einstellungen auch schenken kann, denn dies schließt sich gegenseitig aus.</p>
<p>Die Argumentation der <a href="http://www.squid-cache.org/Doc/FAQ/FAQ-10.html#ss10.14">Squid-FAQ</a> hierzu, dass jemand den Proxy als SMTP-Relay benutzen könnte, ist insoweit nicht überzeugend, als dies bedeuten würde, dass der Proxy von außen für jede interessierte Person erreichbar ist. Wer eine solche Umgebung betreibt, der hat aber eher noch ganz andere Probleme.</p>
<pre>#  TAG: http_access
#   Allowing or Denying access based on defined access lists
…
#Recommended minimum configuration:
#
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
# Deny requests to unknown ports
http_access deny !Safe_ports
# Deny CONNECT to other than SSL ports
http_access deny CONNECT !SSL_ports
#
# We strongly recommend to uncomment the following to protect innocent
# web applications running on the proxy server who think that the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
# Exampe rule allowing access from your local networks. Adapt
# to list your (internal) IP networks from where browsing should
# be allowed
#acl our_networks src 192.168.1.0/24 192.168.2.0/24
#http_access allow our_networks
# And finally deny all other access to this proxy
http_access deny all</pre>
<p>Mittels &#8220;allow&#8221; oder &#8220;deny&#8221; wird der Zugriff, basierend auf ACLs erlaubt oder unterbunden.</p>
<p>Wenn keine Access-Einstellung vorhanden ist, wird jeder Zugriff zurück gewiesen. Anders aber, wenn keine Access-Einstellung zutrifft, dann wird das Gegenteil der letzten Einstellung verwendet, d.h. wenn die Letzte Einstellung eine Ablehnung &#8220;deny&#8221; ist, wird der Zugriff erlaubt. Deshalb ist es sindvoll, als letzte Einstellung je nach Bedarf, ein &#8220;deny all&#8221; oder &#8220;allow all&#8221; zu verwenden. Ansonsten gilt, dass die erste passende Einstellung verwendet wird.</p>
<p>Die obigen ersten beiden Access-Einstellungen erlauben den Zugriff auf die ACL &#8220;manager&#8221; mittels der ACL &#8220;localhost&#8221;, die die Client-IP-Adressen auf 127.0.0.1 (Localhost) reduziert, und verbietet ihn ansonsten für alle anderen. Zuvor war in der ACL &#8220;manager&#8221; definiert worden, dass es sich hierbei um das Protokoll &#8220;cache_object&#8221; handelt. Somit wird hier festgelegt, dass dieses Protokoll nur vom lokalem Rechner aus aufgerufen werden kann.</p>
<p>Die beiden nächsten Access-Einstellungen können dann auch gelöscht werden, wenn die entsprechenden ACLs gelöscht wurden. Ansonsten definieren sie, dass der Zugriff auf alles, was nicht als &#8220;Safe_port&#8221; angesehen wird, unterbunden wird, ebenso wie SSL-Verbindungen auf nicht SSL-Ports.</p>
<p>Die letzte Access-Einstellung unterbindet jeglichen sonstigen Zugriff und sollte entweder in &#8220;http_access allow all&#8221; geändert werden, wenn man weiterhin surfen möchte oder es sollte zuvor eine ACL für die Clients definiert die dies dürfen und ein entsprechender Access-Tag gesetzt werden.</p>
<p>Eine ACL und ein Access-Eintrag in einem Netz (10.0.0.0/255.255.255.255), wo die erste Hälfte der Clients das Internet benutzen darf und die zweite nicht, sähe wie folgt aus:</p>
<pre>acl our_networks src 10.0.0.0/25
http_access allow our_networks</pre>
<p>Hierbei wird in die ACL &#8220;our_networks&#8221; der Bereich der IP-Adressen definiert, diesen dann Zugriff gewährt und allen anderen nicht. Dieses müsste nun vor der ACL <samp>http_access deny all</samp> in die Konfigurationsdatei eingefügt werden.</p>
<p>Ebenso ist es möglich bestimmte URLs aus zu schießen:</p>
<pre>acl banner url_regex ^http://banner[0-9]*\.
http_access deny banner</pre>
<p>Hier wird zuerst mittels eines Regulären Ausdruckes (Regex) eine ACL auf URLs gebildet, die mit http://banner beginnen und dann keine bis unendlich viele Zahlen im Hostnamen haben. Danach wird mittels &#8220;deny&#8221; diese ACL angewendet.</p>
<p>Wenn anstelle des Wertes einer ACL (als in den beiden obigen Beispielen 10.0.0.0/25 oder ^http://banner[0-9]*\.) eine in Anführungsstrichen stehender Dateiname angegeben wird, wird der Inhalt dieser Datei zeilenweise ausgewertet. Hiermit erspart man sich die Definition mehrerer ACLs für eine Aufgabe. Es ist so z.B. möglich, sich ganze Listen von Begriffen an zu legen, wo kein Zugriff auf eine URL möglich ist, wenn dieser Begriff bestandteil der URL ist.</p>
<p>Dies ist aber nicht ganz unproblematisch, da der Begriff, nach dem gefiltert wird, immer auch Bestandteil von URLs sein, die nicht gefiltert werden sollen. Wenn man z.B. nach dem Begriff Sex filtert, wird man auch immer den Zugriff auf Webseiten wie z.B. www.staatsexamen.de oder www.rechtsexperte.de mit verhindern. Anderseits wird man mit solchen Filterbegriffen niemals alle evtl. unerwünschten Seiten ausschließen können.</p>
<p>ACLs auf Basis einer User-Authentifizierung sind auch möglich, da hier unterschiedliche Methoden möglich, die auf verschiedenen zusätzlichen Modulen aufbauen, wird dies in einem <a href="#h14">separaten Kapitel</a> behandelt.</p>
<h2><a name="h14"></a>User-Authentifizierung</h2>
<p>Die User-Authentifizierung ist beim Squid in zwei unterschiedliche Komponenten aufgeteilt: Authentifikations-Schemas und Authentifikations-Module.</p>
<p>Das Authentifikations-Schema beschreibt, wie der Squid-Proxy die Anmeldeinformationen (Username und Passwort) vom User erhält. Hierbei werden die Schemas entsprechend der im Konfigurationsfile vorgegebenen Reihenfolge angewendet. Der Hauptunterschied bei den drei vorhandenen Schemata ist ein Sicherheitsaspekt. Beim Basis-Schema wird auch das Passwort im Klartext im Netz übertragen.</p>
<p>Das Authentifikations-Modul übernimmt dann die eigentliche Überprüfung der übermittelten Anmeldeinformationen, wobei es aus externen Komponenten besteht. Die auf das Basis- oder NTLM-Schema aufsetzenden Module lesen in einer Endlosschleife von &#8220;STDIN&#8221;, erwachten &#8220;username password&#8221; (entweder bei Basis unverschlüsselt oder bei NTLM verschlüsselt) und geben entsprechend dem Ergebnis der Authentifizierungsprüfung &#8220;OK&#8221; oder &#8220;ERR&#8221; auf &#8220;STDOUT&#8221; zurück. Auf diese Basis lässt sich auch eine eigene Lösung aufsetzen.</p>
<p>Der Squid Proxy bietet somit diverse Authentifizierungsmöglichkeiten an, mit denen es sowohl möglich ist, für den Squid eine eigenständige Passwort-Datei zu nutzen, die &#8220;Pluggable Authentication Modules (PAM)&#8221; zu verwenden, gegen eine Windows NT Domäne, ein Windows &#8220;Active Directory Service (ADS)&#8221; oder einen &#8220;LDAP&#8221;-Server zu authentifizieren oder selber ein Programm/Skript hierfür zu schreiben.</p>
<h3><a name="h141"></a>Authentifizierung mittels Passwortdatei</h3>
<p>Bei einem selbst kompilierten &#8220;Squid&#8221; muss zuerst das entsprechende Modul erzeugt werden. Hierfür muss in dem Verzeichnis, in dem der Source-Code des Squids liegt in das entsprechende Verzeichnis gewechselt werden.</p>
<pre>$ cd helpers/basic_auth/NCSA/
$ make
# make install</pre>
<p>Nun liegt das entsprechende Modul &#8220;ncsa_auth&#8221; in dem Verzeichnis <samp>/usr/local/squid/bin</samp> und kann in der &#8220;squid.conf&#8221; eingebunden werden. Bei einem GNU/Debian-Paket liegen alle Module im Verzeichnis <samp>/usr/lib/squid</samp>.</p>
<pre>#  TAG: auth_param
…
#Default:
# none
auth_param basic program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd
# auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd # bei GNU/Debian
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours</pre>
<p>Die Angabe <samp>children 5</samp> bezieht sich auf die Anzahl an Prozessen die für die User-Authentifizierung gleichzeitig gestartet wird. Der bei <samp>realm</samp> stehende Text wird bei der Passwort-Abfrage den Usern angezeigt. Bei <samp>credentialsttl</samp> wird die Dauer der Gültigkeit einer User-Authentifizierung angegeben. Alle diese Werten können so übernommen werden.</p>
<p>Mittels einer entsprechenden <a href="#h13">ACL</a> wird nun der Zugriff geregelt:</p>
<pre>#  TAG: acl
…
acl manager proto cache_object
acl users proxy_auth "/etc/squid/admins"
acl users proxy_auth REQUIRED
#  TAG: http_access
…
http_access allow manager admins
http_access deny manager
http_access allow users</pre>
<p>Mittels dieser ACL wird fest gelegt, welche Benutzer Zugriff erhalten sollen. Hierbei können auch mehrere, durch Leerzeichen getrennte, Benutzernamen oder eine, in Anführungszeichen eingeschlossene, Datei angegeben werden. Da aber schon das Authentifizierung-Modul gegen eine Datei prüft, würde dies bei diesem Modul eine Doppelpflege bedeutet. Dies lässt sich mittels der Verwendung von &#8220;REQUIRED&#8221;, anstelle der Usernamen, vermeiden. Damit wird jede gültige Anmeldung akzeptiert.</p>
<p>Man kann aber zusätzlich eine Benutzerliste dazu verwenden, den Zugriff auf geschlossene Bereiche, wie dem Squid-Management, nur bestimmten Usern zu ermöglichen.</p>
<p>Nun muss nur noch die entsprechende Passwort-Datei angelegt werden. Diese Datei ist im sog. NCSA-Format, wie es auch vom Web-Server &#8220;Apache&#8221; verwendet wird. Deshalb kann auch dessen Programm <kbd>htpasswd</kbd> hierzu verwendet werden, es erfüllt die gleiche Aufgabe. Ansonsten gibt es noch unter <a href="http://www.squid-cache.org/htpasswd/">htpasswd</a> ein Source-File.</p>
<p>Ansonsten ist noch darauf zu achten, dass die Passwort-Datei von Squid gelesen werden kann, aber von keinem anderen user.</p>
<pre>chown squid.squid passwd
chmod 600 passwd</pre>
<h4>Squid 2.4:</h4>
<pre><em>#  TAG: authenticate_program
…
#       authenticate_program /usr/local/squid/bin/ncsa_auth /usr/local/squid/etc/passwd
#
#Default:
# none</em></pre>
<p><em>Diese Option ist mit der Squid Version 2.5. durch die Option <samp>auth_param</samp> ersetzt worden und ist dort mit dem &#8220;Basis-Schema&#8221; zu vergleichen. Dieses Beispiel bewirkt die gleiche Authentifizierung gegen eine Passwort-Datei wie das vorherige Beispiel.</em></p>
<h3><a name="h142"></a>Authentifizierung mittels Pluggable Authentication Modules (PAM)</h3>
<p>Bei PAM handelt es sich um ein System von Software-Bibliotheken die die Authentifizierungs-Anfragen einzelner Programme gegenüber dem System verarbeiten.</p>
<p>Das Squid-Modul, das die Verbindung zu diesen Bibliotheken herstellt, wird wie folgt kompiliert:</p>
<pre>$ cd helpers/basic_auth/PAM/
$ make
# make install</pre>
<p>Bestimmte PAM Module (z.B. &#8220;shadow password authentication&#8221;) benötigen dieses Programm installiert als Root mit gesetztem setuid-Bit um Zugriff auf die Passwort-Datei zu erhalten:</p>
<pre># chown root /usr/local/squid/libexec/pam_auth
# chmod u+s /usr/local/squid/libexec/pam_auth</pre>
<p>Nun muss dieses Modul noch in die Squid Konfiguration eingebunden werden:</p>
<pre>#  TAG: auth_param
…
#Default:
# none
auth_param basic program /usr/local/squid/libexec/pam_auth
# auth_param basic program /usr/lib/squid/pam_auth # bei GNU/Debian
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
#  TAG: acl
…
acl users proxy_auth "/etc/squid/allow_users"
#  TAG: http_access
…
http_access allow users</pre>
<p>Im Idealfall war es dies schon und die Zugriffskontrolle funktioniert über die zentrale Passwort-Datei des Systems. Da nun alle authentifizierten User über den Squid Zugriff auf das Web haben, kann es in diesem Fall sinnvoll sein, einen eigenständige Berechtigungsdatei zu führen und mittels einer ACL einzubinden.</p>
<p>Falls die PAM-Voreinstellungen nicht greifen, muss für den Squid Proxy noch ein entsprechende Eintrag in der PAM-Konfiguration erstellt werden. Konfiguriert wird PAM mittels einer Datei <samp>/etc/pam.conf</samp> oder eines Verzeichnis <samp>/etc/pam.d</samp>. Wenn dieses Verzeichnis vorhanden ist, wird die Datei ignoriert.</p>
<p>Entsprechend der lokalen Gegebenheit (Datei oder Verzeichnis) müssen für den Squid noch mindestens zwei Einträge erstellt werden.</p>
<p>In der Datei <samp>/etc/pam.conf</samp>:</p>
<p><samp>squid auth    required pam_unix.so<br />
</samp>squid account required pam_unix.so</p>
<p>Oder in der neu anzulegenden Datei <samp>/etc/pam.d/squid</samp>:</p>
<p><samp>auth    required pam_unix.so<br />
</samp>account required pam_unix.so</p>
<p>Ebenso müssen eigene Einträge erstellt werden, wenn ein anderes PAM-Modul verwendet werden soll, um zum Beispiel eine Authentifizierung mittels PAM gegen einen <a href="#h143">LDAP</a>-Server zu betreiben.</p>
<p>Mehr Infos zu PAM bietet <kbd>man 8 pam</kbd>.</p>
<h3><a name="h143"></a>Authentifizierung mittels Lightweight Directory Access Protokoll (LDAP)</h3>
<p>Für eine Authentifizierung mittels &#8220;LDAP&#8221; gibt es unterschiedliche Ansätze.</p>
<p>Der einfachste Ansatz ist hierbei auf die <a href="#h142">Authentifizierung per PAM</a> zurück zu greifen und dieses Verfahren um LDAP-Support zu erweitern.</p>
<p>Hierfür müssen in der Datei <samp>/etc/pam.d/squid</samp> die folgenden Einträge stehen:</p>
<p><samp>auth    sufficient pam_ldap.so<br />
</samp>auth    required   pam_unix.so try_first_pass<br />
account sufficient pam_ldap.so<br />
account required   pam_unix.so</p>
<p>Hier wird nun zuerst gegen einen LDAP-Server geprüft und wenn dies erfolglos war, ohne erneute Passwort-Eingabe, gegen die zentrale Passwort-Datei.</p>
<p>Eine andere Möglichkeit besteht in der Verwendung des Moduls &#8220;squid_ldap_auth&#8221; (bei GNU/Debian hat man es in &#8220;ldap_auth&#8221; umbenannt). Der Aufruf des Moduls erfolgt über <samp>squid_ldap_auth -b basedn [options] [ldap_server_name[:port]]&#8230;</samp>. Welche Optionen im Detail zur Verfügung stehen lässt sich durch einen einfachen Aufruf des Moduls auf einer Konsole feststellen.</p>
<p>Die Option <samp>-b basedn</samp> ist auf jeden Fall zwingend und Erfahrungsgemäß ist auch die Übergabe der Protokollversion mittels <samp>-v 2|3</samp> oft sinnvoll, da das Module nicht immer die richtige Version erkennt und somit unnötig Fehler produziert werde. Es sollte auf jeden Fall auf einer Konsole eine Abfrage getestet werden, bevor das Module in der &#8220;squid.conf&#8221; aktiviert wird:</p>
<p><kbd>echo "<br />
" | /usr/local/squid/libexec/squid_ldap_auth -v 3 -b dc=example,dc=org -f "uid=%s" localhost</kbd>, wobei &#8220;dc=example,dc=org&#8221; nur ein Beispiel für einen Base DN ist.</p>
<p>Wenn als Ausgabe ein &#8220;OK&#8221; erscheint, hat alles funktioniert und der Integration der LDAP-Authentifizierung in Squid steht nichts mehr im Wege. Bei einem Fehler sollte auf jeden Fall in den Logfiles des LDAP-Servers nachgesehen werden (bzw. das Log-Level dort erhöht werden und die Abfrage wiederholt).</p>
<p>Die Einbindung in die Squid-Konfiguration erfolgt dann wie gewohnt:</p>
<pre>#  TAG: auth_param
…
#Default:
# none
auth_param basic program /usr/local/squid/libexec/squid_ldap_auth -v 3 -b dc=example,dc=org -f "uid=%s" localhost
# auth_param basic program /usr/lib/squid/ldap_auth -v 3 -b dc=example,dc=org -f "uid=%s" localhost # bei GNU/Debian
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours</pre>
<p>Für eine dettailierter Zugriffsnegelung muss auch hier wieder eine ACL definiert werden. Neben der schon bekannten Form der externen Liste bietet sich gerade hier eine LDAP-Abfrage an. Hierfür steht das zum Squid gehörende Programm &#8220;squid_ldap_group&#8221; zur Verfügung.</p>
<p>Wenn &#8220;squid_ldap_group&#8221; nicht über die verwendete Linux-Distribution installiert wurde, muss es als erstes kompiliert werden. Wichtig ist hierbei, dass beim Kompilieren die Header-Dateien von OpenLDAP installiert sind.</p>
<pre>$ cd helpers/external_acl/ldap_group/
$ make
# make install</pre>
<p>Dann sollte ein Test dieses Programms und des Filters auf einer Konsole erfolgen:</p>
<p><kbd>echo " " | /usr/lib/squid/squid_ldap_group -b dc=example,dc=org -v 3 -f "(&amp;(objectClass=posixGroup)(cn=%a)(memberUid=%v))" localhost</kbd></p>
<p>Hier wird mittels eines LDAP-Filter getestet, ob es einen LDAP-Eintrag gibt, der als Inhalt die Klasse &#8220;posixGroup&#8221; hat &#8211; also eine Benutzergruppe ist &#8211; und den Übergebenen Gruppennamen z.B. &#8220;squid_user&#8221; hat und den Eintrag &#8220;memberUid&#8221; mit dem übergebenen User-Name. Oder anders gesagt, ist der übergebene Benutzer Mitglied der Benutzergruppe &#8220;squid_user&#8221;.</p>
<p>Bei einem &#8220;OK&#8221; als Rückgabewert sollte man aber auch einmal mit falschen Werten testen um zu sehen, ob der Filter dann einer &#8220;ERR&#8221; zurück gibt oder nicht einfach alles bestätigt.</p>
<p>Die Einbindung des Filters erfolgt nun an mehreren Stellen.</p>
<pre>#  TAG: external_acl_type
#         external_acl_type name [options] FORMAT.. /path/to/helper [helper arguments..]
…
external_acl_type ldap_filter %LOGIN /usr/local/squid/libexec/squid_ldap_group -b ou=group,dc=example,dc=org -v 3 \
	-f "(&amp;(objectClass=posixGroup)(cn=%a)(memberUid=%v))" localhost
…
#  TAG: acl
#       acl acl_name external class_name [arguments...]
…
acl users external ldap_filter squid_user</pre>
<p>Zuerst wird die externe ACL-Klasse &#8220;ldap_filter&#8221; definiert. Das übergebene Format &#8220;%LOGIN&#8221; beinhaltet den schon durch die Authentifizierung festgestellten Usernamen. Aufgerufen wird diese externe ACL-Klasse dann mit dem zweiten Eintrag, dem als Parameter &#8220;squid_user&#8221; übergeben wird. Durch diese Übergabe des abzufragenden Gruppennamens ist es möglich, mehrere Gruppen abzufragen und somit strukturiertere Zugriffsberechtigungen zu setzen. Nun muss nur noch der Zugriff für diese ACL definiert werden:</p>
<pre>#  TAG: http_access
…
http_access allow users</pre>
<h3><a name="h144"></a>Authentifizierung gegen eine Windows NT Domäne</h3>
<p>Für die Authentifizierung gegen die Konten einer Windows NT Domäne gibt es z.Zt. zwei unterschiedliche Module (&#8220;SMB&#8221; und &#8220;MSNT&#8221;). Nachfolgend wird sich nur auf das Modul &#8220;SMB&#8221; bezogen.</p>
<p>Dieses Module prüft die Zugangsberechtigung wahlweise gegen einen SaMBa-Server als auch gegen eine NT-Domäne. Es setzt hierbei aber eine SaMBa-Installation zwingend voraus, ermöglicht aber eine Konfiguration über Rechtevergabe auf der NT-Domäne.</p>
<p>Auch hier muss das entsprechende Modul zuerst kompiliert werden:</p>
<pre>$ cd helpers/basic_auth/SMB/
$ make
# make install</pre>
<p>Die weitere Konfiguration erfolgt über den NT-Domän-Kontroller (bzw. dem entsprechenden SaMBa-Server), indem die Datei <samp>\netlogon\proxyauth</samp> ausgewertet wird. Die Datei hat als einzigen Inhalt das Wort &#8220;allow&#8221;. Nun muss noch auf Seiten der NT-Rechteverwaltung einem User oder einer Lokalen bzw. Globalen Gruppe (z.B. &#8220;Internet-Nutzer&#8221;) Leserecht für diese Datei gewährt. Danach können sich die User mit ihrem NT-Passwort am Squid-Proxy anmelden.</p>
<p>In der Squid Konfiguration wird dieses Modul wie folgt eingebunden:</p>
<pre>#  TAG: auth_param
…
auth_param basic program /usr/local/bin/smb_auth -W
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
#  TAG: acl
…
acl domainusers proxy_auth REQUIRED
#  TAG: http_access
…
http_access allow domainusers</pre>
<p>Dem Module <samp>smb_auth</samp> wird mittels der Option <samp></samp> der Domänname der NT-Domäne (bitte nicht mit der DNS-Domain verwechseln) übergeben. Dies ist zwar nicht absolut notwendig, da das Modul ansonsten per Broadcast-Umfrage diesen finden würde, aber es beschleunigt die Anmeldung doch ungemein.</p>
<p>Ansonsten wird mittels &#8220;REQUIRED&#8221; allen gültig Angemeldeten, sprich die, die die entsprechenden Rechte auf NT-Seite erhalten haben, Zugriff auf den Proxy gewährt.</p>
<h2><a name="h15"></a>&#8220;Squid&#8221; als Transparenter HTTP-Proxy</h2>
<p>Ein beliebtest Einsatzgebiet des Squids ist der Einsatz als Transparenter Proxy. Der Vorteil hierbei ist, dass auf den Clients kein Proxy im Browser eingetragen werden muss (wobei hierfür in Netzwerken durchaus zentrale Möglichkeiten bestehen, die Konfiguration der Clients zu verändern). Der evtl. Nachteil ist aber, dass auf einem transparenten Proxy keine User-Authentifizierung möglich ist und dass das Ganze nur bei HTTP (und nicht bei HTTPS oder FTP) funktioniert.</p>
<p>Umgesetzt wird dies durch eine Umleitung aller TCP-Pakete am Router, die von den Clients zu einem externen Port 80 gesendet werden. Diese Pakete werden nun direkt an den Squid-Proxy umgeleitet. Da die Clients nun aber nichts über einen Proxy in ihrer Verbindung zu externen Servern wissen, können sie auch keine speziellen Anfragen an diesen Proxy stellen. Hierdurch versagen nun die HTTPS- und FTP-Requests, da erstere, auf Sicherheit beruhend, nun den Proxy als &#8220;man-in-the-middle attack&#8221; ansehen und letztere neben der Download-Verbindung eine weitere Verbindung für das Senden von Daten benötigen (beim normalen Proxy wird zwischen Client und Proxy eine HTTP-Verbindung aufgebaut und erst vom Proxy zum FTP-Server eine FTP-Verbindung).</p>
<p>Damit der Squid als transparenter Proxy arbeitet müssen die folgenden Einstellungen geändert werden:</p>
<pre>#  TAG: httpd_accel_host
#  TAG: httpd_accel_port
…
#Default:
# httpd_accel_port 80
httpd_accel_host virtual
httpd_accel_port 80
#  TAG: httpd_accel_with_proxy  on|off
…
httpd_accel_with_proxy on
#  TAG: httpd_accel_uses_host_header    on|off
…
httpd_accel_uses_host_header on</pre>
<p>Weiterhin ist es notwendig mittels &#8220;iptables&#8221;-Regeln alle TCP-Pakete an den Proxy umzuleiten:</p>
<p><kbd>iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128</kbd></p>
<p>Diese Regel sollte dann in einem Skript stehen, dass automatisch nach dem Booten ausgeführt wird.</p>
<h2><a name="h16"></a>&#8220;Squid&#8221; starten</h2>
<p>Nun kann der Squid Proxy mittels <kbd>/usr/local/squid/bin/squid</kbd> gestartet werden. Wenn dies nicht zu dem gewünschten Erfolg führt und der Squid auch keine Fehlermeldung ausgibt, sollte man folgendes prüfen:</p>
<ul>
<li>Sind die für den Start des Proxies angegebene User und Gruppe vorhanden?</li>
<li>Ist ein &#8220;Fully Qualified Domain Name&#8221; für den Proxy-Server definiert?</li>
<li>Hat der Squid Schreibrechte auf sein PID-File, seinen Cache und seine Logfiles?</li>
<li>Das <a href="#h123">Logfile-Debuging hoch setzen</a> um evtl. mehr Fehlermeldungen zu erhalten.</li>
</ul>
<p>Wenn der Squid läuft, sollte man für ihn ein Runlevel-Skript anlegen und die entsprechenden Links in den Runlevel-Verzeichnissen anlegen. Eine Vorlage für dieses Skript ist bei den meisten Distributionen unter <samp>/etc/rc.d/init.d/skeleton</samp> zu finden.</p>
<p>&copy;2012 <a href="http://blog.proesdorf.de">Dirks Blog</a>. All Rights Reserved.</p>.]]></content:encoded>
			<wfw:commentRss>http://blog.proesdorf.de/2010/06/29/squid-proxy-konfigurieren.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

