<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2germanfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Bonsailinse</title>
	
	<link>http://bonsailinse.net</link>
	<description>Blog</description>
	<lastBuildDate>Fri, 18 May 2012 16:29:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/bonsailinse" /><feedburner:info uri="bonsailinse" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><geo:lat>48.048372</geo:lat><geo:long>8.208790</geo:long><creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license><feedburner:emailServiceId>bonsailinse</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/content?lg=de&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fbonsailinse" src="http://us.i1.yimg.com/us.yimg.com/i/de/my/addtomyyahoo4.gif">Subscribe with Mein Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbonsailinse" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/bonsailinse" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbonsailinse" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fbonsailinse" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbonsailinse" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fbonsailinse" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fbonsailinse" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fbonsailinse" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><item>
		<title>Elder Scrolls Online in 2013</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/u6jeZZX700M/</link>
		<comments>http://bonsailinse.net/elder-scrolls-online-in-2013/#comments</comments>
		<pubDate>Sun, 06 May 2012 14:06:30 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://bonsailinse.net/?p=878</guid>
		<description><![CDATA[Oh ja: The Elder Scrolls Online &#8211; Announcement Trailer]]></description>
			<content:encoded><![CDATA[<p>Oh ja:</p>
<p><iframe width="800" height="437" src="http://www.youtube.com/embed/I6m9-Dret0U?rel=0" frameborder="0" allowfullscreen></iframe></p>
<p><a href="http://www.youtube.com/watch?v=I6m9-Dret0U&#038;hd=1" class="liexternal">The Elder Scrolls Online &#8211; Announcement Trailer</a></p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/u6jeZZX700M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/elder-scrolls-online-in-2013/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/elder-scrolls-online-in-2013/</feedburner:origLink></item>
		<item>
		<title>Umbau</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/LNUyOfvTDt0/</link>
		<comments>http://bonsailinse.net/umbau/#comments</comments>
		<pubDate>Sat, 28 Apr 2012 20:39:27 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://bonsailinse.net/?p=877</guid>
		<description><![CDATA[Hallo ihrse. Wie euch vielleicht aufgefallen ist, ist hier in letzter Zeit nicht mehr so viel los. Liegt in erster Linie daran, dass ich versuche, mein Theme komplett umzubauen, zum anderen an so Kleinigkeiten wie einem kaputten Notebook ;___; Auf jeden Fall werde ich mich jetzt verstärkt daran setzen, Tempo zu machen. Neu aufgesetzt habe [...]]]></description>
			<content:encoded><![CDATA[<p>Hallo ihrse.</p>
<p>Wie euch vielleicht aufgefallen ist, ist hier in letzter Zeit nicht mehr so viel los.<br />
Liegt in erster Linie daran, dass ich versuche, mein Theme komplett umzubauen, zum anderen an so Kleinigkeiten wie einem kaputten Notebook ;___;</p>
<p>Auf jeden Fall werde ich mich jetzt verstärkt daran setzen, Tempo zu machen. Neu aufgesetzt habe ich dieses Blog auch mal fix, damit ich mit dem neuen Theme &#8220;sauber&#8221; starte.<br />
Bis dahin sieht das Blog hier noch hässlich aus, Bilder werde ich nach und nach einpflegen, damit alles funktioniert.</p>
<p><span id="more-877"></span></p>
<p>Blogkommentare konnte ich mit umziehen, das einzige was mir aufgefallen ist und nicht funktioniert sind die Kommentar-Abonnements. Die sind leider nicht ohne großen Aufwand zu retten, und da in den ganzen alten Beiträgen eh nichts mehr passiert spare ich mir den Stress.</p>
<p>Wünscht mir Glück, dass sonst alles reibungslos klappt und freut euch auf ein schickes Design *g*</p>
<p>In diesem Sinne noch ein schönes (und für die, die ihren Urlaub schlau geplant haben: langes) Wochenende.</p>
<p>Die Linse</p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/LNUyOfvTDt0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/umbau/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/umbau/</feedburner:origLink></item>
		<item>
		<title>N 51° 33.548, E 008° 19.645</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/92OXIUyN5N0/</link>
		<comments>http://bonsailinse.net/n-51-33-548-e-008-19-645/#comments</comments>
		<pubDate>Mon, 12 Mar 2012 18:11:27 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
		
		<guid isPermaLink="false">http://bonsailinse.net/?p=862</guid>
		<description><![CDATA[[image size="small" align="right" icon="zoom" lightbox="true" group="geocaching" quality="100"]http://mediathek.bonsailinse.net/2012/03/IMG_1205.png[/image]Heute haben meine Liebste und ich unseren ersten Cache gefunden! Wir haben schon seit Ewigkeiten vor, uns auf Schatzsuche zu begeben, aber durch gesundheitliche Einschränkungen haben wir das in den letzten zwei Jahren irgendwie nicht so richtig auf die Reihe bekommen. Dadurch, dass es jetzt bei uns etwas bergauf [...]]]></description>
			<content:encoded><![CDATA[<p>[image size="small" align="right" icon="zoom" lightbox="true" group="geocaching" quality="100"]http://mediathek.bonsailinse.net/2012/03/IMG_1205.png[/image]Heute haben meine <a href="http://pinkfluffy.de" target="_blank" class="liexternal">Liebste</a> und ich unseren <a href="http://de.wikipedia.org/wiki/Geocaching" target="_blank" rel="nofollow" class="liwikipedia">ersten Cache</a> gefunden!<br />
Wir haben schon seit Ewigkeiten vor, uns auf Schatzsuche zu begeben, aber durch gesundheitliche Einschränkungen haben wir das in den letzten zwei Jahren irgendwie nicht so richtig auf die Reihe bekommen.</p>
<p>Dadurch, dass es jetzt bei uns etwas bergauf geht, haben wir ein wenig bessere Chancen, uns den einen oder anderen Cache anzuschauen.</p>
<p>[image size="small" align="left" icon="zoom" lightbox="true" group="geocaching" quality="100"]http://mediathek.bonsailinse.net/2012/03/IMG_1202.png[/image]Heute haben wir, witzigerweise auf dem Weg zum Arzt, <a href="http://www.geocaching.com/seek/cache_details.aspx?guid=496767ed-034b-451b-8022-2d3efb15689b" target="_blank" class="liexternal">einen der wenigen Caches</a> hier im Dorf angesteuert. Eine kleine Filmdose versteckt in einem Baum beherbergte das Logbuch, in das wir uns nicht ohne Stolz eintrugen.</p>
<p>Auf jeden Fall hat uns das Fieber gepackt, die nächste Schatzsuche wird in meinem Elternhaus stattfinden, in dem irgendwo noch ein altes Garmin GPS-Gerät rumfliegt <img src='http://bonsailinse.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/92OXIUyN5N0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/n-51-33-548-e-008-19-645/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/n-51-33-548-e-008-19-645/</feedburner:origLink></item>
		<item>
		<title>Uargh, Abkürzungen</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/eF0144BraCU/</link>
		<comments>http://bonsailinse.net/uargh-abkuerzungen/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 11:00:00 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
		
		<guid isPermaLink="false">http://bonsailinse.net/uargh-abkurzungen/</guid>
		<description><![CDATA[Vom &#8216;Los Angeles Police Department&#8217;, dem LAPD, hat jeder schon in irgendeinem Fernsehfilm etwas gehört. Auch das Pendant aus New York, dem NYPD, ist sicher vielen bekannt. Warum aber gelten diese beiden als Vorzeige-Einrichtungen? Gibt es solche Institutionen nicht in jeder (größeren) Stadt? Haben diese dann auch so fancy Abkürzungen? Heißt es etwa &#8216;SFPD&#8216; in [...]]]></description>
			<content:encoded><![CDATA[<p>Vom &#8216;Los Angeles Police Department&#8217;, dem <strong>LAPD</strong>, hat jeder schon in irgendeinem Fernsehfilm etwas gehört. Auch das Pendant aus New York, dem <strong>NYPD</strong>, ist sicher vielen bekannt. </p>
<p>Warum aber gelten diese beiden als Vorzeige-Einrichtungen?<br />
Gibt es solche Institutionen nicht in jeder (größeren) Stadt?<br />
Haben diese dann auch so fancy Abkürzungen?<br />
Heißt es etwa &#8216;<em>SFPD</em>&#8216; in <strong>San Francisco</strong> oder &#8216;<em>LVPD</em>&#8216; in <strong>Las Vegas</strong>?<br />
Was machen die ganzen Städte, die sich nur einen Buchstaben als Abkürzung leisten können? &#8216;<em>DPD</em>&#8216; in <strong>Detroit</strong>? &#8216;<em>PPD</em>&#8216; in <strong>Phoenix</strong>?<br />
Und kriegen sich <strong>Seattle</strong>, <strong>Sacramento</strong> und <strong>Salem</strong> nicht in die Haare, wenn sie sich die selbe Abkürzung teilen müssen?<br />
Und kriegt <strong>Sigmar Gabriel</strong>, seines Zeichens Chef unserer <strong>Sozialdemokraten</strong>, Ärger wegen Amtsanmaßung, wenn er fähnchenwedelnd in eben diesen drei Städten zu Besuch ist?</p>
<p>Fragen über Fragen. Keine interessant genug um intensivere Recherchen zu bemühen, dennoch wüsste ich die Antworten schon ganz gerne.<br />
Vielleicht kann mich ja einer meiner Leser in den Kommentaren erleuchten.</p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/eF0144BraCU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/uargh-abkuerzungen/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/uargh-abkuerzungen/</feedburner:origLink></item>
		<item>
		<title>Bash: Eine schönere History</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/io6baM4-ym8/</link>
		<comments>http://bonsailinse.net/bash-eine-schoenere-history/#comments</comments>
		<pubDate>Sat, 14 Jan 2012 20:29:42 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
		
		<guid isPermaLink="false">http://bonsailinse.net/?p=830</guid>
		<description><![CDATA[Mir ist bei meinen Arbeiten zum Projekt: Neuer Server aufgefallen, dass die History in der Shell zwar hilfreich ist, aber durchaus noch etwas verfeinert werden kann. Nach kurzer Recherche konnte ich sie meinen Ansprüchen anpassen, in dem ich die Datei ~/.bashrc um folgende Zeilen erweiterte: [code] export HISTCONTROL=ignoreboth export HISTSIZE=500 export HISTIGNORE="&#038;:ls:history:exit" export HISTTIMEFORMAT="[%d.%m.%Y - [...]]]></description>
			<content:encoded><![CDATA[<p>Mir ist bei meinen Arbeiten zum <a href="http://bonsailinse.net/projekt-neuer-server/" title="Projekt: Neuer Server" class="liinternal">Projekt: Neuer Server</a> aufgefallen, dass die <strong>History</strong> in der Shell zwar hilfreich ist, aber durchaus noch etwas verfeinert werden kann.</p>
<p>Nach kurzer Recherche konnte ich sie meinen Ansprüchen anpassen, in dem ich die Datei <strong>~/.bashrc</strong> um folgende Zeilen erweiterte:</p>
<p>[code]<br />
export HISTCONTROL=ignoreboth<br />
export HISTSIZE=500<br />
export HISTIGNORE="&#038;:ls:history:exit"<br />
export HISTTIMEFORMAT="[%d.%m.%Y - %T] "<br />
[/code]</p>
<p>Der Parameter <strong>HISTCONTROL</strong> kann mit einen der folgenden Strangs gefüttert werden: &#8216;<em>ignorespace</em>&#8216;, &#8216;<em>ignoredups</em>&#8216; oder &#8216;<em>ignoreboth</em>&#8216;.</p>
<p>Durch <strong>ignorespace</strong> werden alle Zeilen, die mit einem Leerzeichen beginnen, nicht in die History aufgenommen.<br />
Mit <strong>ignoredups</strong> werden doppelte Einträge entfernt, so dass immer nur der jüngste vorhanden bleibt.<br />
Selbsterklärend ist nun <strong>ignoreboth</strong>: Dort werden einfach beide Funktionen übernommen.</p>
<p>Die eingetragene Zahl in <strong>HISTSIZE</strong> bestimmt, wieviele Einträge in der History gespeichert werden. Üblicherweise sollten die letzten 500 Zeilen nachvollziehbar sein.</p>
<p><strong>HISTIGNORE</strong> enthält die Befehle, die nicht mit in die History aufgenommen werden sollen. Dadurch halte ich persönlich meine History sauber, in dem ich unnötige Zeilen wie ls oder exit von ihr fern halte.</p>
<p>Mit <strong>HISTTIMERFORMAT</strong> lasse ich einen Zeitstempel in der History anzeigen. Sehr hilfreich, wenn man mit mehreren Leuten in der Bash rumhängt oder beim Suchen einer Befehlszeile nur noch die Uhrzeit im Kopf hat.</p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/io6baM4-ym8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/bash-eine-schoenere-history/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/bash-eine-schoenere-history/</feedburner:origLink></item>
		<item>
		<title>Projekt: Neuer Server – Postfix + Dovecot</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/ZVzCNXswf9U/</link>
		<comments>http://bonsailinse.net/projekt-neuer-server-postfix-dovecot/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 09:55:43 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
		
		<guid isPermaLink="false">http://bonsailinse.net/?p=774</guid>
		<description><![CDATA[[note title="Projekt: Neuer Server" align="right"] Teil 1: Einleitung Teil 2: Erste Schritte Teil 3: nginx + php-fpm Teil 4: MySQL + phpMyAdmin Teil 5: Postfix + Dovecot Teil 6: [in Planung] Teil 7: [in Planung] Teil 8: Der Abschluss [/note] Zuerst: Backup erneuern. Damit heißt meines nun 2012.01.10_02:26 und ist 512.76 MB groß. Inzwischen haben [...]]]></description>
			<content:encoded><![CDATA[<p>[note title="Projekt: Neuer Server" align="right"]<br />
<a href="http://bonsailinse.net/projekt-neuer-server/" class="liinternal">Teil 1: Einleitung</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-erste-schritte/" class="liinternal">Teil 2: Erste Schritte</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-nginx-php-fpm/" class="liinternal">Teil 3: nginx + php-fpm</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-mysql-phpmyadmin/" class="liinternal">Teil 4: MySQL + phpMyAdmin</a><br />
<strong>Teil 5: Postfix + Dovecot</strong><br />
Teil 6: [in Planung]<br />
Teil 7: [in Planung]<br />
Teil 8: Der Abschluss<br />
[/note]</p>
<p>Zuerst: Backup erneuern. Damit heißt meines nun <strong>2012.01.10_02:26</strong> und ist <strong>512.76 MB</strong> groß.</p>
<p>Inzwischen haben wir einen funktionierenden <strong>Webserver</strong>, der mit allen grundlegenden Dingen umgehen kann. <strong>PHP</strong> in Verbindung mit <strong>MySQL</strong> kann also nun ohne Probleme genutzt werden.<br />
Im Prinzip könnten wir jetzt unsere <strong>vHosts</strong> anlegen und beginnen, unsere Webprojekte hochzuladen, das werde ich jedoch noch nicht tun, da ich das Einpflegen von Daten (außer für Funktionalitätstests) erst ganz am Ende durchführe, um eine gewisse Routine zu entwickeln.<br />
Immerhin möchte ich nicht jetzt vHosts anlegen, dann erstmal wieder was installieren, dann für die entsprechenden vHosts die Mailadressen anlegen&#8230; alles in einem Rutsch gefällt mir da doch besser.<br />
Außerdem kann ich mir dann sogar vielleicht noch ein paar <strong>Skripte</strong> schreiben, um mir die Arbeit in Zukunft noch etwas zu vereinfachen.</p>
<p>Nun wollen wir unserem Server erstmal beibringen, mit <strong>eMails</strong> umzugehen. Der Plan sieht so aus:</p>
<p>[note align="center"]<br />
<strong>Postfix</strong> um Mails aus dem Internet zu ziehen und den ganzen Basiskram zu erledigen<br />
<strong>Dovecot</strong> um Mails auf dem Server zu speichern und sie dem User via Pop3 / IMAP zugänglich zu machen<br />
<strong>MySQL</strong> um Domains, Useraccounts und Forwarding-Regeln zu verwalten<br />
<strong>AMaViS</strong> zum Scannen eingehender Mails mit Hilfe von ClamAV und SpamAssassin<br />
<strong>Clam Antivirus</strong> für einen Virus-Check<br />
<strong>SpamAssassin</strong> für die Einordnung von Spam </p>
<p>evtl. <strong>Roundcube</strong> als Webmail-Lösung, falls es nötig werden sollte.<br />
[/note]</p>
<p><em>Los geht&#8217;s.</em><br />
<span id="more-774"></span><br />
Wir installieren alle erforderlichen Pakete:</p>
<p>[pre]<br />
# apt-get install postfix postfix-mysql<br />
[/pre]</p>
<p>Wählt im Assistenten zunächst &#8216;<strong>Internet-Site</strong>&#8216; aus, danach gebt den <strong>FQDN</strong> eures Servers an.</p>
<p>[info]<br />
<strong>Achtung:</strong> Hier wird ein <a href="http://de.wikipedia.org/wiki/Domain#Fully_Qualified_Domain_Name_.28FQDN.29" target="_blank" rel="nofollow" class="liwikipedia">FQDN</a> (Fully Qualified Domain Name) benötigt.<br />
Der Hostname eures Servers sollte hoffentlich aus so einem bestehen.<br />
Dies ist <strong>nicht</strong> einfach nur eure Domain, sondern, salopp gesagt, inklusive einer Subdomain. Typischerweise bietet sich <strong>server.bonsailinse.net</strong> oder ähnliches an. Überprüfen könnt ihr das übrigens mit &#8216;<strong>hostname -f</strong>&#8216;<br />
[/info]</p>
<p>Sollte euer Debian nicht ganz so minimal sein wie ihr dachtet, hat es vielleicht standardmäßig exim4 als Mailservice installiert. Ihr solltet zur Vorsicht einfach den Befehl hier durchlaufen lassen, um es zu deinstallieren, sollte es vorhanden sein:</p>
<p>[pre]<br />
# apt-get &#8211;purge remove &#8216;exim4*&#8217;<br />
[/pre]</p>
<p>Installieren von Dovecot und, testweise, Roundcube. Dann noch den Shell-IMAP-Client mutt, den wir später gut zum testen nutzen können.</p>
<p>[pre]<br />
# apt-get install dovecot-pop3d dovecot-imapd<br />
# apt-get install roundcube<br />
# apt-get install mutt<br />
[/pre]</p>
<p>Dann fangen wir mal an unsere Datenbank vorzubereiten. Wer will, kann dies in phpMyAdmin machen, muss dafür meine Konsolenbefehle entsprechen anpassen. Ich werde der Einfachheit halber sämtliche SQL-Queries in der Shell durchführen.<br />
Wir erstellen zu Anfang die Datenbank, die ich hier einfach mal &#8216;<strong>mailserver</strong>&#8216; nenne. Wir werden nach dem root-Kennwort gefragt, welches wir bei der Installation von MySQL angegeben haben:</p>
<p>[pre]<br />
# mysqladmin -p create mailserver<br />
[/pre]</p>
<p>Nun loggen wir uns in die Datenbank ein und erstellen einen neuen Benutzer. Postfix benötigt definitiv keinen root-Zugriff auf unsere Datenbanken <img src='http://bonsailinse.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Ich wähle als Benutzer hier &#8216;<strong>mailuser</strong>&#8216; und als Kennwort &#8216;<strong>mailpass</strong>&#8216;. Bitte wählt euer Kennwort sorgfältiger aus:</p>
<p>[pre]<br />
# mysql -p mailserver<br />
[/pre]</p>
<p>[info]<br />
<strong>Achtung:</strong> Ich verwende für die Anzeige von MySQL-Queries das Präfix &#8216;<strong>></strong>&#8216;, um zu verdeutlichen, dass wir uns in der Datenbank befinden (wie sonst die <strong>Raute</strong> &#8216;<strong>#</strong>&#8216; für die Eingabe in der Shell).<br />
Bitte kopiert das Zeichen nicht mit, es gehört <strong>nicht</strong> zu dem Query!<br />
[/info]</p>
<p>[pre]<br />
> GRANT SELECT ON mailserver.*<br />
TO &#8216;mailuser&#8217;@&#8217;127.0.0.1&#8242;<br />
IDENTIFIED BY &#8216;mailpass&#8217;;<br />
[/pre]</p>
<p>Nun haben wir einen User für Postfix, der ausschließlich Leserechte für unsere Mail-Datenbank besitzt.<br />
Möchten wir später Datensätze anlegen oder ändern, müssen wir uns einen weiteren User mit Schreibrechten anlegen oder den root-User nutzen.</p>
<p>Nun erstellen wir unsere Tabellen für virtuelle Domains, virtuelle User und virtuelle Aliases. Alles, was man eben so benötigt, um später vernünftig mit Mails umgehen zu können:</p>
<p>[pre]<br />
> CREATE TABLE `virtual_domains` (<br />
  `id` int(11) NOT NULL auto_increment,<br />
  `name` varchar(50) NOT NULL,<br />
  PRIMARY KEY (`id`)<br />
) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br />
[/pre]</p>
<p>[pre]<br />
> CREATE TABLE `virtual_users` (<br />
  `id` int(11) NOT NULL auto_increment,<br />
  `domain_id` int(11) NOT NULL,<br />
  `password` varchar(32) NOT NULL,<br />
  `email` varchar(100) NOT NULL,<br />
  PRIMARY KEY (`id`),<br />
  UNIQUE KEY `email` (`email`),<br />
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE<br />
) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br />
[/pre]</p>
<p>[pre]<br />
> CREATE TABLE `virtual_aliases` (<br />
  `id` int(11) NOT NULL auto_increment,<br />
  `domain_id` int(11) NOT NULL,<br />
  `source` varchar(100) NOT NULL,<br />
  `destination` varchar(100) NOT NULL,<br />
  PRIMARY KEY (`id`),<br />
  FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE<br />
) ENGINE=InnoDB DEFAULT CHARSET=utf8;<br />
[/pre]</p>
<p>Damit wir nicht ganz dumm sterben zeige ich euch mal anhand von ein paar Testdaten die Struktur unserer Tabellen:</p>
<p><strong>virtual_domains:</strong><br />
[styled_table]<br />
<table>
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">name</th>
<th scope="col"></th>
<th scope="col"></th>
</tr>
</thead>
<tr>
<td><span style="color: #00ff00;">1</span></td>
<td>example.com</td>
<td></td>
<td></td>
</tr>
<tr>
<td><span style="color: #0000ff;">2</span></td>
<td>example.net</td>
<td></td>
<td></td>
</tr>
</table>
<p> [/styled_table]</p>
<p><strong>virtual_users:</strong><br />
[styled_table]<br />
<table>
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">domain_id</th>
<th scope="col">email</th>
<th scope="col">password</th>
</tr>
</thead>
<tr>
<td>1</td>
<td><span style="color: #00ff00;">1</span></td>
<td>user1@example.com</td>
<td>hd7wo93n64</td>
</tr>
<tr>
<td>2</td>
<td><span style="color: #00ff00;">1</span></td>
<td>user2@example.com</td>
<td>j3bh1n0d74</td>
</tr>
<tr>
<td>3</td>
<td><span style="color: #0000ff;">2</span></td>
<td>user3@example.net</td>
<td>o30bq4lh5z</td>
</tr>
</table>
<p> [/styled_table]</p>
<p><strong>virtual_aliases:</strong><br />
[styled_table]<br />
<table>
<thead>
<tr>
<th scope="col">id</th>
<th scope="col">domain_id</th>
<th scope="col">source</th>
<th scope="col">destination</th>
</tr>
</thead>
<tr>
<td>1</td>
<td><span style="color: #00ff00;">1</span></td>
<td>user2@example.com</td>
<td>user2@web.de</td>
</tr>
<tr>
<td>2</td>
<td><span style="color: #0000ff;">2</span></td>
<td>user3@example.net</td>
<td>user3@gmx.net</td>
</tr>
<tr>
<td>3</td>
<td><span style="color: #0000ff;">2</span></td>
<td>user3@example.net</td>
<td>user3@gmail.com</td>
</tr>
</table>
<p> [/styled_table]</p>
<p>Durch die <strong>virtual_aliases</strong> Werden nun alle Mails an <strong>user2@example.com</strong> an <strong>user2@web.de</strong> weitergeleitet.<br />
Analog jede Mail, die an <strong>user3@example.net</strong> geht an <strong>user3@gmx.net</strong> sowie <strong>user3@gmail.com</strong>.<br />
Hierfür werden zwei Einträge in die Datenbanktabelle eingetragen.</p>
<p>Nun füttern wir unsere Datenbank mit den ersten Einträgen, damit wir später testen können, ob unsere Konfigurationen auch funktionieren.<br />
In meinem Beispiel füge ich die Domain &#8216;<strong>bonsailinse.net</strong>&#8216; ein, einen User &#8216;<strong>mail@bonsailinse.net</strong>&#8216; mit Kennwort &#8216;<strong>vollgeheim</strong>&#8216; und zusätzlich noch eine Weiterleitung aller Mails an &#8216;<strong>admin@bonsailinse.net</strong>&#8216; nach &#8216;<strong>mail@bonsailinse.net</strong>&#8216;:</p>
<p>[pre]<br />
> INSERT INTO `mailserver`.`virtual_domains` (<br />
  `id` ,<br />
  `name`<br />
)<br />
VALUES (<br />
  &#8217;1&#8242;, &#8216;bonsailinse.net&#8217;<br />
);<br />
[/pre]</p>
<p>[pre]<br />
> INSERT INTO `mailserver`.`virtual_users` (<br />
  `id` ,<br />
  `domain_id` ,<br />
  `password` ,<br />
  `email`<br />
)<br />
VALUES (<br />
  &#8217;1&#8242;, &#8217;1&#8242;, MD5( &#8216;vollgeheim&#8217; ) , &#8216;mail@bonsailinse.net&#8217;<br />
);<br />
[/pre]</p>
<p>[pre]<br />
> INSERT INTO `mailserver`.`virtual_aliases` (<br />
  `id`,<br />
  `domain_id`,<br />
  `source`,<br />
  `destination`<br />
)<br />
VALUES (<br />
  &#8217;1&#8242;, &#8217;1&#8242;, &#8216;admin@bonsailinse.net&#8217;, &#8216;mail@bonsailinse.net&#8217;<br />
);<br />
[/pre]</p>
<p>Nun beenden wir MySQL und dann bringen wir Postfix bei, wo in unseren Datenbanken es unsere virtuellen Domains, User und Aliase finden kann:</p>
<p>[pre]<br />
> exit<br />
# nano /etc/postfix/mysql-virtual-mailbox-domains.cf<br />
[/pre]</p>
<p>[code]<br />
user = mailuser<br />
password = mailpass<br />
hosts = 127.0.0.1<br />
dbname = mailserver<br />
query = SELECT 1 FROM virtual_domains WHERE name='%s'<br />
[/code]</p>
<p>Damit Postfix Bescheid weiß, kriegt er die Config eingelesen:</p>
<p>[pre]<br />
# postconf -e virtual_mailbox_domains=mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf<br />
[/pre]</p>
<p>Das Ganze wird dann fix getestet, bei einem geglückten Mapping sollte eine &#8216;<strong>1</strong>&#8216; als Rückmeldung kommen:</p>
<p>[pre]<br />
# postmap -q bonsailinse.net mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf<br />
[/pre]</p>
<p>Das selbe Spiel nochmal für das Mapping der Mailboxen und der Aliase:</p>
<p>[pre]<br />
# nano /etc/postfix/mysql-virtual-mailbox-maps.cf<br />
[/pre]</p>
<p>[code]<br />
user = mailuser<br />
password = mailpass<br />
hosts = 127.0.0.1<br />
dbname = mailserver<br />
query = SELECT 1 FROM virtual_users WHERE email='%s'<br />
[/code]</p>
<p>[pre]<br />
# postconf -e virtual_mailbox_maps=mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf<br />
[/pre]</p>
<p>Testen: </p>
<p>[pre]<br />
# postmap -q mail@bonsailinse.net mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf<br />
[/pre]</p>
<p>[pre]<br />
# nano /etc/postfix/mysql-virtual-alias-maps.cf<br />
[/pre]</p>
<p>[code]<br />
user = mailuser<br />
password = mailpass<br />
hosts = 127.0.0.1<br />
dbname = mailserver<br />
query = SELECT destination FROM virtual_aliases WHERE source='%s'<br />
[/code]</p>
<p>[pre]<br />
# postconf -e virtual_alias_maps=mysql:/etc/postfix/mysql-virtual-alias-maps.cf<br />
[/pre]</p>
<p>Testen, diesmal müsste &#8216;<strong>mail@bonsailinse.net</strong>&#8216; als Zieladresse ausgegeben werden:</p>
<p>[pre]<br />
# postmap -q admin@bonsailinse.net mysql:/etc/postfix/mysql-virtual-alias-maps.cf<br />
[/pre]</p>
<p><em>Phew. Kurze Verschnaufpause.</em></p>
<p>Jetzt sehen wir zu, dass nur die User &#8216;root&#8217; und &#8216;postfix&#8217; auf unsere Konfigurationfiles zugreifen können:</p>
<p>[pre]<br />
# chgrp postfix /etc/postfix/mysql-*.cf<br />
# chmod u=rw,g=r,o= /etc/postfix/mysql-*.cf<br />
[/pre]</p>
<p>Für die Konfiguration von <strong>Dovecot</strong> erstellen wir zunächst einen neuen <strong>Systemuser</strong>, der in Zukunft für den ganzen Mailkram zuständig sein wird. Ich wähle hier den User &#8216;<strong>vmail</strong>&#8216; mit der User-ID <strong>5000</strong> und die Gruppe &#8216;<strong>vmail</strong>&#8216; mit der Gruppen-ID <strong>5000</strong>. Achtet darauf, dass die IDs noch nicht anderweitig belegt sind. Ihr könnt jede ID zwischen 1000 und 65000 nutzen, solange sie noch nicht verwendet wird (siehe &#8216;<strong>cat /etc/passwd</strong>&#8216;).<br />
Dann noch die Rechte für unser zukünftiges Mail-Verzeichnis setzen:</p>
<p>[pre]<br />
# groupadd -g 5000 vmail<br />
# useradd -g vmail -u 5000 vmail -d /var/vmail -m</p>
<p># chown -R vmail:vmail /var/vmail<br />
# chmod u+w /var/vmail<br />
[/pre]</p>
<p>Dann fangen wir mal an Dovecot zu konfigurieren:</p>
<p>[pre]<br />
# nano /etc/dovecot/dovecot.conf<br />
[/pre]</p>
<p>Die erste Zeile definiert die Protokolle, die gestartet werden sollen. Hier könnt ihr bei Bedarf bspw. die unsicheren Varianten ohne &#8216;<strong>s</strong>&#8216; rauslöschen oder ausschließlich IMAP aktivieren.</p>
<p>Die zweite Zeile steht standardmäßig auf &#8216;<strong>yes</strong>&#8216;, was sicherheitstechnisch auch super ist, allerdings kann es passieren, dass ihr unter der Verwendung <em>diverser Mailprogramme</em> diese Einstellung auf &#8216;<strong>no</strong>&#8216; setzen müsst:</p>
<p>[code]<br />
protocols = imap imaps pop3 pop3s<br />
disable_plaintext_auth = no<br />
[/code]</p>
<p>Mit folgender Zeile teilen wir Dovecot mit, wo die <strong>Mailboxen</strong> unserer User liegen.<br />
Mit der folgenden Konfiguration befinden sie sich stets unter <strong>/var/vmail/<em>DOMAIN</em>/<em>USER</em>/Maildir</strong> und liegen im <em>maildir</em> Format vor:</p>
<p>[code]<br />
mail_location = maildir:/var/vmail/%d/%n/Maildir<br />
[/code]</p>
<p>In der Sektion &#8216;<strong>auth default</strong>&#8216; sollten wir dem Part &#8216;<strong>mechanisms</strong>&#8216; die Methode &#8216;<strong>login</strong>&#8216; hinzufügen:</p>
<p>[code]<br />
mechanisms = plain login<br />
[/code]</p>
<p>Damit Dovecot weiß, wo sich die Zugangsdaten der User befinden, suchen wir die Sektionen &#8216;<strong>passdb sql</strong>&#8216; und &#8216;<strong>userdb static</strong>&#8216; und sehen zu, dass sie folgendermaßen ausschauen:</p>
<p>[code]<br />
passdb sql {<br />
    args = /etc/dovecot/dovecot-sql.conf<br />
}</p>
<p>userdb static {<br />
    args = uid=5000 gid=5000 home=/var/vmail/%d/%n/Maildir allow_all_users=yes<br />
}<br />
[/code]</p>
<p>Achja, wir sollten vielleicht noch die Sektion &#8216;<strong>passdb pam</strong>&#8216; auskommentieren (achtet auf die abschließende, geschwungene Klammer!), da Dovecot sonst auch nach lokalen Usern Ausschau hält, was uns nur unsere Logfiles mit Fehlern zumüllt.</p>
<p>Wir suchen die Sektion &#8216;<strong>socket listen</strong>&#8216; und bearbeiten sie wie folgt:</p>
<p>[code]<br />
socket listen {<br />
    master {<br />
        path = /var/run/dovecot/auth-master<br />
        mode = 0600<br />
        user = vmail<br />
    }</p>
<p>    client {<br />
        path = /var/spool/postfix/private/auth<br />
        mode = 0660<br />
        user = postfix<br />
        group = postfix<br />
    }<br />
}<br />
[/code]</p>
<p>Ähnliches Spiel mit der Sektion &#8216;<strong>protocol lda</strong>&#8216;, wobei ihr hier eine Mail-Adresse eintragen solltet, unter der ihr als Admin des Servers erreichbar seid:</p>
<p>[code]<br />
protocol lda {<br />
    auth_socket_path = /var/run/dovecot/auth-master<br />
    postmaster_address = admin@bonsailinse.net<br />
    mail_plugins = sieve<br />
    log_path =<br />
}<br />
[/code]</p>
<p>Wenn ihr den log_path leer lasst, landen eure Logs zusammen mit anderen eMail-relevanten Logs in <strong>/var/log/mail.log</strong>. Definiert ihr hier einen anderen Pfad könnt ihr eventuell falsch konfigurierten Filtern oder ähnlichem auf die Schliche kommen.</p>
<p>Wir schließen die Datei und kümmern uns um die nächste Config:</p>
<p>[pre]<br />
# nano /etc/dovecot/dovecot-sql.conf<br />
[/pre]</p>
<p>[code]<br />
driver = mysql<br />
connect = host=127.0.0.1 dbname=mailserver user=mailuser password=mailpass<br />
default_pass_scheme = PLAIN-MD5<br />
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';<br />
[/code]</p>
<p>Dovecot neustarten und noch schnell die Rechte vernünftig setzen:</p>
<p>[pre]<br />
# /etc/init.d/dovecot restart<br />
chgrp vmail /etc/dovecot/dovecot.conf<br />
chmod g+r /etc/dovecot/dovecot.conf<br />
chown root:root /etc/dovecot/dovecot-sql.conf<br />
chmod go= /etc/dovecot/dovecot-sql.conf<br />
[/pre]</p>
<p>Wir müssen Postfix dazu bringen mit Dovecot zu sprechen und fügen folgende Zeilen der Konfiguration von Postfix hinzu: </p>
<p>[pre]<br />
# nano /etc/postfix/master.cf<br />
[/pre]</p>
<p>[error]<br />
<strong>Vorsicht!</strong> Achtet darauf, dass die zweite Zeile <strong>eingerückt</strong> sein muss! Außerdem gehört das nach dem <strong>$</strong> noch ein die zweite Zeile, die Zeile ist einfach nur zu lang für mein Blog.<br />
[/error]</p>
<p>[code]<br />
dovecot unix - n n - - pipe<br />
  flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}<br />
[/code]</p>
<p>Dann Postfix neustarten und die Konfiguration einlesen lassen:</p>
<p>[pre]<br />
# postfix reload<br />
# postconf -e virtual_transport=dovecot<br />
# postconf -e dovecot_destination_recipient_limit=1<br />
[/pre]</p>
<p>[info]An dieser Stelle habe ich persönlich meinen Server neugestartet.<br />
Nach so vielen neu installierten Programmen und geänderten Konfigurationen ist das gar keine so schlechte Idee, um sicherzustellen, dass alles von jedem angenommen wurde. Außerdem sieht man in den Logfiles des Servers, ob alles einwandfrei gestartet werden konnte.<br />
[/info]</p>
<p>Dann testen wir mal, ob Mails auf dem Server ankommen.<br />
Folgende Zeilen geben uns zuerst einen Überblick, ob der Speicherort der zukünftigen Mails erreichbar ist (das Verzeichnis sollte zunächst nahezu leer sein), dann senden wir eine Testmail und überprüfen im Anschluss, ob sich eine Verzeichnisstruktur aufgebaut hat:</p>
<p>[pre]<br />
# find /var/vmail<br />
# echo test | mail mail@bonsailinse.net<br />
# find /var/vmail<br />
[/pre]</p>
<p>Sollte etwas schiefgegangen sein lohnt sich ein Blick in &#8216;<strong>/var/log/mail.log</strong>&#8216;.<br />
Ein weiterer Test stellt fest, ob bspw. IMAP funktioniert. Evtl. werdet ihr aufgefordert, einer Erstellung des Verzeichnisses <strong>/root/Mail</strong> zuzustimmen und etwaige SSL-Zertifikate zu akzeptieren. Einfach zustimmen. Wenn ihr eure Testmail einsehen könnt ist das schonmal ein sehr gutes Zeichen. Mit &#8216;<strong>q</strong>&#8216; beendet ihr Mutt:</p>
<p>[pre]<br />
# mutt -f imap://mail@bonsailinse.net@localhost<br />
[/pre]</p>
<p>Dann stellen wir mal fix unseren SMTP so ein, dass er nur eMails von authentifizierten Usern annimmt. Dies ist schön einfach, da Postfix die Logindaten von den in Dovecot hinterlegten Usern mit nutzen kann:</p>
<p>[pre]<br />
# postconf -e smtpd_sasl_type=dovecot<br />
# postconf -e smtpd_sasl_path=private/auth<br />
# postconf -e smtpd_sasl_auth_enable=yes<br />
# postconf -e smtpd_recipient_restrictions=&#8221;permit_mynetworks permit_sasl_authenticated reject_unauth_destination&#8221;<br />
[/pre]</p>
<p>An dieser Stelle erstelle ich mir <strong>SSL-Zertifikate</strong>, die natürlich nicht als &#8220;<em>vertrauenswürdig</em>&#8221; eingestuft werden. Wenn ihr Zertifikate zum Beispiel bei <a href="https://www.startssl.com" title="StartSSL" target="_blank" class="liexternal">StartSSL</a> erstellt habt oder gar eines gekauft habt, wisst ihr sicherlich auch, wie ihr sie einfügt.<br />
Ansonsten hier die Vorgehensweise für selbst signierte Zertifikate.<br />
Wichtig ist, dass ihr bei der Erstellung bei &#8216;<strong>common name</strong>&#8216; exakt die Domain eingebt, mit der sich die User einloggen sollen. Soll dies also &#8216;<strong>mail.example.com</strong>&#8216; sein, gehört genau dies dort rein.</p>
<p>[pre]<br />
# openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/dovecot.pem -keyout /etc/ssl/private/dovecot.pem<br />
# chmod o= /etc/ssl/private/dovecot.pem<br />
# /etc/init.d/dovecot restart</p>
<p># openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem -keyout /etc/ssl/private/postfix.pem<br />
# chmod o= /etc/ssl/private/postfix.pem<br />
# postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem<br />
# postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem<br />
[/pre]</p>
<p>[info]Ich persönlich nutze für die eMail-Adresse des Serveradmins IMAPs, SMTP läuft bei mir weiterhin unverschlüsselt, da ich dort immer wieder auf Probleme mit diversen Mailprogrammen stoße.<br />
Solltet ihr dort also Probleme bekommen, kann ich euch leider nicht helfen.<br />
IMAPs und POP3s sollten aber einwandfrei funktionieren.[/info]</p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/ZVzCNXswf9U" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/projekt-neuer-server-postfix-dovecot/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/projekt-neuer-server-postfix-dovecot/</feedburner:origLink></item>
		<item>
		<title>Projekt: Neuer Server – MySQL + phpMyAdmin</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/0bHSNT2psKE/</link>
		<comments>http://bonsailinse.net/projekt-neuer-server-mysql-phpmyadmin/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 23:42:01 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
		
		<guid isPermaLink="false">http://bonsailinse.net/?p=751</guid>
		<description><![CDATA[[note title="Projekt: Neuer Server" align="right"] Teil 1: Einleitung Teil 2: Erste Schritte Teil 3: nginx + php-fpm Teil 4: MySQL + phpMyAdmin Teil 5: Postfix + Dovecot Teil 6: [in Planung] Teil 7: [in Planung] Teil 8: Der Abschluss [/note] Unser Webserver läuft schonmal, bevor wir uns um das Anlegen weiterer vHosts kümmern wollen wir [...]]]></description>
			<content:encoded><![CDATA[<p>[note title="Projekt: Neuer Server" align="right"]<br />
<a href="http://bonsailinse.net/projekt-neuer-server/" class="liinternal">Teil 1: Einleitung</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-erste-schritte/" class="liinternal">Teil 2: Erste Schritte</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-nginx-php-fpm/" class="liinternal">Teil 3: nginx + php-fpm</a><br />
<strong>Teil 4: MySQL + phpMyAdmin</strong><br />
<a href="http://bonsailinse.net/projekt-neuer-server-postfix-dovecot/" class="liinternal">Teil 5: Postfix + Dovecot</a><br />
Teil 6: [in Planung]<br />
Teil 7: [in Planung]<br />
Teil 8: Der Abschluss<br />
[/note]</p>
<p>Unser Webserver läuft schonmal, bevor wir uns um das Anlegen weiterer vHosts kümmern wollen wir erstmal noch die restlichen Dinge installieren, die wir so benötigen. <strong>MySQL</strong> und so ein Kram eben.</p>
<p>Zuerst kümmern wir uns aber um unser <strong>Backup</strong>. Ich erwähnte ja schon, dass ich zwischendurch gerne mal was kaputtkonfiguriere und so <img src='http://bonsailinse.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Und damit ich den Namen des Backups leichter dem Stand meines Servers zuordnen kann, tippsel ich ihn wieder einfach hier rein:</p>
<p>Aktuell heißt mein Backup <strong>2012.01.06_05:04</strong> und ist <strong>344.40 MB</strong> groß.</p>
<p>Nun können wir anfangen, <del datetime="2012-01-06T20:26:37+00:00">unseren Server mit MySQL zu infizieren</del><ins datetime="2012-01-06T20:26:37+00:00">MySQL zu installieren</ins>:</p>
<p>[pre]<br />
# apt-get install mysql-server mysql-client<br />
[/pre]</p>
<p>Der Installer fragt uns nach einem Admin-Kennwort, welches wir definitiv anlegen sollten. Nehmt bitte nicht das selbe wie für den root-Benutzer des Servers, ja?<br />
<span id="more-751"></span><br />
Eine gute Konfiguration für den Anfang ist folgende (natürlich gehe ich hier von meinem Server aus, 1 bis 2 GB RAM sollten da schon eingebaut sein. Sonst sucht euch passende Werte im Internet oder belasst es bei den Standard-Einträgen):</p>
<p>[pre]<br />
# nano /etc/mysql/my.cnf<br />
[/pre]</p>
<p>[code]<br />
key_buffer			= 512M<br />
max_heap_table_size		= 128M<br />
max_allowed_packet		= 16M<br />
thread_stack			= 128K<br />
thread_cache_size		= 8<br />
max_connections			= 250<br />
table_cache			= 512<br />
query_cache_limit		= 16M<br />
query_cache_size		= 128M</p>
<p>log_slow_queries		= /var/log/mysql/mysql-slow.log<br />
long_query_time			= 2<br />
log-queries-not-using-indexes<br />
[/code]</p>
<p>Ein Restart damit die Konfiguration angenommen wird:</p>
<p>[pre]<br />
# /etc/init.d/mysql restart<br />
[/pre]</p>
<p>Eine optionale, aber empfehlenswerte Vorgehensweise an dieser Stelle ist das Ausführen der <a href="http://dev.mysql.com/doc/refman/5.1/en/mysql-secure-installation.html" target="_blank" class="liexternal">mysql_secure_installation</a>, mit der wir ein paar Sicherheitsrisiken eliminieren:</p>
<p>[pre]<br />
# mysql_secure_installation<br />
[/pre]</p>
<p>Die Fragen sind selbsterklärend, bis auf ein neues root-Kennwort (ihr habt ja hoffentlich bereits bei der Installation eines eingegeben) können sämtliche Fragen mit der Standard-Auswahl beantwortet werden. Lest es euch trotzdem durch, falls ihr bspw. <strong>Remote-Zugriff</strong> auf euren MySQL-Server benötigt solltet ihr diesen Punkt überspringen.</p>
<p>Bei der Installation von phpMyAdmin wird nach dem verwendeten Webserver gefragt, leider sind hier nur Apache und LIGHTTPD auswählbar. Also wählen wir keinen aus und beantworten auch die zweite Frage nach der Konfiguration der Datenbank mit dbconfig-common mit &#8216;<strong>Nein</strong>&#8216;.</p>
<p>Dann passen wir unseren vHost an, damit nginx die phpMyAdmin-Installation auch findet.<br />
Dazu erstellen wir eine neue Include-Datei, die dann in jedem vHost eingebunden wird, der phpMyAdmin erreichen können soll:</p>
<p>[pre]<br />
# apt-get install phpmyadmin<br />
# nano /etc/nginx/phpmyadmin.inc<br />
[/pre]</p>
<p>[code]<br />
location /phpmyadmin {<br />
  root /usr/share/;<br />
  index index.php index.html index.htm;<br />
  location ~ ^/phpmyadmin/(.+\.php)$ {<br />
    try_files $uri =404;<br />
    root /usr/share/;<br />
    fastcgi_pass 127.0.0.1:9000;<br />
    fastcgi_index index.php;<br />
    fastcgi_param SCRIPT_FILENAME $request_filename;<br />
    include /etc/nginx/fastcgi_params;<br />
    }<br />
  location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {<br />
    root /usr/share/;<br />
  }<br />
}</p>
<p>location /phpMyAdmin {<br />
  rewrite ^/* /phpmyadmin last;<br />
}<br />
[/code]</p>
<p>[pre]<br />
# nano /etc/nginx/sites-available/bonsailinse.net<br />
[/pre]</p>
<p>[code]<br />
server {<br />
  server_name bonsailinse.net www.bonsailinse.net;</p>
<p>  root /var/www/bonsailinse.net/www;</p>
<p>  include defaults.inc;<br />
  include phpmyadmin.inc;<br />
}<br />
[/code]</p>
<p>nginx neustarten:</p>
<p>[pre]<br />
# /etc/init.d/nginx restart<br />
[/pre]</p>
<p>[info]<br />
<strong>Übrigens:</strong> An dieser Stelle würde es auch reichen, die nginx-Konfiguration mit &#8216;<strong>/etc/init.d/nginx reload</strong>&#8216; neu laden zu lassen, jedoch starte ich nginx immer komplett neu, zum einen dauert das nicht wesentlich länger und zum anderen bekomme ich so schneller mit, wenn er aus irgendwelchen Gründen (meist eine falsche Konfiguration) nicht mehr starten will.<br />
[/info]</p>
<p>Unter <strong>http://bonsailinse.net/phpmyadmin</strong> sowie <strong>http://bonsailinse.net/phpMyAdmin</strong> können wir nun den Login für unser MySQL-Verwaltungstool erreichen.</p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/0bHSNT2psKE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/projekt-neuer-server-mysql-phpmyadmin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/projekt-neuer-server-mysql-phpmyadmin/</feedburner:origLink></item>
		<item>
		<title>Projekt: Neuer Server – nginx + php-fpm</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/_1JRs6HAe6A/</link>
		<comments>http://bonsailinse.net/projekt-neuer-server-nginx-php-fpm/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 03:05:03 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
		
		<guid isPermaLink="false">http://bonsailinse.net/?p=713</guid>
		<description><![CDATA[[note title="Projekt: Neuer Server" align="right"] Teil 1: Einleitung Teil 2: Erste Schritte Teil 3: nginx + php-fpm Teil 4: MySQL + phpMyAdmin Teil 5: Postfix + Dovecot Teil 6: [in Planung] Teil 7: [in Planung] Teil 8: Der Abschluss [/note] So, bevor ich jetzt irgendwas an meinem Server kaputt mache (ich hab da definitiv nen [...]]]></description>
			<content:encoded><![CDATA[<p>[note title="Projekt: Neuer Server" align="right"]<br />
<a href="http://bonsailinse.net/projekt-neuer-server/" class="liinternal">Teil 1: Einleitung</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-erste-schritte/" class="liinternal">Teil 2: Erste Schritte</a><br />
<strong>Teil 3: nginx + php-fpm</strong><br />
<a href="http://bonsailinse.net/projekt-neuer-server-mysql-phpmyadmin/" class="liinternal">Teil 4: MySQL + phpMyAdmin</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-postfix-dovecot/" class="liinternal">Teil 5: Postfix + Dovecot</a><br />
Teil 6: [in Planung]<br />
Teil 7: [in Planung]<br />
Teil 8: Der Abschluss<br />
[/note]</p>
<p>So, bevor ich jetzt irgendwas an meinem Server kaputt mache (ich hab da definitiv nen Hang zu. Benötige einen Undo-Knopf für sowas) erstelle ich an dieser Stelle ein komplettes <strong>Backup</strong>.</p>
<p>Bei <a href="http://www.netcup.de" target="_blank" class="liexternal">netcup</a> ist das glücklicherweise ziemlich einfach, ich erstelle das Backup im Verwaltungsbereich für die Server, da brauch ich kein Backuptool oder sonstiges bemühen.<br />
In meinem Tarif habe ich zwei Backups frei, das heißt, ich kann hier und da ein wenig rumspielen und verschiedene Snapshots zurückspielen, falls ich mir bei irgendwelchen Installationen mal nicht ganz so sicher bin *g*.</p>
<p>Das Einzige, was ich nicht kann, ist dem Backup einen Namen oder eine Beschreibung zu geben, was es etwas einfacher machen würde, es dem jeweiligen Stand des Servers zuzuordnen. So muss ich mit einer Uhrzeit leben. Aber wofür habe ich denn ein Blog?! Ich schreib den Namen einfach hier rein, dann weiß ich immer, wo ich ihn finde <img src='http://bonsailinse.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p>Das Backup zum aktuellen Stand hat also nun den Namen <strong>2012.01.05_00:51</strong> und ist <strong>287.03 MB</strong> groß.<br />
<span id="more-713"></span><br />
Wie bereits erwähnt möchte ich nicht mehr wie bisher <strong>Apache</strong> verwenden sondern gerne umsteigen. Ich habe mich nach kurzer Lektüre für den schlanken Webserver <strong>nginx</strong> (Gesprochen: En-gin-iX) entschieden. Das hat mehrere Gründe. Dazu hier ein kurzer Vergleich des Indianers, LIGHTTPD und nginx:</p>
<p>[one_third]<br />
<strong>Apache</strong></p>
<p><span style="color: #00ff00;">+</span> Open Source<br />
<span style="color: #00ff00;">+</span> unendlich viele Module<br />
<span style="color: #00ff00;">+</span> große Community<br />
<span style="color: #00ff00;">+</span> viele Tutorials<br />
<span style="color: #ff0000;">-</span> schlechte Performance<br />
<span style="color: #ff0000;">-</span> <abbr title="vergleichbar">vglb.</abbr> geringe Stabilität<br />
<span style="color: #ff0000;">-</span> Langsame Entwicklung<br />
<span style="color: #ff0000;">-</span> Veraltet und überfüllt<br />
<span style="color: #ff0000;">-</span> Keine zufriedenstellende Standard-Konfiguration<br />
[/one_third]</p>
<p>[one_third]<br />
<strong>LIGHTTPD</strong></p>
<p><span style="color: #00ff00;">+</span> Open Source<br />
<span style="color: #00ff00;">+</span> unendlich viele Module<br />
<span style="color: #00ff00;">+</span> gute Community<br />
<span style="color: #00ff00;">+</span> unglaublich ressourcenschonend<br />
<span style="color: #00ff00;">+</span> gute Geschwindigkeit<br />
<span style="color: #ff0000;">-</span> <abbr title="vergleichbar">vglb.</abbr> geringe Stabilität<br />
<span style="color: #ff0000;">-</span> miese Rewrite-Engine<br />
<span style="color: #ff0000;">-</span> nicht so schnelle Entwicklung<br />
<span style="color: #ff0000;">-</span> ungefixte Memory-Leaks<br />
[/one_third]</p>
<p>[one_third_last]<br />
<strong>nginx</strong></p>
<p><span style="color: #00ff00;">+</span> Open Source<br />
<span style="color: #00ff00;">+</span> genügend Module<br />
<span style="color: #00ff00;">+</span> ziemlich ressourcenschonend<br />
<span style="color: #00ff00;">+</span> geniale Geschwindigkeit<br />
<span style="color: #00ff00;">+</span> stabil und ohne bekannte Leaks<br />
<span style="color: #00ff00;">+</span> vernünftige Rewrite-Engine<br />
<span style="color: #00ff00;">+</span> rasante Weiterentwicklung<br />
<span style="color: #00ff00;">+</span> schöne &#038; übersichtliche Konfiguration<br />
<span style="color: #ff0000;">-</span> kleine Community<br />
<span style="color: #ff0000;">-</span> kein FastCGI, externer fcgi-Spawner erforderlich<br />
[/one_third_last]</p>
<p>Meine Entscheidung fiel hiermit auf <strong>nginx</strong>, da ich mir viel von der Performance verspreche und keine Lust auf die hässliche Rewrite-Engine vom lighty habe, wenn es darum geht, die Permalinks von WordPress anzupassen.</p>
<p>Für FastCGI-Prozesse werde ich <strong>php-fpm</strong> nutzen, was gar nicht so kompliziert sein soll. Mal abwarten =/</p>
<p><em>Also, los gehts!</em></p>
<p>Wie bereits im ersten Teil angedeutet, holen wir uns die aktuelle Version von nginx aus dem Repository von <a href="http://www.dotdeb.org/" target="_blank" class="liexternal">Dotdeb</a>, da wir hier alles so aktuell bekommen wie wir es benötigen und auf eine aufbereitete, etwas hübschere Standard-Konfiguration von nginx stoßen werden.</p>
<p>Wir installieren uns <strong>nginx</strong>, <strong>php</strong> und einige php-Module über <strong>apt-get</strong>:</p>
<p>[pre]<br />
# apt-get install nginx<br />
# apt-get install php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd php5-suhosin php5-curl<br />
[/pre]</p>
<p>Wir wechseln in das nginx Verzeichnis um ein paar Einstellungen vorzunehmen:</p>
<p>[pre]<br />
# cd /etc/nginx/<br />
# nano nginx.conf<br />
[/pre]</p>
<p>Die nun folgende Konfiguration ist das Beispiel, welches für meine Bedürfnisse passt, für euch ist die Lektüre vom <a href="http://wiki.nginx.org/Configuration" target="_blank" class="liexternal">Wiki</a> eventuell interessant, um eure Konfigurationen anzupassen.</p>
<p>[code]<br />
index index.php index.htm index.html;<br />
keepalive_timeout 15;</p>
<p>client_max_body_size 20M;<br />
client_body_buffer_size 128k;</p>
<p>##<br />
# Gzip Settings<br />
##</p>
<p>gzip on;<br />
gzip_comp_level 9;<br />
gzip_proxied any;<br />
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript image/png image/gif image/jpeg;<br />
gzip_http_version 1.1;<br />
gzip_min_length 1000;<br />
gzip_buffers 16 8k;<br />
gzip_disable "MSIE [1-6] \.";<br />
gzip_vary on;<br />
[/code]</p>
<p>Wir entfernen den Standard-vHost und schreiben uns einen eigenen (der Name ist hier natürlich frei wählbar, der Übersicht halber am besten den Domainnamen verwenden). Dabei natürlich darauf achten, dass ihr eure Domain entsprechend eintragt und den vHost nach euren Bedürfnissen anpasst. Hier sei wieder auf das nginx-Wiki verwiesen:</p>
<p>[pre]<br />
cd /etc/nginx/sites-enabled<br />
rm default<br />
nano /etc/nginx/sites-available/bonsailinse.net<br />
[/pre]</p>
<p>[code]<br />
server {<br />
  server_name bonsailinse.net www.bonsailinse.net;</p>
<p>  root /var/www/bonsailinse.net/www;</p>
<p>  location / {<br />
    try_files $uri $uri/ /index.php /index.html;<br />
  }</p>
<p>  location ~ /\. {<br />
    access_log off;<br />
    log_not_found off;<br />
    deny all;<br />
  }</p>
<p>   location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {<br />
     access_log off;<br />
     expires 30d;<br />
   }</p>
<p>   location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ {<br />
     deny all;<br />
   }</p>
<p>   location ~ \.php$ {<br />
     try_files $uri =404;</p>
<p>     fastcgi_split_path_info ^(.+\.php)(.*)$;<br />
     fastcgi_pass 127.0.0.1:9000;<br />
     fastcgi_index index.php;<br />
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;</p>
<p>     include fastcgi_params;</p>
<p>     fastcgi_intercept_errors on;<br />
     fastcgi_ignore_client_abort off;<br />
     fastcgi_connect_timeout 60;<br />
     fastcgi_send_timeout 180;<br />
     fastcgi_read_timeout 180;<br />
     fastcgi_buffer_size 128k;<br />
     fastcgi_buffers 4 256k;<br />
     fastcgi_busy_buffers_size 256k;<br />
     fastcgi_temp_file_write_size 256k;<br />
   }<br />
}<br />
[/code]</p>
<p>Da wir keine Lust haben, diesen ganzen Wulst für jeden einzelnen vHost neu einzutragen erstellen wir uns eine Datei, die wir einfach für jede Domain fix includen.</p>
<p>Damit sieht die Include-Datei nun so aus:</p>
<p>[pre]<br />
# nano /etc/nginx/defaults.inc<br />
[/pre]</p>
<p>[code]</p>
<p>  location / {<br />
    try_files $uri $uri/ /index.php /index.html;<br />
  }</p>
<p>  location ~ /\. {<br />
    access_log off;<br />
    log_not_found off;<br />
    deny all;<br />
  }</p>
<p>   location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {<br />
     access_log off;<br />
     expires 30d;<br />
   }</p>
<p>   location ~ (\.inc\.php|\.tpl|\.sql|\.tpl\.php|\.db)$ {<br />
     deny all;<br />
   }</p>
<p>   location ~ \.php$ {<br />
     try_files $uri =404;</p>
<p>     fastcgi_split_path_info ^(.+\.php)(.*)$;<br />
     fastcgi_pass 127.0.0.1:9000;<br />
     fastcgi_index index.php;<br />
     fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;</p>
<p>     include fastcgi_params;</p>
<p>     fastcgi_intercept_errors on;<br />
     fastcgi_ignore_client_abort off;<br />
     fastcgi_connect_timeout 60;<br />
     fastcgi_send_timeout 180;<br />
     fastcgi_read_timeout 180;<br />
     fastcgi_buffer_size 128k;<br />
     fastcgi_buffers 4 256k;<br />
     fastcgi_busy_buffers_size 256k;<br />
     fastcgi_temp_file_write_size 256k;<br />
   }<br />
[/code]</p>
<p>Dementsprechend ist unser vHost nun etwas kürzer:</p>
<p>[pre]<br />
# nano /etc/nginx/sites-available/bonsailinse.net<br />
[/pre]</p>
<p>[code]<br />
server {<br />
  server_name bonsailinse.net www.bonsailinse.net;</p>
<p>  root /var/www/bonsailinse.net/www;</p>
<p>  include defaults.inc;<br />
}<br />
[/code]</p>
<p>Ein neuer <strong>Symlink</strong> sorgt dafür, dass unser vHost auch aktiv ist:</p>
<p>[pre]<br />
# ln -s /etc/nginx/sites-available/bonsailinse.net /etc/nginx/sites-enabled/bonsailinse.net<br />
[/pre]</p>
<p>Fröhliches Neustarten:</p>
<p>[pre]<br />
# /etc/init.d/nginx restart<br />
[/pre]</p>
<p>Und den eben angelegten vHost am besten mit einer <a href="http://php.net/manual/de/function.phpinfo.php" target="_blank" class="liexternal">phpinfo</a> testen:</p>
<p>[pre]<br />
# mkdir -p /var/www/bonsailinse.net/{www,tmp}<br />
# chown -R root:www-data /var/www/bonsailinse.net<br />
# chmod -R 0770 /var/www/bonsailinse.net<br />
# cd /var/www/bonsailinse.net/www<br />
# nano info.php<br />
[/pre]</p>
<p>[code]<br />
<?php<br />
phpinfo();<br />
?><br />
[/code]</p>
<p>Ein Aufruf von http://bonsailinse.net/info.php zeigt mir jetzt meine PHP-Konfiguration an.<br />
Bei euch sollte das nun auch funktionieren.</p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/_1JRs6HAe6A" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/projekt-neuer-server-nginx-php-fpm/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/projekt-neuer-server-nginx-php-fpm/</feedburner:origLink></item>
		<item>
		<title>Projekt: Neuer Server – Erste Schritte</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/hgw30lQfg6Y/</link>
		<comments>http://bonsailinse.net/projekt-neuer-server-erste-schritte/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 05:04:50 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
		
		<guid isPermaLink="false">http://bonsailinse.net/?p=665</guid>
		<description><![CDATA[[note title="Projekt: Neuer Server" align="right"] Teil 1: Einleitung Teil 2: Erste Schritte Teil 3: nginx + php-fpm Teil 4: MySQL + phpMyAdmin Teil 5: Postfix + Dovecot Teil 6: [in Planung] Teil 7: [in Planung] Teil 8: Der Abschluss [/note] Zu Beginn kümmern wir uns um grundlegende Dinge, die einen neu aufgesetzten Server etwas brauchbarer [...]]]></description>
			<content:encoded><![CDATA[<p>[note title="Projekt: Neuer Server" align="right"]<br />
<a href="http://bonsailinse.net/projekt-neuer-server/" class="liinternal">Teil 1: Einleitung</a><br />
<strong>Teil 2: Erste Schritte</strong><br />
<a href="http://bonsailinse.net/projekt-neuer-server-nginx-php-fpm/" class="liinternal">Teil 3: nginx + php-fpm</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-mysql-phpmyadmin/" class="liinternal">Teil 4: MySQL + phpMyAdmin</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-postfix-dovecot/" class="liinternal">Teil 5: Postfix + Dovecot</a><br />
Teil 6: [in Planung]<br />
Teil 7: [in Planung]<br />
Teil 8: Der Abschluss<br />
[/note]</p>
<p>Zu Beginn kümmern wir uns um grundlegende Dinge, die einen neu aufgesetzten Server etwas brauchbarer machen. Die meisten Schritte sind als <em>optional, aber empfehlenswert</em>, einzustufen.</p>
<p>Das Projekt wird in mehrere Teile aufgeteilt, damit wir den Überblick nicht verlieren. Ich hoffe, dass die einzelnen Teile relativ zügig nacheinander online kommen können und das Projekt abgeschlossen werden kann. Drückt uns also die Daumen, dass wir nicht auf allzu hässliche Hindernisse stoßen. Die Links in der Box rechts werden entsprechend nach Veröffentlichung eines Artikels aktualisiert.</p>
<p>[info]<br />
<strong>Info:</strong> Sollte im Folgenden mal ein Befehl nicht funktionieren, weil die Shell &#8216;<strong>Kommando nicht gefunden.</strong>&#8216; zurückliefert, kann es sein, dass ich das entsprechende Programm bereits zwischendurch installiert, dies aber nicht dokumentiert habe, oder es bereits im Image von <a href="http://www.netcup.de/" target="_blank" class="liexternal">netcup</a> enthalten war (so bspw. der Fall bei &#8216;<strong>wget</strong>&#8216;).<br />
Einfach via &#8216;<strong>apt-get install</strong> <em>[Programmname]</em>&#8216; nachinstallieren, im Normalfall ist keine gesonderte Konfiguration erforderlich.<br />
[/info]</p>
<p><span id="more-665"></span></p>
<p>Wir loggen uns also als root ein und ändern zu allererst das Kennwort. Ich empfehle eine möglichst lange Zeichenfolge mit Ziffern und Sonderzeichen, das übliche eben.</p>
<p>[pre]<br />
# passwd<br />
[/pre]</p>
<p>Der nächste Schritt sollte auf jeden Fall das Updaten des Systems sein. Vorher überprüfen wir noch die eingetragenen Repositories:</p>
<p>[pre]<br />
# nano /etc/apt/sources.list<br />
[/pre]</p>
<p>Dort tragen wir, neben den von netcup bereits eingetragenen Mirrors noch den von <a href="http://www.dotdeb.org/" target="_blank" class="liexternal">Dotdeb</a> ein, den wir später zum Beispiel für die Installation von nginx benötigen:</p>
<p>[code]<br />
deb http://debian.netcup.net/debian squeeze main<br />
deb-src http://debian.netcup.net/debian squeeze main</p>
<p>deb http://packages.dotdeb.org stable all<br />
[/code]</p>
<p>Da die Pakete von Dotdeb signiert sind müssen wir unserem System noch den GPG-Key bekannt machen, wenn wir nicht bei jedem Aufruf von apt eine Fehlermeldung provozieren wollen:</p>
<p>[pre]<br />
# wget http://www.dotdeb.org/dotdeb.gpg<br />
# cat dotdeb.gpg | apt-key add -<br />
# rm dotdeb.gpg<br />
[/pre]</p>
<p>Nun können wir via apt-get das System aktualisieren:</p>
<p>[pre]<br />
# apt-get update &#038;&#038; apt-get upgrade<br />
[/pre]</p>
<p>Als nächstes kümmern wir uns um ein paar Kleinigkeiten wie die Serverzeit und die Ausgabesprache der Shell:</p>
<p>[pre]<br />
# dpkg-reconfigure tzdata<br />
[/pre]</p>
<p>Dort <strong>Europe</strong> und <strong>Berlin</strong> auswählen, jeweils mit <strong>[Enter]</strong> bestätigen. Nun ist unsere Zeitzone eingestellt.</p>
<p>Eine automatisierte Zeiteinstellung können wir mit ntp erreichen. Bei Bedarf noch die Lieblingsserver in die ntp.conf eintragen:</p>
<p>[pre]<br />
# apt-get install ntp<br />
# nano /etc/ntp.conf<br />
[/pre]</p>
<p>[code]<br />
server 0.debian.pool.ntp.org iburst<br />
server 1.debian.pool.ntp.org iburst<br />
server 2.debian.pool.ntp.org iburst<br />
server 3.debian.pool.ntp.org iburst<br />
[/code]</p>
<p>[pre]<br />
# /etc/init.d/ntp restart<br />
[/pre]</p>
<p>Da wir alle sehr faul sind, hätten wir die Ausgabe der Shell noch gerne in deutscher Sprache:</p>
<p>[pre]<br />
# apt-get install locales<br />
# dpkg-reconfigure locales -plow<br />
[/pre]</p>
<p>Dort wählen wir via <strong>[Leertaste]</strong> die Punkte <strong>de_DE ISO-8859-1</strong>, <strong>de_DE.UTF-8 UTF-8</strong> und <strong>de_DE@euro ISO-8859-15</strong> aus. Mit <strong>[Enter]</strong> bestätigen und in der nächsten Auswahl für einen der drei als Standard entscheiden. Ich persönlich favorisiere UTF-8. Die Änderungen sind nach einem erneuten Login in die Shell sichtbar. Spart euch die Mühe, haben wir eh gleich vor <img src='http://bonsailinse.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Jetzt wird es Zeit, dass wir unseren sshd absichern. Ein neuer Benutzer ohne root-Rechte ist hier der erste Schritt. Der Name des Users sollte vielleicht nicht unbedingt leicht zu erraten sein, um eine erste Hürde für Skriptkiddies einzubauen:</p>
<p>[pre]<br />
# adduser [username]<br />
[/pre]</p>
<p>Diesen User machen wir nun zu dem einzigen, der sich über SSH einloggen darf. Dazu ändern oder fügen wir folgende Zeilen in die &#8216;<strong>/etc/ssh/sshd_config</strong>&#8216; ein:</p>
<p>[pre]<br />
# nano /etc/ssh/sshd_config<br />
[/pre]</p>
<p>Mit der ersten Zeile ändern wir den Port, über den wir SSH erreichen. Hier wählt <a href="http://de.wikipedia.org/wiki/Port_(Protokoll)#Dynamic_Ports" target="_blank" rel="nofollow" class="liwikipedia">optimalerweise</a> einen zufälligen zwischen <strong>49152</strong> und <strong>65535</strong> aus und <em>merkt ihn euch</em> für zukünftige Logins. Die zweite und dritte Zeile sorgen dafür, dass sich der root-User nicht mehr und ausschließlich unser eben angelegter User einloggen kann:</p>
<p>[code]<br />
Port 52942<br />
PermitRootLogin no<br />
AllowUsers [username]<br />
[/code]</p>
<p>Nun noch den Daemon neu starten:</p>
<p>[pre]<br />
# /etc/init.d/ssh restart<br />
[/pre]</p>
<p>Im Anschluss <strong>in einem neuen Terminalfenster</strong> den Login mit dem neuen User versuchen. So sperrt ihr euch nicht komplett aus, sollte es nicht gleich geklappt haben. Denkt daran, beim Login nun den neuen Port zu nutzen!<br />
Funktioniert der Login, kann im neuen Terminalfenster per &#8216;<strong>su</strong>&#8216; auf root gewechselt und das alte Fenster geschlossen werden.</p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/hgw30lQfg6Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/projekt-neuer-server-erste-schritte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/projekt-neuer-server-erste-schritte/</feedburner:origLink></item>
		<item>
		<title>Projekt: Neuer Server</title>
		<link>http://feedproxy.google.com/~r/bonsailinse/~3/kIH_QzpvHTI/</link>
		<comments>http://bonsailinse.net/projekt-neuer-server/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 00:43:14 +0000</pubDate>
		<dc:creator>Bonsailinse</dc:creator>
		
		<guid isPermaLink="false">http://bonsailinse.net/?p=643</guid>
		<description><![CDATA[[note title="Projekt: Neuer Server" align="right"] Teil 1: Einleitung Teil 2: Erste Schritte Teil 3: nginx + php-fpm Teil 4: MySQL + phpMyAdmin Teil 5: Postfix + Dovecot Teil 6: [in Planung] Teil 7: [in Planung] Teil 8: Der Abschluss [/note] Zu Weihnachten habe ich mir einen neuen Server gegönnt. Hoffnungslos overpowered für das, was er [...]]]></description>
			<content:encoded><![CDATA[<p>[note title="Projekt: Neuer Server" align="right"]<br />
<strong>Teil 1: Einleitung</strong><br />
<a href="http://bonsailinse.net/projekt-neuer-server-erste-schritte" class="liinternal">Teil 2: Erste Schritte</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-nginx-php-fpm/" class="liinternal">Teil 3: nginx + php-fpm</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-mysql-phpmyadmin/" class="liinternal">Teil 4: MySQL + phpMyAdmin</a><br />
<a href="http://bonsailinse.net/projekt-neuer-server-postfix-dovecot/" class="liinternal">Teil 5: Postfix + Dovecot</a><br />
Teil 6: [in Planung]<br />
Teil 7: [in Planung]<br />
Teil 8: Der Abschluss<br />
[/note]</p>
<p>Zu Weihnachten habe ich mir einen neuen Server gegönnt. Hoffnungslos overpowered für das, was er aktuell leisten muss (ein paar Blogs und diverse andere Kleinigkeiten), aber im Sonderangebot <img src='http://bonsailinse.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  Und in diesem Sinne habe ich jetzt einen guten Puffer für zukünftige, eventuell größere Projekte (immerhin will ich den Server jetzt ein Weilchen behalten, und nicht in dem Moment dann schon wieder umsteigen müssen).</p>
<p>Da ich jetzt also eh von dem alten zum neuen Server umziehen muss, nutze ich die Chance und installier mir mal alles von Grund auf.<br />
Kein vorgefertigtes Image von <a href="http://www.netcup.de/" target="_blank" class="liexternal">netcup</a>, die ja auch ganz nett sind, sondern eine minimal Installation ohne vorinstallierte Dienste wie Webserver oder Admin Control Panels.</p>
<p>Nachdem <a href="http://isp-control.net/" target="_blank" class="liexternal">ispCP</a> nicht mehr offiziell weiterentwickelt wird und ich keine Lust habe, auf ein Stable-Release von <a href="http://i-mscp.net/" target="_blank" class="liexternal">i-MSCP</a> zu warten, mir <a href="http://www.froxlor.org/" target="_blank" class="liexternal">Froxlor</a> nicht gefällt und ich gar nicht von <a href="http://www.parallels.com/de/products/plesk/" target="_blank" class="liexternal">Plesk</a> oder <a href="http://www.parallels.com/de/products/confixx/" target="_blank" class="liexternal">Confixx</a> anfangen möchte, habe ich mich entschlossen kein Admin Control Panel mehr einzusetzen.<br />
Damit nehme ich mir zwar ein wenig Luxus was das Anlegen von Virtuellen Hosts angeht, aber all zu oft tut man das dann ja doch nicht und der Gewinn an Individualität und Konfigurationsmöglichkeiten schlägt meine Faulheit.</p>
<p>Als Grundinstallation dient also ein <a href="http://www.debian.org/" target="_blank" class="liexternal">Debian</a> Squeeze (64 Bit), die einzigen Dienste, die beim Systemstart nun vorhanden sind, sind der <strong>sshd</strong> für den Zugriff über SSH, der <strong>rsyslogd</strong> als zentrale Logverwaltung und <strong>cron</strong>.</p>
<p>Als Ziel setze ich mir erstmal ein System mit den nötigsten Diensten:</p>
<p>[note title="" align="center"]<br />
<a href="http://nginx.org/" target="_blank" class="liexternal">nginx</a> (mit <a href="http://php-fpm.org/" target="_blank" class="liexternal">php-fpm</a>) als Webserver<br />
<a href="http://www.mysql.com/" target="_blank" class="liexternal">MySQL</a> inklusive <a href="http://www.phpmyadmin.net/" target="_blank" class="liexternal">phpMyAdmin</a><br />
<a href="http://www.postfix.org/" target="_blank" class="liexternal">Postfix</a> und <a href="http://dovecot.org/" target="_blank" class="liexternal">Dovecot</a> für den ganzen eMail-Kram<br />
[/note]</p>
<p>Dann wird weiter überlegt, zum Beispiel bin ich mir noch nicht sicher, ob ich <a href="http://www.proftpd.org/" target="_blank" class="liexternal">ProFTP</a> für den Zugriff via FTP benötige. DNS und son Kram wäre auch noch ne Idee, wie ich <a href="http://webdav.org/" target="_blank" class="liexternal">WebDAV</a> (oder einen adäquaten Ersatz) mit nginx umsetze, und sonst mal schauen was mir noch so einfällt. Erstmal kümmere ich mich um die Sachen in der Liste oben.</p>
<p>.</p>
<img src="http://feeds.feedburner.com/~r/bonsailinse/~4/kIH_QzpvHTI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bonsailinse.net/projekt-neuer-server/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://bonsailinse.net/projekt-neuer-server/</feedburner:origLink></item>
	</channel>
</rss>

