<?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>Thomas Falkner &#187; Administration</title>
	<atom:link href="http://blog.thomas-falkner.de/category/administration/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.thomas-falkner.de</link>
	<description>Marginalien zu  Linux, Webdesign und Softwareentwicklung</description>
	<lastBuildDate>Thu, 29 Mar 2012 11:51:20 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Mit Apache Hotlinking und Bilderklau unterbinden</title>
		<link>http://blog.thomas-falkner.de/2009/08/31/mit-apache-hotlinking-und-bilderklau-unterbinden/</link>
		<comments>http://blog.thomas-falkner.de/2009/08/31/mit-apache-hotlinking-und-bilderklau-unterbinden/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 09:14:42 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[mod_rewrite]]></category>
		<category><![CDATA[regex]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/?p=248</guid>
		<description><![CDATA[Als Webmaster freut man sich &#252;ber eingehende Links, denn schlie&#223;lich steigt damit die Linkpopularit&#228;t. Werden jedoch einzelne Inhalte wie beispielsweise Bilder in Foren direkt per Link eingebunden, k&#246;nnen sich daraus erhebliche Probleme ergeben: Ist das Forum stark frequentiert und das eingebundene Foto relativ gro&#223;, kann der so generierte Traffic schnell bedrohliche Ausma&#223;e annehmen. Keine Chance [...]]]></description>
			<content:encoded><![CDATA[<p>Als Webmaster freut man sich &#252;ber eingehende Links, denn schlie&#223;lich steigt damit die Linkpopularit&#228;t. Werden jedoch einzelne Inhalte wie beispielsweise Bilder in Foren direkt per Link eingebunden, k&#246;nnen sich daraus erhebliche Probleme ergeben: Ist das Forum stark frequentiert und das eingebundene Foto relativ gro&#223;, kann der so generierte Traffic schnell bedrohliche Ausma&#223;e annehmen. </p>
<h2>Keine Chance f&#252;r Trafficdiebe</h2>
<p>W&#228;re es nicht elegant Trafficdieben das Handwerk zu legen, indem wir Ihnen statt dem verlinkten Bild eine andere Datei unterschieben? Statt des gew&#252;nschten Fotos k&#246;nntest du den Contentdieb auf diese Weise unfreiwillig ein Werbebanner f&#252;r deine eigene Website einbinden lassen.</p>
<p><img src="http://blog.thomas-falkner.de/wp-content/uploads/2009/08/stoppt_contentdiebe.png" alt="stoppt_contentdiebe" title="stoppt_contentdiebe" width="450" height="50" class="alignnone size-full wp-image-255" /></p>
<p>Voraussetzung f&#252;r die beschriebene Technik ist ein Apache Webserver mit dem Modul mod_rewrite. Der Code kann entweder &#252;ber .htacess oder direkt &#252;ber die Apache-Konfigurationsdatei eingebunden werden.<br />
Ersetze einfach <tt>domain.tld</tt> gegen die Domain deiner Website und <tt>stoppt_contentdiebe.png</tt> gegen den Namen der Grafik, die du Contentdieben unterschieben m&#246;chtest. </p>
<p><code><br />
<filesmatch "\.(gif|jpg|png)$"><br />
      RewriteEngine on<br />
      RewriteCond %{HTTP_REFERER} !^$<br />
      RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.tld [NC]<br />
      RewriteCond %{REQUEST_FILENAME} !stoppt_contentdiebe.png$<br />
      RewriteRule .*\.(gif|jpg|png)$ http://domain.tld/images/stoppt_contentdiebe.png [R]<br />
</filesmatch><br />
</code></p>
<h2>Erkl&#228;rung zum Script</h2>
<p>Zun&#228;chst pr&#252;fen wir anhand der Direktive filesmatch die Dateiendung gegen einen einfachen regul&#228;ren Ausdrucks:</p>
<p><code><filesmatch "\.(gif|jpg|png)$"></filesmatch></code></p>
<p>Damit erfassen wir alle aufgerufenen Dateien, die die Dateiendung .gif, .jpg  oder .png tragen. Selbstverst&#228;ndlich lie&#223;e sich der Ausdruck um viele weitere Dateiendungen erweitern, deren direkte Verlinkung wir unterbinden m&#246;chten.</p>
<p>Im n&#228;chsten Schritt schalten wir die RewriteEngine an. Die RewriteEngine erlaubt es uns mittels <tt>RewriteCond</tt> verschiedene Parameter des HTTP-Request gegen regul&#228;re Ausdr&#252;cke zu pr&#252;fen und bei Entsprechung die aufgerufene URL zu manipulieren.</p>
<p>Grunds&#228;tzlich m&#252;ssen wir &#252;berpr&#252;fen, von welcher Domain aus das Bild verlinkt wurde. Dazu lesen wir den Parameter HTTP_REFERER aus. HTTP_REFERER gibt den Referrer, also die auf einen Link verweisende Domain an. </p>
<p>Getreu dem Motto &#8220;Was nicht erlaubt ist, ist verboten&#8221; k&#246;nnen wir zwei Bedingungen f&#252;r ein legitimes Verlinken der Fotos formulieren.</p>
<ol>
<li>Wenn kein Referrer angegeben ist. Das ist der Fall, wenn beispielsweise durch einen Proxy gel&#246;scht oder die URL direkt aufgerufen wurde.</li>
<li>Wenn der Referrer unserer eigenen Domain entspricht.</li>
</ol>
<p>Wir k&#246;nnen demnach folgende Bedienungen formulieren:</p>
<p>Der Referrer ist leer:<br />
<code><br />
      RewriteCond %{HTTP_REFERER} !^$<br />
</code></p>
<p>Der Referrer entspricht unserer eigenen Domain, wobei domain.tld gegen die Domain deiner Website zu ersetzen ist:<br />
<code><br />
       RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain.tld [NC]<br />
</code></p>
<p>Damit die RewriteEngine sich nicht in einer endlosen Schleife verf&#228;ngt, die letztlich mit einem Internal-Server-Error quittiert w&#252;rde, m&#252;ssen wir f&#252;r das dem Trafficdieben unterzuschiebende Bild eine Ausnahme formulieren:</p>
<p><code>RewriteCond %{REQUEST_FILENAME} !stoppt_contentdiebe.png$</code></p>
<p>Sind alle Bedingungen erf&#252;llt, greift folgende Regel, mit der wir alle fremdverlinkten Bilder gegen unseren Hinweis ersetzen. </p>
<p><code>RewriteRule .*\.(gif|jpg|png)$ http://domain.tld/stoppt_contentdiebe.png [R]</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2009/08/31/mit-apache-hotlinking-und-bilderklau-unterbinden/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vim: Datei trotz fehlender Schreibrechte speichern</title>
		<link>http://blog.thomas-falkner.de/2009/07/30/vim-datei-trotz-fehlender-schreibrechte-speichern/</link>
		<comments>http://blog.thomas-falkner.de/2009/07/30/vim-datei-trotz-fehlender-schreibrechte-speichern/#comments</comments>
		<pubDate>Thu, 30 Jul 2009 20:50:33 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[vim]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/?p=239</guid>
		<description><![CDATA[Ich bekenne mich als vim-Fan. Abgesehen von Textmate habe ich noch keinen Editor gefunden, mit dem ich &#228;hnlich produktiv arbeiten k&#246;nnte. Unter vim wurde bisweilen meine Produktivit&#228;t gelegentlich ein wenig gebremst: Schnell eine &#196;nderung in einer Server-Konfigurationsdatei vorgenommen, :win die Tastatur gehackt und vim quittiert es mit E212: Can't open file for writing. Mal wieder [...]]]></description>
			<content:encoded><![CDATA[<p>Ich bekenne mich als <a href="http://www.vim.org/">vim</a>-Fan. Abgesehen von <a href="http://macromates.com/">Textmate </a> habe ich noch keinen Editor gefunden, mit dem ich &#228;hnlich produktiv arbeiten k&#246;nnte. Unter vim wurde bisweilen meine Produktivit&#228;t gelegentlich ein wenig gebremst: Schnell eine &#196;nderung in einer Server-Konfigurationsdatei vorgenommen, <tt>:w</tt>in die Tastatur gehackt und vim quittiert es mit <tt>E212: Can't open file for writing</tt>. Mal wieder die vergessen vim mit sudo zu starten. Zwar l&#228;sst sich die Datei problemlos unter einem tempor&#228;ren Dateinamen speichern und dann mit <tt>sudo mv</tt> verschieben, doch das kostet unn&#246;tig Zeit.</p>
<p>Viel eleganter und schneller l&#228;sst sich die Datei trotz mangelnder Zugriffsrechte direkt aus vim heraus abspeichern:<br />
<code>:w !sudo tee %</code></p>
<p>Ein kleine Befehlsfolge, die mir k&#252;nftig viel Zeit sparen wird. <img src='http://blog.thomas-falkner.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2009/07/30/vim-datei-trotz-fehlender-schreibrechte-speichern/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>load average: 5.49, 4.99, 3.83</title>
		<link>http://blog.thomas-falkner.de/2009/06/08/load-average-549-499-383/</link>
		<comments>http://blog.thomas-falkner.de/2009/06/08/load-average-549-499-383/#comments</comments>
		<pubDate>Mon, 08 Jun 2009 14:22:16 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/?p=220</guid>
		<description><![CDATA[Ich bef&#252;rchte, das schreit nach einem neuen Datenbankserver. Ich habe noch nie einen so hohen Load gesehen: 16:18:35 up 276 days, 2:47, 2 users, load average: 5.49, 4.99, 3.83]]></description>
			<content:encoded><![CDATA[<p>Ich bef&#252;rchte, das schreit nach einem neuen Datenbankserver. Ich habe noch nie einen so hohen Load gesehen:</p>
<p><code>16:18:35 up 276 days,  2:47,  2 users,  load average: 5.49, 4.99, 3.83</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2009/06/08/load-average-549-499-383/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Langsamer DVD-Brenner unter Windows XP</title>
		<link>http://blog.thomas-falkner.de/2008/12/21/langsamer-dvd-brenne/</link>
		<comments>http://blog.thomas-falkner.de/2008/12/21/langsamer-dvd-brenne/#comments</comments>
		<pubDate>Sun, 21 Dec 2008 21:10:31 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/?p=215</guid>
		<description><![CDATA[Wird ein Brennvorgang gewaltsam abgebrochen, kann es passieren, dass der DVD/CD-Brenner unter Windows XP fortan nur noch im Schneckentempo CDs und DVDs brennen m&#246;chte und zudem eine enorm hohe CPU-Last erzeugt wird. Diese Symptome weisen darauf hin, dass Windows das Laufwerk nur noch im &#228;u&#223;erst langsamen und zugleich ressourcenhungrigen PIO-Modus betreibt. Abhilfe schafft hier meiner [...]]]></description>
			<content:encoded><![CDATA[<p>Wird ein Brennvorgang gewaltsam abgebrochen, kann es passieren, dass der DVD/CD-Brenner unter Windows XP fortan nur noch im Schneckentempo CDs und DVDs brennen m&#246;chte und zudem eine enorm hohe CPU-Last erzeugt wird. Diese Symptome weisen darauf hin, dass Windows das Laufwerk nur noch im &#228;u&#223;erst langsamen und zugleich ressourcenhungrigen PIO-Modus betreibt.<br />
Abhilfe schafft hier meiner Erfahrung nach nur noch den Rechner in den abgesicherten Modus zu starten und das betroffene Laufwerk nebst Controller im Ger&#228;temanager zu entfernen. Nach einem Neustart wird die Hardware wieder automatisch erkannt und Windows XP spricht das Laufwerk im ungleich schnelleren UDMA-Modus an.</p>
<p>[ad]</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2008/12/21/langsamer-dvd-brenne/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Produktschl&#252;ssel per T-SQL auslesen</title>
		<link>http://blog.thomas-falkner.de/2008/10/16/produktschluessel-per-t-sql-auslesen/</link>
		<comments>http://blog.thomas-falkner.de/2008/10/16/produktschluessel-per-t-sql-auslesen/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 17:13:08 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[hacks]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[tsql]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/?p=209</guid>
		<description><![CDATA[Mit der T-SQL Funktion xp_regread lassen sich beliebige Parameter aus der Registry auslesen. So beispielsweise auch der CD-Key des Microsoft SQL-Servers: USE master EXEC xp_regread 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Microsoft SQL Server\80\registration', 'CD_KEY']]></description>
			<content:encoded><![CDATA[<p>Mit der T-SQL Funktion <tt>xp_regread</tt> lassen sich beliebige Parameter aus der Registry auslesen. So beispielsweise auch der CD-Key des Microsoft SQL-Servers:</p>
<p><code>USE master<br />
EXEC xp_regread 'HKEY_LOCAL_MACHINE',<br />
'SOFTWARE\Microsoft\Microsoft SQL Server\80\registration',<br />
'CD_KEY'<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2008/10/16/produktschluessel-per-t-sql-auslesen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux: Mehrere IP-Adressen an ein Netzwerkinterface binden</title>
		<link>http://blog.thomas-falkner.de/2008/08/25/linux-mehrere-ip-adressen-an-ein-netzwerkinterface-binden/</link>
		<comments>http://blog.thomas-falkner.de/2008/08/25/linux-mehrere-ip-adressen-an-ein-netzwerkinterface-binden/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 20:40:44 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[rootserver]]></category>
		<category><![CDATA[tipps]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/?p=201</guid>
		<description><![CDATA[Manchmal ist es erforderlich mehrere IP-Adressen an ein Netzwerkinterface zu binden. Nur so lassen sich beispielsweise auf einem angemieteten Rootserver mit nur einer Netzwerkkarte Websites unter verschiedenen IP-Adressen hosten &#8211; Voraussetzung dabei ist selbstverst&#228;ndlich, dass der Hoster zus&#228;tzliche IP-Adressen zur Verf&#252;gung stellt. Linux bietet mit dem Konzept der virtuellen Netzwerkinterfaces eine elegante L&#246;sung, um an [...]]]></description>
			<content:encoded><![CDATA[<p>Manchmal ist es erforderlich mehrere IP-Adressen an ein Netzwerkinterface zu binden. Nur so lassen sich beispielsweise auf einem angemieteten Rootserver mit nur einer Netzwerkkarte Websites unter verschiedenen IP-Adressen hosten &#8211; Voraussetzung dabei ist selbstverst&#228;ndlich, dass der Hoster zus&#228;tzliche IP-Adressen zur Verf&#252;gung stellt.</p>
<p>Linux bietet mit dem Konzept der virtuellen Netzwerkinterfaces eine elegante L&#246;sung, um an einen Netzwerkadapter viele IP-Adressen zu binden. Jede physikalisch Netzwerkkarte tr&#228;gt einen eindeutigen Namen, etwa <tt>eth0</tt> f&#252;r die erste Karte oder <tt>eth1</tt> f&#252;r die zweite Netzwerkkarte. F&#252;r jede physikalische Netzwerkarte lassen sich mehrere virtuelle Interfaces mit einer eigenen IP-Adresse konfigurieren. Dazu ist das physikalische Interface (<tt>eth0</tt>, <tt>eth1</tt>, <tt>eth2</tt> usw.) gefolgt von einem Doppelpunkt und der Nummer des zu erstellenden virtuellen Interface anzugeben.  So bezeichnet <tt>eth0:1</tt> das erste virtuelle Interface an der physikalischen Netzwerkkarte <tt>eth0</tt> und eth1:5 das f&#252;nfte virtuelle Interface an der zweiten Netzwerkkarte <tt>eth1</tt>.</p>
<p>Die virtuellen Netzwerkschnittstellen lassen sich mit den gleichen Werkzeugen konfigurieren, wie ihre physikalischen Pendants.</p>
<p>Um beispielsweise manuell die IP-Adresse <tt>192.168.35.100</tt> an die Netzwerkkarte <tt>eth0</tt> zu binden, gen&#252;gt es folgenden Befehl mit root-Rechten auszuf&#252;hren.</p>
<p><code>ifconfig eth0:1 192.168.35.200 netmask 255.255.255.0 broadcast 192.168.35.255 up</code></p>
<p>M&#246;chte man die manuell vorgenommene Konfiguration dauerhaft hinterlegen, w&#228;re unter Debian die <tt>/etc/network/interfaces</tt> wie folgt zu editieren:</p>
<p><code>auto eth0:1<br />
iface eth0:1 inet static<br />
        address 192.168.35.200<br />
        netmask 255.255.255.0<br />
        broadcast 192.163.35.255<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2008/08/25/linux-mehrere-ip-adressen-an-ein-netzwerkinterface-binden/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Firefox 3 und selbstsignierte SSL-Zertifikate</title>
		<link>http://blog.thomas-falkner.de/2008/08/19/firefox-3-und-selbstsignierte-ssl-zertifikate/</link>
		<comments>http://blog.thomas-falkner.de/2008/08/19/firefox-3-und-selbstsignierte-ssl-zertifikate/#comments</comments>
		<pubDate>Tue, 19 Aug 2008 20:56:18 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[ssl]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/?p=193</guid>
		<description><![CDATA[Unter Firefox 3 ist es per Default recht umst&#228;ndlich selbstsignierte SSL-Zertifikate zu akzeptieren. Hat bei vorherigen Versionen noch ein Klick auf &#8220;Zertifikat akzeptieren&#8221; gen&#252;gt, verlangt Firefox 3 nun gleich Best&#228;tigungen. Grunds&#228;tzlich ist dies Verhalten von Firefox 3 durchaus sinnvoll, weil es h&#228;ufig keine gute Idee ist leichtfertig Zertifikaten zu vertrauen, die der Anbieter selbst signiert [...]]]></description>
			<content:encoded><![CDATA[<p>Unter Firefox 3 ist es per Default recht umst&#228;ndlich selbstsignierte SSL-Zertifikate zu akzeptieren. Hat bei vorherigen Versionen noch ein Klick auf &#8220;Zertifikat akzeptieren&#8221; gen&#252;gt, verlangt Firefox 3 nun gleich Best&#228;tigungen. Grunds&#228;tzlich ist dies Verhalten von Firefox 3 durchaus sinnvoll, weil es h&#228;ufig keine gute Idee ist leichtfertig Zertifikaten zu vertrauen, die der Anbieter selbst signiert hat.</p>
<p><a href="http://blog.thomas-falkner.de/wp-content/uploads/2008/08/firefox_ssl_zertifikat.png"><img src="http://blog.thomas-falkner.de/wp-content/uploads/2008/08/firefox_ssl_zertifikat.png" alt="" title="Firefox 3 selbstsigniertes SSL-Zertifikat" width="480" height="316" class="alignnone size-full wp-image-195" /></a></p>
<p>Wen das Verhalten als erfahrenen User nervt, kann es zum Gl&#252;ck abstellen:<br />
Dazu gen&#252;gt es in die Adresszeile <strong>about:config</strong> einzugeben folgende Eintr&#228;ge zu konfigurieren:</p>
<ul>
<li>browser.xul.error_pages.expert_bad_cert  = <strong>true</strong></li>
<li>browser.ssl_override_behavior = <strong>2</strong></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2008/08/19/firefox-3-und-selbstsignierte-ssl-zertifikate/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L&#228;uft der Mailserver noch?</title>
		<link>http://blog.thomas-falkner.de/2008/04/15/laeuft-der-mailserver-noch/</link>
		<comments>http://blog.thomas-falkner.de/2008/04/15/laeuft-der-mailserver-noch/#comments</comments>
		<pubDate>Tue, 15 Apr 2008 21:28:49 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Work]]></category>
		<category><![CDATA[greylisting]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/2008/04/15/laeuft-der-mailserver-noch/</guid>
		<description><![CDATA[Usern kann man es nie recht machen: Entweder bekommen Sie zuviel oder zuwenig Spam. Seitdem mein Arbeitgeber mich gebeten hat endlich etwas wirksameres als statistische Filter der steigenden Spamflut entgegenzusetzen, habe ich mich nach Evaluierung verschiedener Methoden f&#252;r das Greylisting entschieden. Das Verfahren ist nicht unkritisch, weil unter anderem E-Mails erst zeitversetzt zugestellt werden und [...]]]></description>
			<content:encoded><![CDATA[<p>Usern kann man es nie recht machen: Entweder bekommen Sie zuviel oder zuwenig Spam. Seitdem mein Arbeitgeber mich gebeten hat endlich etwas wirksameres als statistische Filter der steigenden Spamflut entgegenzusetzen, habe ich mich nach Evaluierung verschiedener Methoden  f&#252;r das Greylisting entschieden. Das Verfahren ist nicht unkritisch, weil unter anderem E-Mails erst zeitversetzt zugestellt werden und bei falsch konfigurierten Mailserver des Absenders E-Mails sogar gar nicht zugestellt werden k&#246;nnten. Das Problem wurde dadurch entsch&#228;rft, indem eine Whitelist mit E-Mailadressen bestehender Kunden, Zulieferern und Gesch&#228;ftspartnern gepflegt wird, die vom Greylisting ausgenommen werden.</p>
<p>Seit Einf&#252;hrung des Verfahrens vor 2 Wochen hat sich die Anzahl des Spam in den Postf&#228;chern der User von &#252;ber 100 auf unter 10 reduziert.<br />
Doch einen Pferdefu&#223; hat das Greylisting: St&#228;ndig werde ich von meinen Kollegen gefragt, ob unser Mailserver denn noch liefe, sie h&#228;tten schon so lange keine E-Mail mehr erhalten.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2008/04/15/laeuft-der-mailserver-noch/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SSH absichern</title>
		<link>http://blog.thomas-falkner.de/2007/09/25/ssh-absichern/</link>
		<comments>http://blog.thomas-falkner.de/2007/09/25/ssh-absichern/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 17:36:23 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[rootserver]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/2007/09/25/ssh-absichern/</guid>
		<description><![CDATA[Vor einiger Zeit schon  habe ich mir vorgenommen etwas dar&#252;ber zu schreiben, wie ein Webserver abgesichert werden kann. Darum nehme ich die heute k&#252;rzlich gestellte Frage zum Anlass endlich damit zu beginnen und fange bei SSH an. Im folgenden beziehe ich mich auf die Implementierung OpenSSH. Die Konfiguration anderer Implementierung wie etwas SSH.com verl&#228;uft &#228;hnlich, [...]]]></description>
			<content:encoded><![CDATA[<p>Vor einiger Zeit schon  habe ich mir vorgenommen etwas dar&#252;ber zu schreiben, wie ein Webserver abgesichert werden kann. Darum nehme ich die<strike> heute</strike> k&#252;rzlich gestellte Frage zum Anlass endlich damit zu beginnen und fange bei SSH an. Im folgenden beziehe ich mich auf die Implementierung <a href="http://www.openssh.com/">OpenSSH</a>. Die Konfiguration anderer Implementierung wie etwas <a href="http://www.ssh.com/">SSH.com</a> verl&#228;uft &#228;hnlich, weicht jedoch im Detail ab.</p>
<p>Bevor wir beginnen, solltest du sicherstellen, dass du eine aktuelle SSH Version benutzt. Unter Debian gen&#252;gt dazu der Einzeiler <tt>apt-get update; apt-get dist-upgrade</tt>. Unter anderen Distributionen stehen &#228;hnliche Werkzeuge zum Update zur Verf&#252;gung wie etwas yast unter Suse.</p>
<p>Nun ist es an der Zeit die Konfigurationsdatei <tt>/etc/ssh/sshd_config</tt> zu bearbeiten. Ich werde im folgenden die sicherheitsrelevanten Optionen durchgehen und kurz kommentieren.</p>
<p><code>ListenAddress 217.79.182.18</code></p>
<p>Wenn ein Server mit mehr als einem Netzwerkinterface ausgestattet ist, kann es sinnvoll sein den Zugriff bestimmte Interfaces zu beschr&#228;nken. Beim klassischen Webserver d&#252;rfte das allerdings nicht der Fall sein.</p>
<p><code>Port 2222</code></p>
<p>Standardm&#228;&#223;ig lauscht der SSH-D&#228;mon auf Port 22. Viele Bruteforceattacken gegen ganze Netzwerksegmente k&#246;nnen durch Nutzung eines anderen Ports erfolgreich abgewehrt werden. Solche Angriffe gehen meist von Botnetzen oder bereits gekaperten Servern aus, die mit gro&#223;er Bandbreite tausende Logins gegen Port 22 feuern. Dabei werden  Standardbenutzernamen (admin, root, httpd, mail usw.) mit leerem Passwort oder Passw&#246;rter aus W&#246;rterb&#252;chern und Passwortlisten durchprobiert. Solche Angriffe k&#246;nnen zwar einen sicher konfigurierten Server nicht gef&#228;hrden, bl&#228;hen aber die Logdateien auf, f&#252;hren zu verminderten Reaktionszeiten und schlimmstenfalls k&#246;nnen sich legitimierte Benutzer ob der vielen Anfragen nicht &#252;ber SSH einloggen. Selbstverst&#228;ndlich bietet die Nutzung eines anderen Ports keinen Schutz gegen gezielte Brutforceangriffe, bei denen dem eigentlichen Angriff ein Portscan vorausgeht. Abhilfe k&#246;nnen hier zum Beispiel <a href="http://www.pettingers.org/code/sshblack.html">sshblack</a> schaffen oder eine Kombination von Snort, Netfilter und iptables. Da DoS-Attacken  kein SSH-spezifisches Problem sind, werde ich an dieser Stelle nicht weiter darauf eingehen.</p>
<p><code>Protocol 2</code></p>
<p>Die Version 1 des SSH-Protokoll enth&#228;lt Designschw&#228;chen, die einen unbefugten Login erm&#246;glichen, und sollte darum nicht benutzt werden.</p>
<p><code>PermitRootLogin no</code></p>
<p>Es ist eine gute Idee root den Zugang &#252;ber SSH zu verwehren. Denn wenn jemand gel&#228;nge sich &#252;ber SSH unbefugt Zugang zum Server zu verschaffen, k&#246;nnte er als unprivilegierter Nutzer nur begrenz Schaden anrichten. Da es ohnehin von Leichtsinn zeugt stets als root zu arbeiten, spricht auch wenig daf&#252;r den direkten Login als root zu erlauben. Wichtig ist auf einen frisch installierten System einen neuen Benutzer anzulegen, <strong>bevor</strong> wir &#252;ber <tt>PermitRootLogin no</tt> root vom SSH-Login ausschlie&#223;en.</p>
<p><code>AllowUsers tom thomasfalkner@thomas-falkner.de<br />
AllowGroups admin</code></p>
<p>Wenn nur bestimmte Nutzer sich via SSH auf dem Server einloggen d&#252;rfen, k&#246;nnen diese &#252;ber <tt>AllowUsers</tt> bestimmt werden. Wenn Benutzer nur von einem bestimmten Host aus Zugang zum Rechner erhalten sollen, kann dass &#252;ber <tt>user@host</tt> geregelt werden. Das kann sinnvoll sein, wenn ein Webdesigner sich nur aus dem Firmennetzwerk, nicht aber von zu Hause auf dem Server anmelden darf. Durch die Option <tt>AllowGroups</tt> kann der Login auf bestimmte Benutzergruppen beschr&#228;nkt werden.<br />
Sollen mehr Benutzer erlaubt als ausgeschlossen werden, ersparen die Gegenst&#252;cke zu <tt>AllowUsers</tt> und <tt>AllowGroups</tt>, <tt>DenyUsers</tt> und <tt>DenyGroups</tt>, eine Menge Tipparbeit.</p>
<p>Doch es ist nicht nur wichtig festzulegen, wer sich &#252;ber SSH anmelden darf, sondern auch welche Authentifizierungsverfahren dazu genutzt werden sollen. Hier greift die Regle: Alles deaktivieren, was nicht ben&#246;tigt wird.</p>
<p>Wer mit dem h&#246;chsten Sicherheitsstandard arbeiten m&#246;chten, sollte ausschlie&#223;lich die <tt>PubKeyAuthentication</tt> nutzen und alle anderen Authentifizierungsverfahren ausschalten.</p>
<p><code>RhostsRSAAuthentication no<br />
HostbasedAuthentication no<br />
KerberosAuthentication no<br />
GSSAPIAuthentication no<br />
RSAAuthentication no<br />
</code></p>
<p>Obwohl die meisten Optionen wie etwa <tt>RhostsRSAAuthentication</tt> per Default abgeschaltet sind, halte ich es f&#252;r sinnvoll sie explizit auf <em>no</em> zu setzen, um eine klare Konfiguration vor Augen zu haben. Ferner w&#228;re es t&#246;richt davon auszugehen, dass die Defaulteinstellungen sich bei neueren Versionen nicht &#228;ndern w&#252;rden. Updates sollten &#252;brigens ohnehin nie ungepr&#252;ft eingespielt werden.</p>
<p>Bevor wir die Passwort basierte Anmeldung mittels <tt>PasswordAuthentication no</tt> und <tt>UsePAM no</tt> vollst&#228;ndig deaktivieren, muss zuerst die Anmeldung &#252;ber <em>PubKey</em> konfiguriert und getestet werden &#8211; sonst laufen wir Gefahr uns selbst auszusperren.</p>
<p>Dazu erg&#228;nzen wir <tt>/etc/ssh/sshd_config</tt> wie folgt:</p>
<p><code>PubkeyAuthentication yes</code><br />
Damit wird die Authentifizierungs per RSA- oder DSA-Schl&#252;ssel aktiviert.</p>
<p><code>AuthorizedKeysFile %h/.ssh/authorized_keys</code></p>
<p>Gibt an, wo die &#246;ffentlichen Schl&#252;ssel auf dem Server gespeichert werden.<br />
Per Default im Homeverzeichnis des jeweiligen Benutzers unter <tt>.ssh/authorized_keys</tt>.</p>
<p>Nun sollte der der SSH-D&#228;mon neu gestartet werden: <tt>sudo /etc/init.d/sshd restart</tt></p>
<p>Damit ist der Server vorbereitet f&#252;r den passwortfreien Login &#252;ber Schl&#252;ssel.  Was fehlt ist der Schl&#252;ssel, oder genauer gesagt das Schl&#252;sselpaar. Da der private Teil des Schl&#252;ssels auf dem Client verbleibt und nur der &#246;ffentliche auf den Server kopiert wird, empfiehlt es sich das Schl&#252;sselpaar auf dem Client zu erzeugen.  Unter UNIX-Derivaten starten wir dazu unter dem Useraccount, der sich sp&#228;ter auf dem Server einloggen k&#246;nnen soll, <tt>ssh-keygen</tt>.</p>
<p><code>ssh-keygen -t dsa</code></p>
<p>Wenn die Voreinstellung best&#228;tigt wird, legt <tt>ssh-keygen</tt> den private Schl&#252;ssel id_dsa als auch den &#246;ffentlich id_dsa_pub unter <tt>~/.ssh</tt> ab. Die Frage nach der Passphrase kann mit 2x Return &#252;bergangen werden, wenn man den Schl&#252;ssel nicht mit einem Passwort sch&#252;tzen m&#246;chte. Eine generelle Empfehlung ob es sinnvoll ist den Schl&#252;ssel mit einem Passwort zu sch&#252;tzen oder nicht, ist schwer m&#246;glich. Wird kann Passwort vergeben, kann jeder sich auf dem Server anmelden, der in Besitz des Schl&#252;ssels ist. Soll hei&#223;en: Wird der Rechner, auf dem der private Schl&#252;ssel hinterlegt ist geknackt oder ger&#228;t in falsche H&#228;nde, steht dem Angreifer auch der Zugang zum Server offen.<br />
Sind die Schl&#252;ssel mit einem Passwort zus&#228;tzlich gesch&#252;tzt, m&#252;sste der Angreifer erst das Passwort per Bruteforce knacken &#8211; was bei ausreichend starken Passwort nicht in angemessener Zeit m&#246;glich ist.<br />
Das h&#246;here Ma&#223; an Sicherheit erkauft man sich jedoch mit der l&#228;stigen Eingabe des Passworts beim Login &#252;ber SSH.</p>
<p>Ist der Schl&#252;ssel je nach Gusto mit oder ohne Passpharse erzeugt, muss er auf den Server &#252;bertragen werden.</p>
<p>Zuerst pr&#252;fen wir, ob es in unserem Homeverzeichnis auf dem Server einen Order .ssh bereits gibt. Wenn nicht, legen wir ihn an. Dazu kann folgender Einzeiler vom Client aus abgesetzt werden:</p>
<p><code>ssh domain.tld -p2222 "test -d .ssh || mkdir .ssh &amp;&amp; chmod 700 .ssh"</code></p>
<p>Wie oben erw&#228;hnt, gehe ich davon aus, dass der User auf dem Client den gleichen Namen tr&#228;gt wie auf dem Server.<br />
Aus Sicherheitsgr&#252;nden ist es unerl&#228;sslich, dass die Zugriffsrechte des <tt>.ssh</tt>-Verzeichnisses auf 700 und die f&#252;r <tt>authorized_keys</tt> auf 600. Ferner m&#252;ssen sowohl Datei als auch Verzeichnis dem anzumeldenden User geh&#246;ren.<br />
Letztere Bedingung erf&#252;llen wir, indem wir Verzeichnis und Datei selbst anlegen, die Zugriffsrechte indes sollten wir explizit setzen.<br />
Auch das l&#228;sst sich zu einem Befehl zusammenfassen:<br />
<code>cat ~/.ssh/id_dsa_pub | ssh domain.tld -p2222 "cat &gt;&gt; .ssh/authorized_keys &amp;&amp; chmod  600 .ssh/authorized_keys"</code></p>
<p>Der passwortlose Login sollte damit funktionieren.</p>
<p>Zu den M&#246;glichkeiten von SSH l&#228;sst sich noch eine Menge schreiben. Zu gegebener Zeit an dieser Stelle mehr.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2007/09/25/ssh-absichern/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Mal wieder &#196;rger mit EVANZO</title>
		<link>http://blog.thomas-falkner.de/2007/06/30/mal-wieder-aerger-mit-evanzo/</link>
		<comments>http://blog.thomas-falkner.de/2007/06/30/mal-wieder-aerger-mit-evanzo/#comments</comments>
		<pubDate>Sat, 30 Jun 2007 10:51:25 +0000</pubDate>
		<dc:creator>Thomas Falkner</dc:creator>
				<category><![CDATA[Administration]]></category>
		<category><![CDATA[Alltag]]></category>
		<category><![CDATA[evanzo]]></category>

		<guid isPermaLink="false">http://blog.thomas-falkner.de/2007/06/30/mal-wieder-aerger-mit-evanzo/</guid>
		<description><![CDATA[Ich versuche f&#252;r einen Kunden seit nun mehr rund zwei Wochen erfolglos Domains per KK zu &#252;bernehmen. Doch EVANZO tut wirklich alles, um seiner schlechten Reputation zu entsprechen und blockiert. Allen Anschein nach hilft es tats&#228;chlich nur gegen EVANZO die juristische Keule auszupacken. Zwar finde ich es sehr unsch&#246;n sich positiv auf Anw&#228;lte und Justiz [...]]]></description>
			<content:encoded><![CDATA[<p>Ich versuche f&#252;r einen Kunden seit nun mehr rund zwei Wochen erfolglos Domains per KK zu &#252;bernehmen. Doch EVANZO tut wirklich alles, um seiner <a href="http://www.php-resource.de/webspace/show/3/">schlechten Reputation</a> zu entsprechen und blockiert. Allen Anschein nach hilft es tats&#228;chlich nur gegen EVANZO die juristische Keule auszupacken. Zwar finde ich es sehr unsch&#246;n sich positiv auf Anw&#228;lte und Justiz zu beziehen, allerdings scheint es mir in unserer derzeitigen Gesellschaftsform keinen anderen Ausweg zu geben, wenn ein Anbieter eine Domain nicht freigeben m&#246;chte. </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.thomas-falkner.de/2007/06/30/mal-wieder-aerger-mit-evanzo/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
	</channel>
</rss>

