<?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>bommi&#039;s Blog</title>
	<atom:link href="http://kupschke.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://kupschke.net</link>
	<description>Linux, Administration and other stuff</description>
	<lastBuildDate>Mon, 13 May 2013 16:36:34 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Fail2Ban und Postscreen</title>
		<link>http://kupschke.net/2013/04/20/fail2ban-und-postscreen/</link>
		<comments>http://kupschke.net/2013/04/20/fail2ban-und-postscreen/#comments</comments>
		<pubDate>Sat, 20 Apr 2013 11:37:38 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Antispam]]></category>
		<category><![CDATA[Fail2Ban]]></category>
		<category><![CDATA[IPtables]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[Postscreen]]></category>

		<guid isPermaLink="false">http://kupschke.net/?p=656</guid>
		<description><![CDATA[Fail2Ban lässt sich dahingehend erweitern, um auf die Ausgaben von Postscreen zu reagieren und die IP Adressen zu blocken. Man könnte Fail2Ban anweisen die ankommende IP zu blocken, falls diese von Postscreen auf einer Blacklist oder mehreren Blacklists gefunden wurde. Der entsprechende Postscreen Log-Eintrag sieht so aus: Nun muss man den Fail2Ban Postfix Filter entsprechend [...]]]></description>
				<content:encoded><![CDATA[<p>Fail2Ban lässt sich dahingehend erweitern, um auf die Ausgaben von Postscreen zu reagieren und die IP Adressen zu blocken.</p>
<p>Man könnte Fail2Ban anweisen die ankommende IP zu blocken, falls diese von Postscreen auf einer Blacklist oder mehreren Blacklists gefunden wurde.<br />
Der entsprechende Postscreen Log-Eintrag sieht so aus:</p>
<pre class="brush: bash; title: ; notranslate">
NOQUEUE: reject: RCPT from [x.x.x.x]:xxxx: 550 5.7.1 Service unavailable;
client [x.x.x.X] blocked using zen.spamhaus.org;
from=&lt;spammer@domain.tld&gt;, to=&lt;spam@kupschke.net&gt;, proto=ESMTP, helo=&lt;...&gt;
</pre>
<p>Nun muss man den Fail2Ban Postfix Filter entsprechend anpassen, diesen findet man in der Datei <strong>/etc/fail2ban/filter.d/postfix.conf</strong>:<br />
<strong>Original:</strong></p>
<pre class="brush: bash; title: ; notranslate"> failregex = reject: RCPT from (.*)\[&lt;HOST&gt;\]: 554</pre>
<p><strong>Meine Anpassungen:</strong></p>
<pre class="brush: bash; title: ; notranslate"> failregex = reject: RCPT from (.*)\[&lt;HOST&gt;\]: 554
             reject: RCPT from (.*)\[&lt;HOST&gt;\]:([0-9]{4,5}:)? 550</pre>
<p>Sofern die Fail2Ban Standardeinstellungen gesetzt sind, würde ein Spammer jetzt nach 3 Versuchen für 10 Minuten gebannt werden.<br />
Mein Postscreen fragt allerdings mehrere Blacklists ab und blockiert den Spammer erst wenn er in mehreren Blacklists eingetragen ist, diese Überprüfungen sind recht teuer, daher möchte ich den Spammer bei seinem ersten Versuch für eine Stunde blockieren.<br />
Um diese Konfiguration einzurichten öffnen wir die Datei /etc/fail2ban/jail.conf und ändern die Einträge wie folgt ab:<br />
<strong>Originial:</strong></p>
<pre class="brush: bash; title: ; notranslate">
[postfix]
enabled  = true
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
</pre>
<p><strong>Meine Anpassungen:</strong></p>
<pre class="brush: bash; title: ; notranslate">
[postfix]
enabled  = true
port     = smtp
filter   = postfix
logpath  = /var/log/mail.log
maxretry = 1
bantime = 3600
</pre>
<p>Ob man auch alles richtig eingestellt hat, und welchen Erfolg man bisher mit diesen Regeln gehabt hätte, kann man sich mit diesem Befehl anzeigen lassen:</p>
<pre class="brush: bash; title: ; notranslate">
fail2ban-regex /var/log/mail.log /etc/fail2ban/filter.d/postfix.conf
</pre>
<p>Mithilfe von Fail2Ban kann man natürlich auch auf alle anderen Ausgaben von Postscreen und Postfix reagieren und die Spammer sehr effizient abwehren.</p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2013/04/20/fail2ban-und-postscreen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Standard Terminal setzen</title>
		<link>http://kupschke.net/2012/07/12/standard-terminal-setzen/</link>
		<comments>http://kupschke.net/2012/07/12/standard-terminal-setzen/#comments</comments>
		<pubDate>Thu, 12 Jul 2012 20:52:03 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://kupschke.net/?p=580</guid>
		<description><![CDATA[Um das Standard Terminal zu ändern gibt es unter Debian und Ubuntu diesen Befehl: Auf meinem System erhalte ich folgende Ausgabe: In meinem Beispiel war "terminator" als Standard gesetzt, dies habe ich durch die Eingabe der 4 auf die Unicode Variante von xterm umgestellt.]]></description>
				<content:encoded><![CDATA[<p>Um das Standard Terminal zu ändern gibt es unter Debian und Ubuntu diesen Befehl:</p>
<pre class="brush: bash; title: ; notranslate">update-alternatives --config x-terminal-emulator</pre>
<p>Auf meinem System erhalte ich folgende Ausgabe:</p>
<pre class="brush: bash; title: ; notranslate">
Es gibt 5 Auswahlmöglichkeiten für die Alternative x-terminal-emulator
(welche /usr/bin/x-terminal-emulator bereitstellen).

  Auswahl      Pfad                 Priorität Status
------------------------------------------------------------
* 0            /usr/bin/terminator   50        Auto-Modus
  1            /usr/bin/koi8rxterm   20        manueller Modus
  2            /usr/bin/lxterm       30        manueller Modus
  3            /usr/bin/terminator   50        manueller Modus
  4            /usr/bin/uxterm       20        manueller Modus
  5            /usr/bin/xterm        20        manueller Modus

Drücken Sie die Eingabetaste, um die aktuelle Wahl[*] beizubehalten,
oder geben Sie die Auswahlnummer ein: 4
</pre>
<p>In meinem Beispiel war "terminator" als Standard gesetzt, dies habe ich durch die Eingabe der 4 auf die Unicode Variante von xterm umgestellt.</p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2012/07/12/standard-terminal-setzen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arbeiten mit Git &#8211; Remote Repository hinzufuegen</title>
		<link>http://kupschke.net/2012/06/28/arbeiten-mit-git-remote-repository-hinzufugen/</link>
		<comments>http://kupschke.net/2012/06/28/arbeiten-mit-git-remote-repository-hinzufugen/#comments</comments>
		<pubDate>Thu, 28 Jun 2012 09:23:13 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Versionsverwaltung]]></category>
		<category><![CDATA[versionsverwaltung scm git repository]]></category>

		<guid isPermaLink="false">http://kupschke.net/blog/?p=238</guid>
		<description><![CDATA[In einem älteren Artikel habe ich ja schon erklärt wie man mit einem lokalen Git Repository arbeitet. Wenn man die Daten jedoch auch Remote ablegen möchte, sei es um mit mehreren Personen zu arbeiten oder zur Sicherung der Daten, ermöglicht es Git sogenannte Remote Repositorys hinzuzufügen. Um ein Remote Repository einem lokalen Repository hinzuzufügen muss [...]]]></description>
				<content:encoded><![CDATA[<p>In einem älteren <a title="Arbeiten mit Git – Lokales Repository anlegen" href="http://kupschke.net/blog/2011/02/07/arbeiten-mit-git-lokales-repository-anlegen/" target="_blank">Artikel</a> habe ich ja schon erklärt wie man mit einem lokalen Git Repository arbeitet. Wenn man die Daten jedoch auch Remote ablegen möchte, sei es um mit mehreren Personen zu arbeiten oder zur Sicherung der Daten, ermöglicht es Git sogenannte Remote Repositorys hinzuzufügen.<br />
Um ein Remote Repository einem lokalen Repository hinzuzufügen muss man zuerst in dass Repository wechseln und dann folgender Befehl eingeben werden:</p>
<pre class="brush: bash; title: ; notranslate">git remote add &lt;symbolischer-name&gt; protocol://example.org/git/&lt;remote-repository&gt;</pre>
<p>Mit diesem Befehl kann man sich dann alle verfügbaren Repositorys anzeigen lassen:</p>
<pre class="brush: bash; title: ; notranslate">git remote show</pre>
<p>Als Ausgabe erhält man alle Symbolischen Namen, welche man während des hinzufügen der Remote Locations vergeben hat.</p>
<p>Falls man mehr Information über ein bestimmtes Remote Repository erfahren möchte muss nur dessen Symbolischen Namen angeben:</p>
<pre class="brush: bash; title: ; notranslate">git remote show &lt;symbolischer-name&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2012/06/28/arbeiten-mit-git-remote-repository-hinzufugen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gerrit Code Review mit Tomact,MySQL und LDAP</title>
		<link>http://kupschke.net/2012/06/27/gerrit-code-review-mit-tomactmysql-und-ldap/</link>
		<comments>http://kupschke.net/2012/06/27/gerrit-code-review-mit-tomactmysql-und-ldap/#comments</comments>
		<pubDate>Wed, 27 Jun 2012 19:13:41 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Datenbank]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Versionsverwaltung]]></category>
		<category><![CDATA[Webserver]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[code review]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[gerrit]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[ldap]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[openjdk]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[sourcecode]]></category>
		<category><![CDATA[tomcat]]></category>
		<category><![CDATA[tomcat6]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://kupschke.net/?p=483</guid>
		<description><![CDATA[Dieses Howto beschreibt die Installation eines Gerrit Code Review Systems, anstatt des mitgelieferten Jetty Application-Servers wird ein Tomcat eingesetzt. Als Datenbank wird ein MySQL-Server genutzt und die Benutzerdaten kommen aus einer bestehenden LDAP Installation. Die Installation funktioniert unter Debian und Ubuntu, sollte aber mit geringem Aufwand auch auf anderen Linux-Distributionen funktionieren. 1. Benötigte Pakete installieren [...]]]></description>
				<content:encoded><![CDATA[<p>Dieses Howto beschreibt die Installation eines Gerrit Code Review Systems, anstatt des mitgelieferten Jetty Application-Servers wird ein Tomcat eingesetzt. Als Datenbank wird ein MySQL-Server genutzt und die Benutzerdaten kommen aus einer bestehenden LDAP Installation.<br />
Die Installation funktioniert unter Debian und Ubuntu, sollte aber mit geringem Aufwand auch auf anderen Linux-Distributionen funktionieren.</p>
<p><strong>1. Benötigte Pakete installieren</strong></p>
<pre class="brush: bash; title: ; notranslate">apt-get install git git-core openjdk-6-jre apache2 libapache2-mod-jk mysql-server tomcat6</pre>
<p><strong>2. CA Zertifikat in den Java Keystore übernehmen</strong><br />
Dieser Schritt ist nur dann wichtig, wenn der LDAP-Server über eine SSL/TLS geschützte Verbindung angesprochen werden soll.</p>
<p>Für OpenJDK lautet der Importbefehl wie folgt:</p>
<pre class="brush: bash; title: ; notranslate">keytool -import -trustcacerts -alias &quot;example-ca&quot; -file CA.pem -keystore /etc/ssl/certs/java/cacerts -storepass &quot;changeit&quot;</pre>
<p>Falls ein Oracle Java genutzt wird sieht der Befehl etwas anders aus:</p>
<pre class="brush: bash; title: ; notranslate">keytool -import -trustcacerts -alias &quot;example-ca&quot; -file CA.pem -keystore /etc/java6-sun/security/cacerts -storepass &quot;changeit&quot;</pre>
<p><strong>3. MySQL-Datenbank anlegen</strong><br />
Zuerst muss man sich in die MySQL-Datenbank mit dem während der Installation gesetzten Passwort einloggen:</p>
<pre class="brush: bash; title: ; notranslate">mysql -u root -p</pre>
<p>Nun legt man eine neue Datenbank und einen Benutzer für die Gerrit Instanz an:</p>
<pre class="brush: sql; title: ; notranslate">CREATE USER 'gerrit'@'localhost' IDENTIFIED BY 'gerrit';
CREATE DATABASE reviewdb;
ALTER DATABASE reviewdb charset=latin1;
GRANT ALL ON reviewdb.* TO 'gerrit'@'localhost';
FLUSH PRIVILEGES;
quit;</pre>
<p><strong>4. Initiale Gerrit Konfiguration durchführen</strong><br />
Zuerst muss ein Ordner für die Gerrit Git-Repositorys und einige Konfigurationsdateien angelegt werden:</p>
<pre class="brush: bash; title: ; notranslate">mkdir /opt/gerrit
cd /opt/gerrit</pre>
<p>Nun können die benötigten Installationsdateien heruntergeladen werden:</p>
<pre class="brush: bash; title: ; notranslate">wget https://gerrit.googlecode.com/files/gerrit-2.4.2.war -O gerrit.war</pre>
<p>Die Gerrit Installation wird mit diesem Befehl gestartet:</p>
<pre class="brush: bash; title: ; notranslate">java -jar gerrit.war init -d /opt/gerrit/gerrit-home</pre>
<p>Während der Installation werden einige Fragen gestellt, die entsprechenden Antworten habe ich fett markiert:</p>
<p style="padding-left: 30px;"><code><br />
*** Gerrit Code Review 2.4.2<br />
*** </code></p>
<p style="padding-left: 30px;">Create '/opt/gerrit/review_site' [Y/n]? <strong>y</strong></p>
<p style="padding-left: 30px;">*** Git Repositories<br />
***</p>
<p style="padding-left: 30px;">Location of Git repositories [git]: <strong>/opt/gerrit/git</strong></p>
<p style="padding-left: 30px;">Database server type [H2/?]: <strong>mysql</strong></p>
<p style="padding-left: 30px;">Gerrit Code Review is not shipped with MySQL Connector/J 5.1.10<br />
** This library is required for your configuration. **<br />
Download and install it now [Y/n]? <strong>y</strong><br />
Downloading http://repo2.maven.org/maven2/mysql/mysql-connector-java/5.1.10/mysql-connector-java-5.1.10.jar ... OK<br />
Checksum mysql-connector-java-5.1.10.jar OK</p>
<p style="padding-left: 30px;">Server hostname [localhost]:<br />
Server port [(MYSQL default)]:<br />
Database name [reviewdb]:<br />
Database username [root]:<br />
gerrit's password :<br />
confirm password :</p>
<p style="padding-left: 30px;">*** User Authentication<br />
***<br />
Authentication method [OPENID/?]: <strong>ldap</strong><br />
LDAP server [ldap://localhost]: <strong>ldaps://ldap.example.org</strong><br />
LDAP username :<br />
Account BaseDN [DC=example,DC=org]: <strong>OU=Users,DC=example,DC=org</strong><br />
Group BaseDN [OU=Users,DC=example,DC=org]: <strong>OU=Groups,DC=example,DC=org</strong><br />
*** Email Delivery<br />
***</p>
<p style="padding-left: 30px;">SMTP server hostname [localhost]:<br />
SMTP server port [(default)]:<br />
SMTP encryption [NONE/?]:<br />
SMTP username :</p>
<p style="padding-left: 30px;">*** Container Process<br />
***</p>
<p style="padding-left: 30px;">Run as [root]:<br />
Java runtime [/usr/lib/jvm/java-6-openjdk-i386/jre]:<br />
Copy gerrit.war to /opt/gerrit/review_site/bin/gerrit.war [Y/n]? <strong>y</strong><br />
Copying gerrit.war to /opt/gerrit/review_site/bin/gerrit.war</p>
<p style="padding-left: 30px;">*** SSH Daemon<br />
***</p>
<p style="padding-left: 30px;">Listen on address [*]:<br />
Listen on port [29418]:</p>
<p style="padding-left: 30px;">Gerrit Code Review is not shipped with Bouncy Castle Crypto v144<br />
If available, Gerrit can take advantage of features<br />
in the library, but will also function without it.<br />
Download and install it now [Y/n]? <strong>n</strong><br />
Generating SSH host key ... rsa(simple)... done</p>
<p style="padding-left: 30px;">*** HTTP Daemon<br />
***</p>
<p style="padding-left: 30px;">Behind reverse proxy [y/N] <strong>y</strong>?<br />
Use SSL (https://) [y/N] <strong>y</strong>?<br />
Listen on address [*]:<br />
Listen on port [8080]:</p>
<p><strong>5. Gerrit in den Tomcat deployen</strong><br />
Als aller erstes wird Tomcat gestoppt:</p>
<pre class="brush: bash; title: ; notranslate">/etc/init.d/tomcat6 stop</pre>
<p>Damit der Zugriff auf die Datenbank aus dem Tomcat funktioniert muss eine Datasource in der Datei /etc/tomcat6/context.xml angelegt werden:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;Context&gt;
....
  &lt;Resource name=&quot;jdbc/ReviewDb&quot; auth=&quot;Container&quot; type=&quot;javax.sql.DataSource&quot;
               maxActive=&quot;100&quot; maxIdle=&quot;30&quot; maxWait=&quot;10000&quot;
               username=&quot;gerrit&quot; password=&quot;gerrit&quot; driverClassName=&quot;com.mysql.jdbc.Driver&quot;
               url=&quot;jdbc:mysql://localhost:3306/reviewdb&quot;/&gt;
....
&lt;/Context&gt;
</pre>
<p>Um nachher die den Apache-Webserver über mod_jk anzubinden muss zuerst der AJP1.3 freigeschaltet werden. Die Freischaltung geschieht in der Datei /etc/tomcat6/server.xml, so sehen die Zeilen vor der Bearbeitung aus:</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;!-- Define an AJP 1.3 Connector on port 8009 --&gt;
    &lt;!--
    &lt;Connector port=&quot;8009&quot; protocol=&quot;AJP/1.3&quot; redirectPort=&quot;8443&quot; /&gt;
    --&gt;
</pre>
<p>Und so nach der Bearbeitung:</p>
<pre class="brush: xml; title: ; notranslate">
    &lt;!-- Define an AJP 1.3 Connector on port 8009 --&gt;
        &lt;Connector port=&quot;8009&quot; protocol=&quot;AJP/1.3&quot; redirectPort=&quot;8443&quot; /&gt; </pre>
<p>Nun werden die benötigten Daten in die entsprechenden Tomcat Verzeichnisse verschoben:</p>
<pre class="brush: bash; title: ; notranslate">cd /opt/gerrit/gerrit-home/
cp bin/gerrit.war /var/lib/tomcat6/webapps/
cp lib/mysql-connector-java-5.1.10.jar /usr/share/tomcat6/lib/
chown tomcat6.tomcat6 -R /opt/gerrit/
</pre>
<p><strong>6. Tomcat über mod-jk anbinden</strong><br />
JK-Worker für Gerrit anlegen:</p>
<pre class="brush: bash; title: ; notranslate">vi /etc/libapache2-mod-jk/workers.properties</pre>
<p>Die workers.properties sollte so aussehen:<code></code></p>
<p style="padding-left: 30px;"><code><br />
workers.tomcat_home=/usr/share/tomcat6<br />
workers.java_home=/usr/lib/jvm/default-java<br />
ps=/</code></p>
<p style="padding-left: 30px;">worker.list=gerrit_worker</p>
<p style="padding-left: 30px;">worker.gerrit_worker.port=8009<br />
worker.gerrit_worker.host=localhost<br />
worker.gerrit_worker.type=ajp13<br />
worker.gerrit_worker.lbfactor=1</p>
<p style="padding-left: 30px;">worker.loadbalancer.type=lb<br />
worker.loadbalancer.balance_workers=gerrit_worker</p>
<p>Als nächstes wird eine Konfigurationsdatei für eine generelle mod_jk Konfiguration angelegt:<br />
<code>touch /etc/apache2/conf.d/jk.conf</code></p>
<p>Die Datei wird mit diesem Inhalt gefüllt:<br />
<code><br />
JkShmFile /var/log/apache2/mod_jk.shm<br />
JkLogFile /var/log/apache2/mod_jk.log<br />
JkLogLevel info<br />
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "<br />
JkOptions +RejectUnsafeURI +ForwardKeySize<br />
JkMount /gerrit gerrit_worker<br />
JkMount /gerrit/* gerrit_worker<br />
</code></p>
<p>Als letztes muss man die VirtualHosts anpassen, in denen die Applikationen verfügbar sein sollen, dazu fügt man folgende Zeile ein:<br />
<code><br />
JkMountCopy On<br />
</code></p>
<p>Zum Abschluss sollten der Tomcat- und der Apache-Server einmal neugestartet werden:<br />
<code><br />
/etc/init.d/tomcat6 restart<br />
/etc/init.d/apache2 restart<br />
</code></p>
<p>Nun könnt ihr euer Gerrit Code Review System über http(s)://your-host/gerrit aufrufen.</p>
<p>Zum Abschluss poste ich hier noch meine funktionierende gerrit.config:<br />
<code><br />
[gerrit]<br />
	basePath = /opt/gerrit/git<br />
[database]<br />
	type = MYSQL<br />
	hostname = localhost<br />
	database = reviewdb<br />
	username = gerrit<br />
[auth]<br />
	type = LDAP<br />
[ldap]<br />
	server = ldap://ldap.example.org<br />
        accountBase = OU=Users,DC=example,DC=org<br />
        groupBase = OU=Groups,DC=example,DC=org<br />
[sendemail]<br />
	smtpServer = localhost<br />
[container]<br />
	user = root<br />
	javaHome = /usr/lib/jvm/java-6-openjdk-i386/jre<br />
[sshd]<br />
	listenAddress = *:29418<br />
[httpd]<br />
	listenUrl = proxy-http://*:8080/<br />
[cache]<br />
	directory = cache<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2012/06/27/gerrit-code-review-mit-tomactmysql-und-ldap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeRADIUS mit EAP-TTLS und LDAP zur sicheren WLAN Authentifizierung</title>
		<link>http://kupschke.net/2012/04/16/freeradius-mit-eap-ttls-und-ldap-zur-sicheren-wlan-authentifizierung/</link>
		<comments>http://kupschke.net/2012/04/16/freeradius-mit-eap-ttls-und-ldap-zur-sicheren-wlan-authentifizierung/#comments</comments>
		<pubDate>Mon, 16 Apr 2012 20:50:09 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[EAP]]></category>
		<category><![CDATA[EAP-TTLS]]></category>
		<category><![CDATA[FreeRADIUS]]></category>
		<category><![CDATA[RADIUS]]></category>
		<category><![CDATA[TTLS]]></category>
		<category><![CDATA[WLAN]]></category>
		<category><![CDATA[WPA]]></category>
		<category><![CDATA[WPA2]]></category>

		<guid isPermaLink="false">http://kupschke.net/?p=439</guid>
		<description><![CDATA[1. Beschreibung Warum WPA2 Enterprise? WPA2 Enterprise ermöglicht es jedem Benutzer eigene Zugangsdaten verwenden zu lassen, falls ein Benutzer keinen Zugriff mehr auf das WLAN Netzwerk haben soll, muss nur dessen Account deaktiviert werden. Bei einem Passphrase geschütztem WPA Netzwerk wäre hier der Austausch der Passphrase notwendig, welche man dann an alle bestehenden Nutzer erneut [...]]]></description>
				<content:encoded><![CDATA[<p><strong>1. Beschreibung</strong><br />
<em>Warum WPA2 Enterprise?</em><br />
WPA2 Enterprise ermöglicht es jedem Benutzer eigene Zugangsdaten verwenden zu lassen, falls ein Benutzer keinen Zugriff mehr auf das WLAN Netzwerk haben soll, muss nur dessen Account deaktiviert werden. Bei einem Passphrase geschütztem WPA Netzwerk wäre hier der Austausch der Passphrase notwendig, welche man dann an alle bestehenden Nutzer erneut verteilen muss.</p>
<p><em>Warum EAP-TTLS?</em><br />
EAP-TTLS ist eines der flexibelsten EAP Verfahren, da es kaum eine Beschränkung in der Auswahl des Backends zur Passwortverwaltung gibt ( Textdateien, SQL-Datenbanken, Active Directory oder LDAP ).<br />
EAP-TTLS ist wie auch EAP-PEAP ein sogenanntes 2 Phasen Verfahren, hierbei wird in der ersten Phase ein TLS-Tunnel zwischen dem WLAN Client und dem FreeRADIUS-Server aufgebaut.<br />
In der zweiten Phase unterscheiden sich die Verfahren jedoch deutlich, hier unterstützt EAP-PEAP nur MS-CHAPV2, dagegen werden unter EAP-TTLS folgende Verschlüsselungsverfahren unterstützt:</p>
<ol>
<li>EAP</li>
<li>CHAP</li>
<li>MS-CHAP</li>
<li>MS-CHAPv2</li>
<li>PAP</li>
</ol>
<p>Sollten die Passwörter im LDAP-Server als besonders sichere "Salted SHA-1"-Hashes hinterlegt sein kann nur PAP in der zweiten Phase eingesetzt werden, wie man in dieser Tabelle erkennen kann:<br />
<a title="Protocol and Password Compatibility" href="http://deployingradius.com/documents/protocols/compatibility.html" target="_blank"> Protocol and Password Compatibility</a></p>
<p>Der in der ersten Phase initialisierte TLS-Tunnel schützt die im unverschlüsselten Password Authentication Protocol (PAP) übertragenen Zugangsdaten.</p>
<p><strong>2. Konfiguration des FreeRADIUS Servers</strong><br />
<em>Installation der Software</em><br />
Auf dem Server werden die folgenden Pakete installiert:</p>
<p><code>apt-get install freeradius freeradius-ldap freeradius-utils</code></p>
<p><em>SSL Zertifikate erzeugen</em><br />
Während der Installation werden zumindest unter Ubuntu und Debian sogenannte selbst signierte SnakeOil Zertifikate angelegt.<br />
Diese SnakeOil Zertifikate eignen sich zum testen des Aufbaus sollten aber vor der Inbetriebnahme durch Kaufzertifikate oder zumindest durch die Zertifikate einer eigenen CA ausgetauscht werden, um Man in the Middle Attacken abzuwehren.</p>
<p><em>AccessPoints als Clients des FreeRADIUS-Server einrichten</em><br />
Die AccessPoints werden in der Datei /etc/freeradius/clients.conf eingerichtet:</p>
<p><code>client {<br />
secret = Passwort<br />
shortname = Symbolischer Name<br />
}</code></p>
<p><em>Den FreeRADIUS-Server auf EAP-TTLS konfigurieren</em><br />
Die zu verwendende Verschlüsselungsmethode wird in der Datei /etc/freeradius/eap.conf eingerichtet:<br />
Zuerst muss der Standard EAP-Typ eingestellt werden:</p>
<p><code>default_eap_type = ttls</code></p>
<p>Für die TLS Konfiguration müssen das Server Zertifikat, der Private Key, die Diffie-Hellman Parameter und /dev/urandom als Zufallszahlengenerator angegeben werden:</p>
<p><code>tls {<br />
private_key_file = /etc/freeradius/certs/radius-key.pem<br />
certificate_file = /etc/freeradius/certs/radius-cert.pem<br />
dh_file = /etc/freeradius/certs/dh.pem<br />
random_file = /dev/urandom<br />
cipher_list = "DEFAULT"<br />
}</code></p>
<p>Zuletzt müssen noch einige EAP-TTLS Konfigurationen angepasst werden:</p>
<p><code>ttls {<br />
default_eap_type = md5<br />
virtual_server = "inner-tunnel"<br />
}</code></p>
<p>Warum in der TTLS Konfiguration der default_eap_type auf MD5 gestellt werden muss konnte ich nicht herausfinden, falls man den Wert ändert startet der FreeRADIUS Server nicht mehr.<br />
Der Parameter virtual_server lädt die entsprechende Konfiguration für die Phase 2.</p>
<p><em>Verbindung zum OpenLDAP Server einrichten</em><br />
Um den FreeRADIUS-Server an den LDAP Server anzubinden müssen die Verbindungsparameter und die entsprechenden LDAP-Filter eingetragen werden:</p>
<p><code>ldap {<br />
server = ldap.example.org<br />
port = 636 # Oder 389 falls der LDAP-Server keine SSL gesicherten Verbindungen anbietet.<br />
basedn = "dc=example,dc=org"<br />
filter = "(&amp;(objectClass=posixAccount)(uid=%{User-Name}))"<br />
groupmembership_filter = "(&amp;(objectClass=posixGroup)(memberUid=%{User-Name}))"<br />
groupmembership_attribute = "cn=Gruppe,ou=Groups,dc=example,dc=org"<br />
ldap_connections_number=5<br />
dictionary_mapping = ${confdir}/ldap.attrmap<br />
}</code></p>
<p>Die LDAP Filter in diesem Beispiel müssen nicht unbedingt auf jedem LDAP Setup funktionieren, diese muss man dann an dass jeweiliges Schema anpassen.</p>
<p>Abschließend muß die Umsetzung zwischen den RADIUS und den LDAP Attributen in der Datei /etc/freeradius/ldap.attrmap konfiguriert werden.<br />
Es sollte alle eventuell vorhandenen Attribute gelöscht werden, sodass die Datei die folgenden fünf Zeilen enthält:<br />
<code><br />
checkItem $GENERIC$ radiusCheckItem<br />
replyItem $GENERIC$ radiusReplyItem<br />
checkItem LM-Password sambaLmPassword<br />
checkItem NT-Password sambaNtPassword<br />
checkItem SMB-Account-CTRL-Text acctFlags<br />
</code></p>
<p><strong>3. Konfiguration der AccessPoints</strong><br />
Mittlerweile unterstützen die gängisten AccessPoints und WLAN-Router das RADIUS-Protokoll, hierbei sind immer folgende Angaben zu machen:</p>
<ol>
<li>IP-Adresse des RADIUS-Servers</li>
<li>Der RADIUS-Server Port: 1812</li>
<li>Das Shared Secret aus der clients.conf</li>
</ol>
<p>Nun sollte man ein funktionsfähiges WPA2 Enterprise Setup besitzen, falls es zu Problemen kommt kann man den FreeRADIUS in einem ziemlich gesprächigem Modus starten:<br />
<code>freeradius -vv</code></p>
<p>RADIUS und EAP als Protokolle und FreeRADIUS als Software sind recht komplexe Themengebiete, also nicht gleich aufgeben falls etwas nicht klappt.<br />
Für alle die sich tiefer mit der Materie auseinandersetzen wollen kann ich folgende RFCs empfehlen:<br />
RFC zu RADIUS: <a href="http://http://www.ietf.org/rfc/rfc2865.txt" title="RFC2865" target="_blank">http://www.ietf.org/rfc/rfc2865.txt</a><br />
RFC zu EAP-TTLS: <a href="http://tools.ietf.org/html/rfc5281" title="RFC5281" target="_blank">http://tools.ietf.org/html/rfc5281</a></p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2012/04/16/freeradius-mit-eap-ttls-und-ldap-zur-sicheren-wlan-authentifizierung/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git Server mit Apache und dem Git Smart HTTP Protokoll</title>
		<link>http://kupschke.net/2012/02/23/git-server-mit-apache-und-dem-git-smart-http-protokoll/</link>
		<comments>http://kupschke.net/2012/02/23/git-server-mit-apache-und-dem-git-smart-http-protokoll/#comments</comments>
		<pubDate>Thu, 23 Feb 2012 20:31:48 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Git]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Versionsverwaltung]]></category>
		<category><![CDATA[Webserver]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://kupschke.net/blog/?p=192</guid>
		<description><![CDATA[Um ein zentrales Git Repository mit mehreren Personen zu nutzen bieten sich verschiedene Methoden an. Als eleganteste Lösung empfinde ich den Datenaustausch über einen Apache Webserver, da man aus den meisten Netzwerken ohne Probleme an den HTTPS Port 443 kommt. In diesem Tutorial sprechen die Clients mit dem Repository über das sogenannte "Git Smart HTTP" [...]]]></description>
				<content:encoded><![CDATA[<p>Um ein zentrales Git Repository mit mehreren Personen zu nutzen bieten sich verschiedene Methoden an. Als eleganteste Lösung empfinde ich den Datenaustausch über einen Apache Webserver, da man aus den meisten Netzwerken ohne Probleme an den HTTPS Port 443 kommt.<br />
In diesem Tutorial sprechen die Clients mit dem Repository über das sogenannte "Git Smart HTTP" Protokoll, dies ermöglicht es auch serverseitig Hooks einzusetzen, die typischen Tutorials gehen nur auf die WebDAV-Anbindung ein die dies nicht ermöglicht. Git über Smart HTTP soll auch eine bessere Geschwindigkeit gegenüber WebDAV bieten, genau nachgemessen habe ich es jedoch nicht.</p>
<p><strong>1. Software installieren</strong><br />
Zusätzlich zu einem bestehenden Apache Webserver wird nur noch folgendes Paket benötigt:<br />
<code>apt-get install git-core</code></p>
<p><strong>2. Verzeichnisstruktur für Git anlegen</strong><br />
Für die Git Projekte lege ich typischerweise eine neue Ordnerstruktur an:<br />
<code>mkdir -p /data/git</code></p>
<p><strong>3. Git Repository anlegen</strong><br />
Zuerst wird ein leeres Verzeichnis angelegt:<br />
<code>mkdir /data/git/&lt;projekt&gt;</code></p>
<p>Jetzt wechselt man in das Verzeichnis und initialisiert das Repository, hierbei ist es wichtig die Datei "git-daemon-export-ok" anzulegen, damit das Repository über Smart HTTP exportiert werden kann:<br />
<code><br />
cd ${GIT_REPO}<br />
git init --bare<br />
git update-server-info<br />
touch git-daemon-export-ok<br />
</code></p>
<p>Zum Schluss müssen die Recht soweit angepasst werden, damit der Apache Webserver in dem Verzeichnis lesen und schreiben darf:<br />
<code><br />
chgrp www-data ${GIT_DIR} -R<br />
chown www-data ${GIT_DIR} -R<br />
chmod 750 ${GIT_DIR}<br />
</code></p>
<p><strong>4. Repository übergreifende Apache Konfiguration</strong><br />
Damit der Smart HTTP Export nachher funktioniert müssen einige Umgebungsvariablen definiert werden, dafür legen wir unter /etc/apache2/conf.d die Datei git.conf an:<br />
<code><br />
SetEnv GIT_PROJECT_ROOT /data/git<br />
SetEnv GIT_HTTP_EXPORT_ALL<br />
ScriptAlias /git/ /usr/lib/git-core/git-http-backend/<br />
</code><br />
Jetzt werden alle Repositorys exportiert in denen die Datei "git-daemon-export-ok" enthalten ist, die Absicherung über einen Benutzernamen und Passwort wird in Punkt 5 des Tutorials beschrieben.</p>
<p>In dem VirtualHost über den die Git-Repositorys angeboten werden muss folgender Alias gesetzt werden:<br />
<code><br />
Alias /git /data/git<br />
</code></p>
<p><strong>5.Absicherung des Git-Repositorys mit einer Basic-Authentication</strong><br />
Zuerst wird eine Datei angelegt, in der die einzelnen Gruppen definiert werden:<br />
<code><br />
touch /etc/apache2/groups<br />
</code><br />
Die Gruppen und Benutzer trägt man nach diesem Schema ein:<br />
<code><br />
groupname : user1 user2<br />
</code></p>
<p>Jetzt wird eine Passwortdatei angelegt in der später die Benutzer und ihre Passwörter eingetragen werden:<br />
<code><br />
touch /etc/apache2/passwd<br />
</code></p>
<p>Die Nutzer werden mit diesem Befehl angelegt:<br />
<code><br />
htpasswd /etc/apache2/passwd username<br />
</code><br />
Nun wird man aufgefordert das Passwort des Benutzers zweimal einzugeben.</p>
<p>In dem Verzeichnis /etc/apache2/conf.d/ wird nun für das Repository eine eigene Konfigurationsdatei angelegt, zum Beispiel projekt.conf mit folgendem Inhalt:<br />
<code><br />
< Location "/git/<strong>projekt</strong>" ><br />
        AuthType Basic<br />
        require group <strong>groupname</strong><br />
        AuthName "<strong>Projekt</strong>"<br />
        AuthUserFile /etc/apache2/passwd<br />
        AuthGroupFile /etc/apache2/groups<br />
        SSLRequireSSL<br />
< /Location ><br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2012/02/23/git-server-mit-apache-und-dem-git-smart-http-protokoll/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTTP Strict Transport Security mit Apache</title>
		<link>http://kupschke.net/2012/02/20/http-strict-transport-security-mit-apache/</link>
		<comments>http://kupschke.net/2012/02/20/http-strict-transport-security-mit-apache/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 19:58:17 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Webserver]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[apache2]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[hsts]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[https]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sicherheit]]></category>
		<category><![CDATA[ssl]]></category>
		<category><![CDATA[strict]]></category>
		<category><![CDATA[tls]]></category>
		<category><![CDATA[transport]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[webserver]]></category>

		<guid isPermaLink="false">http://kupschke.net/blog/?p=402</guid>
		<description><![CDATA[HTTP Strict Transport Security (HSTS) ist ein Verfahren, dass es einem Angreifer erschweren soll einen Nutzer von einer HTTPS gesicherten auf eine ungesicherte Seite der gleichen Domain umzuleiten. Solche Angriffe sind dann interessant, wenn man sich in dem gleichem WLAN-Netzwerk wie das Opfer befindet, um dann die Session Cookies abzugreifen und die Sitzung zu übernehmen [...]]]></description>
				<content:encoded><![CDATA[<p>HTTP Strict Transport Security (HSTS) ist ein Verfahren, dass es einem Angreifer erschweren soll einen Nutzer von einer HTTPS gesicherten auf eine ungesicherte Seite der <strong>gleichen Domain</strong> umzuleiten.</p>
<p>Solche Angriffe sind dann interessant, wenn man sich in dem gleichem WLAN-Netzwerk wie das Opfer befindet, um dann die Session Cookies abzugreifen und die Sitzung zu übernehmen (<a title="Firesheep" href="http://codebutler.github.com/firesheep/" target="_blank">Firesheep</a>).</p>
<p>Es muss sich allerdings nicht immer gleich um einen Angriff handeln, manchmal sind es sich auch schlicht Fehler in der Website/Web-Applikation welche den Benutzer auf einen ungeschützten Bereich umleiten.</p>
<p>Um solche Fehler und / oder Angriffe ins leere laufen zu lassen kann der Webserver dem Browser des Nutzers mitteilen, wie lange er diese Domain oder auch alle Subdomains nur noch HTTPS gesichert aufrufen darf.</p>
<p>Um HSTS im Apache zu aktivieren benötigt man erst das "Headers"-Modul, dieses aktiviert man mit diesem Befehl:<br />
<code><br />
a2enmod headers<br />
</code></p>
<p>Jetzt trägt man den HSTS-Header in jeden VirtualHost ein den man absichern möchte:</p>
<p>&lt;VirtualHost www.kupschke.net:443&gt;<br />
ServerAdmin dominik@kupschke.net<br />
DocumentRoot /var/www<br />
<strong> Header always set Strict-Transport-Security "max-age=31556926"</strong><br />
&lt;/VirtualHost&gt;<br />
<code></code></p>
<p>Mit dieser Anweisung sagen wir dem Browser, dass er die nächsten 365 Tage die Domain www.kupschke.net nur noch über HTTPS aufrufen soll.</p>
<p>Die entsprechende Dauer kann man über den Wert "max-age" einstellen, welcher die Zeit in Sekunden aufnimmt.</p>
<p>Falls man zusätzlich noch alle Subdomains mit absichern möchte erweitert man die Zeile wie folgt:<br />
Header always set Strict-Transport-Security "max-age=31556926<strong> includeSubDomains"</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2012/02/20/http-strict-transport-security-mit-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mehrere Git-Repositorys mit git gc komprimieren</title>
		<link>http://kupschke.net/2012/02/20/mehrere-git-repositorys-mit-git-gc-komprimieren/</link>
		<comments>http://kupschke.net/2012/02/20/mehrere-git-repositorys-mit-git-gc-komprimieren/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 13:21:37 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[Versionsverwaltung]]></category>
		<category><![CDATA[compress]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[komprimierung]]></category>
		<category><![CDATA[versionsverwaltung]]></category>

		<guid isPermaLink="false">http://kupschke.net/blog/?p=399</guid>
		<description><![CDATA[Um ein Git-Repository mit git gc zu komprimieren muss man immer in das Verzeichnis des Repositorys wechseln, sobald man eine größere Anzahl an Repositorys pflegt wird es nervig. Folgendes Script komprimiert alle Repositorys in einem bestimmten Verzeichnis und gibt die Größe des Ordners vor und nach der Komprimierung aus: Das Script lässt sich mit lokalen [...]]]></description>
				<content:encoded><![CDATA[<p>Um ein Git-Repository mit git gc zu komprimieren muss man immer in das Verzeichnis des Repositorys wechseln, sobald man eine größere Anzahl an Repositorys pflegt wird es nervig.</p>
<p>Folgendes Script komprimiert alle Repositorys in einem bestimmten Verzeichnis und gibt die Größe des Ordners vor und nach der Komprimierung aus:</p>
<pre class="brush: bash; title: ; notranslate">
#!/bin/bash
GIT_PATH=/data/git&lt;/code&gt;

echo 'Gesamtgröße vor der Komprimierung:'
du -sh ${GIT_PATH}

cd ${GIT_PATH}

for i in *
do

cd ${GIT_PATH}/$i
git gc

done

echo 'Gesamtgröße nach der Komprimierung:'
du -sh ${GIT_PATH}
</pre>
<p>Das Script lässt sich mit lokalen und bare Repositorys auf einem Server nutzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2012/02/20/mehrere-git-repositorys-mit-git-gc-komprimieren/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GRUB2 auf mdadm Raid installieren</title>
		<link>http://kupschke.net/2012/02/20/grub2-auf-mdadm-raid-installieren/</link>
		<comments>http://kupschke.net/2012/02/20/grub2-auf-mdadm-raid-installieren/#comments</comments>
		<pubDate>Mon, 20 Feb 2012 11:16:45 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Backup]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[mdadm]]></category>
		<category><![CDATA[Raid]]></category>
		<category><![CDATA[debian]]></category>
		<category><![CDATA[grub]]></category>
		<category><![CDATA[grub2]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[raid]]></category>

		<guid isPermaLink="false">http://kupschke.net/blog/?p=353</guid>
		<description><![CDATA[Vorsicht: Dieser Artikel bezieht sich auf ein Debian Testing System von Anfang 2012, ob und wie dieses Vorgehen auch unter anderen Linux Systemen zum Erfolg führt kann ich nicht sagen. Damit Debian Wheezy von jeder Festplatte des RAID Verbundes booten kann, muss folgende Zeile in der Datei "/etc/default/grub" auskommentiert werden: GRUB_TERMINAL=console Jetzt müssen alle Datenträger [...]]]></description>
				<content:encoded><![CDATA[<p><strong>Vorsicht: </strong>Dieser Artikel bezieht sich auf ein Debian Testing System von Anfang 2012, ob und wie dieses Vorgehen auch unter anderen Linux Systemen zum Erfolg führt kann ich nicht sagen.</p>
<p>Damit Debian Wheezy von jeder Festplatte des RAID Verbundes booten kann, muss folgende Zeile in der Datei "/etc/default/grub" auskommentiert werden:<br />
GRUB_TERMINAL=console</p>
<p>Jetzt müssen alle Datenträger für den Grub2 registriert werden:</p>
<p>grub-mkdevicemap -n</p>
<p>Zum Schluss aktualisiert man noch die Grub2 Konfiguration und installiert den Grub2 Bootloader in jede Festplatte des RAID-Verbunds:</p>
<p>update-grub</p>
<p>grub-install /dev/sda grub-install /dev/sdb</p>
<p>Jetzt kann das System von jeder Festplatte des RAIDs gestartet werden.</p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2012/02/20/grub2-auf-mdadm-raid-installieren/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>IPv4 und IPv6 Dual-Stack</title>
		<link>http://kupschke.net/2011/06/06/ipv4-und-ipv6-dual-stack/</link>
		<comments>http://kupschke.net/2011/06/06/ipv4-und-ipv6-dual-stack/#comments</comments>
		<pubDate>Mon, 06 Jun 2011 22:05:12 +0000</pubDate>
		<dc:creator>bommi</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Dovecot]]></category>
		<category><![CDATA[IPv6]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mail]]></category>
		<category><![CDATA[Netzwerk]]></category>
		<category><![CDATA[Postfix]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Webserver]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[dovecot]]></category>
		<category><![CDATA[dualstack]]></category>
		<category><![CDATA[inet-ng]]></category>
		<category><![CDATA[ipv4]]></category>
		<category><![CDATA[ipv6]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://kupschke.net/blog/?p=305</guid>
		<description><![CDATA[Wie viele von euch sicherlich mitbekommen haben, findet am 8. Juni der World IPv6 Day statt. Da mein Server-Hoster mir schon seit einiger Zeit 16 IPv6 Adressen zur Verfügung stellt, habe ich mich heute mit der Konfiguration einiger Dienste beschäftigt. Ich habe mir zum Ziel gesetzt, alle aus dem Internet erreichbaren Dienste über eine IPv4 [...]]]></description>
				<content:encoded><![CDATA[<p>Wie viele von euch sicherlich mitbekommen haben, findet am 8. Juni der <a href="http://www.worldipv6day.org/">World IPv6 Day</a> statt.<br />
Da mein <a href="http://netcup.de">Server-Hoster</a> mir schon seit einiger Zeit 16 IPv6 Adressen zur Verfügung stellt, habe ich mich heute mit der Konfiguration einiger Dienste beschäftigt.<br />
Ich habe mir zum Ziel gesetzt, alle aus dem Internet erreichbaren Dienste über eine IPv4 und IPv6 Dual-Stack Konfiguration anzubieten.<br />
Bei den eingesetzten Diensten handelt es sich um einen Apache2 Webserver, einen Postfix MTA und einen Dovecot IMAP Server.<br />
Zuerst sollte man zusätzliche DNS-Records für die entsprechenden Dienste anlegen, typischerweise kann man bestehende A-Records kopieren und das eine "A" durch "AAAA" ersetzen.</p>
<p><strong>1. Konfiguration des Apache2 Webservers</strong><br />
Ein Apache auf einem aktuellen Debian Squeeze ist von Haus aus in der Lage, einen VirtualHost mit einem über IPv6 auflösbaren DNS-Record auszuliefern. Probleme bekommt man allerdings wenn man einen SSL-VirtualHost für IPv4 und IPv6 nutzen möchte, als Lösung bleibt einem nur die Konfiguration des VirtualHosts zu kopieren und die IPv6 Adresse in den neuen VirtualHost einzutragen.</p>
<p>Die Lösung wird an diesem Beispiel verdeutlicht:<br />
Alter IPv4 SSL-VirtualHost (bleibt bestehen):</p>
<p style="padding-left: 30px;"><code>&lt;VirtualHost kupschke.net:443&gt;</code></p>
<p style="padding-left: 60px;"><code>ServerName kupschke.net<br />
SSLEngine on<br />
SSLCertificateFile /etc/apache2/ssl/ssl.crt<br />
SSLCertificateKeyFile /etc/apache2/ssl/ssl.key</code></p>
<p style="padding-left: 30px;">&lt;/VirtualHost&gt;</p>
<p>Neuer IPv6 SSL-VirtualHost:</p>
<p style="padding-left: 30px;"><code>&lt;VirtualHost </code>[2a01:4f8:121:1085::58c6:9011:1]:443<code>&gt;</code></p>
<p style="padding-left: 60px;"><code>ServerName kupschke.net<br />
SSLEngine on<br />
SSLCertificateFile /etc/apache2/ssl/ssl.crt<br />
SSLCertificateKeyFile /etc/apache2/ssl/ssl.key</code></p>
<p style="padding-left: 30px;"><code>&lt;/VirtualHost&gt;</code></p>
<p>Nach einem Neustart des Apache Webservers sollte es problemlos möglich sein, die Website geschützt mit SSL unter IPv4 und IPv6 aufzurufen.</p>
<p><strong>2. Konfiguration des Postfix</strong><br />
Einen Postfix auf den Betrieb von IPv4 und IPv6 umzustellen ist recht einfach, dazu wird <strong><em>/etc/postfix/main.cf</em></strong> mit einem Editor geöffnet und diese Zeile entsprechend erweitert:<br />
<code>inet_protocols = ipv4,ipv6</code></p>
<p><strong>3. Konfiguration des Dovecot IMAP / POP3 Servers:</strong><br />
Der Dovecot Daemon lässt sich sehr leicht an die neue Situation anpassen, dazu öffnet man die Konfigurationsdatei <strong><em>/etc/dovecot/dovecot.conf</em></strong> und sucht nach folgender Zeile:<br />
<code>listen = *</code><br />
diese wird dann wie folgt erweitert:<br />
<code>listen = *,[::]</code></p>
<p>Anhand der drei exemplarischen Dienste sieht man, dass eine Umstellung auf IPv6 aus Sicht der Softwarefeatures nicht unbedingt schwer ist.<br />
Ein Großteil der Fehler wird typischerweise durch fehlerhafte DNS-Records erzeugt, hier sollte man genügend Zeit für eine entsprechende Qualitätssicherung und Tests einplanen.</p>
]]></content:encoded>
			<wfw:commentRss>http://kupschke.net/2011/06/06/ipv4-und-ipv6-dual-stack/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
