Mehrere robots.txt für unterschiedliche Shops in Magento

Hallo Leute,

nutzt man die Multishop-Fähigkeit von Magento darf man mit allerhand Dingen jonglieren. So auch mit der robots.txt. Meine robots.txt sieht wie folgt aus:

User-agent: *
Disallow: /*.js$
Disallow: /*.css$
Disallow: /*.php$
Disallow: /customer/
Disallow: /review/
Disallow: checkout/
Disallow: /admin/
Disallow: /app/
Disallow: /skin/
Disallow: /var/
Disallow: /wishlist/
Sitemap: https://www.blubberladen.de/media/sitemap/blula/sitemap.xml

Da die robots.txt aber im root-Verzeichnis liegt und ich mehrere Shops mit einer Magento Instanz habe, müsste ich eigentlich zwei verschiedene robots.txt für beide Shops haben. Nichts leichter als das.

Mehrere robots.txt mittels .htaccess

Fügt in der .htaccess-Datei im root-Verzeichnis von Magento folgendes bei Zeile 116 ein:

############################################
## enable rewrites

    Options +FollowSymLinks
    RewriteEngine on

###########################################
## different robots.txt for both sites

    # Page1
    RewriteCond %{HTTP_HOST} blubberladen\.de$
    RewriteRule ^robots\.txt$ /robots-blula.txt [L]

    # Page 2
    RewriteCond %{HTTP_HOST} bier-kaufen\.de$
    RewriteRule ^robots\.txt$ /robots-bika.txt [L]

Bei mir sind es blubberladen.de und bier-kaufen.de (das www spielt dabei keine Rolle) die unterschieden werden sollen.  Wenn die robots.txt der entsprechenden Webseite aufgerufen wird, wird diese auf robots-bika.txt bzw. robots-blula.txt umgeleitet.

So einfach kann man mehrere robots.txt in einer Magentoinstallation einstellen.

Update 13.09.2014

Na ich bin ja einer, verbiete den Bots auf /media/ zu gehen und stell dort meine Sitemap zur Verfügung… Ist gefixt.

Brother MFC-9140CDN Maintanance Mode aktivieren

Hallo Leute,

habe vom Supportmitarbeiter von Brother heute einen Tipp bekommen wie man in den Maintanance Mode vom Gerät kommt. Achtung: Hier ist Vorsicht geboten, man kann hier ganz schön viel Unfug treiben. Passt auf was ihr macht und natürlich gilt: Alles passiert auf eure Verantwortung. Die meisten Methoden habe ich zwar an meinem Gerät getestet, aber eine Garantie, dass alles 100%ig klappt, kann ich leider nicht geben.

Den Maintanance-Mode erreichen

  • Das Gerät muss eingeschaltet sein.
  • Drücken Sie am Display einen der Buttons FAX/ Kopierer/ Scanner
  • Nun leuchtet der Home- Button auf.
  • Drücken Sie nun den Home- Button solange bis vier Felder erscheinen.
  • Drücken Sie nun das letzte, leere Feld solange bis ein Tastenfeld angezeigt wird.
  • Geben Sie nun die Tasten *, 2, 8, 6, 4 ein.
  • Gerät geht in den Maintenance Mode
  • 99 eintippen um den Maintenance Mode zu verlassen

Mögliche Befehle

Hier folgt nun eine Liste mit möglichen Befehlen und Funktionen die geändert werden können. Wer was neues findet, einfach in den Kommentar schreiben, dann nehme ich es in die Liste mit auf.

Statusausdruck mit allen Details

  • 77 eintippen
  • Gerät mach einen Statusausdruck

Menüsprache des Brother MFC-9140CDN ändern

Die Menüsprache kann über den Maintanance-Mode geändert werden indem man den Country-Code ändert. Es werden dadurch wohl auch weitere Einstellungen für das Land geändert. So zum Beispiel die FAX-Einstellungen. Bitte testet nach der Änderung den Funktionsumfang eures Gerätes. Um den Country-Code zu änderngeht man wie folgt vor:

  • 74 über die Tastatur auf dem LCD eintippen
  • Oben Links erscheint nun eine nummer mit dem aktuellen Country-Code des Gerätes
  • Countrycode über Tastatur auf dem LCD ändern
  • Mit „Mono Start“ (Taste rechts oben) bestätigen
  • Maintanance Mode mit 99 verlassen

Die mir bekannten Country-Codes habe ich nicht alle getestet, daher erfolgt wie immer die Änderung auf eigenen Risiko. Wer weitere Country-Codes hat, kann Sie gerne im Kommentar hinterlassen, dann werde ich sie in dieser Liste mit aufnehmen. Bei Einträgen mit einer weiteren Nummer in der Klammer bin ich leider nicht sicher (die Nummern sind aus den Untiefen des Internet 😉 ). Wenn ihr eine Nummer bestätigen könnt, einfach kurz in den Kommentar schreiben.

  • Schweiz: 0310
  • Italien: 0316
  • Spanien: 0365 (0315)
  • Portugal: 0365 (0318)
  • Frankreich: 0355 (0305)
  • Belgien: 0355 (0308)
  • Niederlande: 0355 (0309)
  • Polen: 0388 (0339)
  • Großbritannien: 0304 (Habe ich selbst getestet und kann den Code Bestätigen)
  • Deutschland: 0303 (Habe ich selbst getestet und kann den Code Bestätigen)

Maintenance Mode verlassen

  • 99 eintippen um den Maintenance Mode zu verlassen

Die genannten Befehle wurden mir von einem Service-Techniker gegeben. Ich habe diese auch selbst ausprobiert. Klappt also super. Hat vielleicht jemand noch weitere Befehle? Schreibt sie einfach in den Kommentar und sagt mir was man damit machen kann. Vielleicht hilft es ja dem Einen oder Anderen.

Weitere Befehle

Leider habe ich selbst das Gerät nicht mehr, und kann die Befehle nicht mehr testen, aber in den Kommentaren sind interessante neue Funktionen aufgetaucht. Es lohnt sich hier weiter zu lesen.

Brother MFC-9140CDN verknittertes Papier und Druckfehler

Hallo Leute,

heute nur eine kurze Fehlermeldung und wie die Lösung dazu ist.

Das Problem

Seit einiger Zeit hat mein Drucker das Papier nur noch verknittert ausgegeben. Dabei handelte es sich um einen ca 2-4 cm großen Streifen. Das Knittermuster hat sich dabei wiederholt.

Brother MFC-9140CDN Druckfehler auf einem schwarzen Papier

Brother MFC-9140CDN: Der Scann eines Ausdrucks. Druckfehler bzw. Knitterstellen sind als Weiße Kanten erkennbar.

Brother MFC-9140CDN Verknittertes Papier

Brother MFC-9140CDN Verknittertes Papier nach ausdruck

Die Lösung

Nach ellenlanger Diskussion mit dem Brother Support per Email (das wünsche ich keinem). Sind diese zum Schluss gekommen, dass ein Techniker vorbei kommt und die Heizung austauscht. Nachdem er mir diese Heizeinheit gezeigt hab, weiß ich auch warum.

MFC-9140CDN Defekte Heizeinheit

MFC-9140CDN Defekte Heizeinheit

MFC-9140CDN Defekte Heizeinheit

MFC-9140CDN Defekte Heizeinheit

Auf Nachfrage beim Techniker, ob sowas wohl öfter vorkomme, hat mir dieser erzählt, dass sie bei den neuen Modellen im letzten Jahr jetzt schon mehr Heizeinheiten getauscht haben als die letzten 3 Jahre vorher bei den alten Geräten. Es wird wohl eine neue Beschichtung eingesetzt, die sich von der schwarzen beheizten Rolle (schwarz unten) auf die rote Anpressrolle ablöst. Dadurch kommt es zu Druckfehlern.

Wer also die selben Symptome hat, sollte auf einen wechsel der Heizung bestehen. Bei mir hats geholfen. Mal schauen wie lang die neue jetzt hält. Diese hat angeblich die bessere (alte) Beschichtung.

Update 29.12.2014: Ausgetauschte Heizeinheit nun auch defekt

Wuhu. Es hat nicht mal 3 Monate gedauert, da war auch die neue Heizeinheit defekt. Wiederum berichtete mir die Frau, die mir die Heizung dieses mal in Rekordzeit ausbaute, dass sie gerade eben auch noch bei einem anderen Kunden war, mit dem selben Problem.

Danke nochmal an Nenenene aus der Kommentarsektion: Durch deinen Tipp ging es mit dem Brother-Support diesmal schneller.

Ich kann für den Brother MFC-9140CDN definitiv KEINE KAUFEMPFEHLUNG aussprechen. Das nächste mal kommt mir ein echter Bürodrucker ins Haus.

Hier noch ein paar Bilder mit Details vom Fehler:

IMG_20150110_102252 IMG_20150110_102243

 

Update 19.06.2015: Erneut ausgetauschte Heizeinheit nun wieder defekt

Juhu endlich ist es so weit: Die Heizeinheit ist jetzt zum 3. mal kaputt gegangen, und dieses mal richtig krass. Aber endlich! 3x das selbe Teil innerhalb des Gewährleistungszeitraums defekt –> Ich krieg meinen Kaufpreis zurück. Juhu! Endlich ein neuer Drucker.

Übrigens hat der Hersteller keine Probleme gemacht. Der Hersteller verlangt zwar, die Tonerkartuschen mit einzuschicken, aber gerade wenn ihr Alternative Toner (keine Brother Toner) benutzt, solltet ihr das unterlassen und diese nicht mitschicken. Es lohnt sich die original Kartuschen vom Anfang auf zu heben.

Netzteil (DPS-386AP-1) für HP Designjet 5500ps reparieren

Halli Leute,

mit diesem Beitrag möchte ich kurz zeigen, wie ich den Plotter HP Designjet 5500ps mit dem Fehler „Boot Failed – Error: 1f50007 Hard Disk Failure“ reparieren konnte. Ich hoffe ich kann mit diesem Beitrag dem einen oder anderen Bastler weiterhelfen.

Ich möchte an dieser Stelle anmerken: Bei der Reparatur musste ich an Teilen mit Netzspannung arbeiten. Achtung! Hier ist höchste Vorsicht geboten. Bitte nur machen, wenn ihr mehr oder weniger Ahnung habt, was zu tun ist!

Das Problem

Als ich den Plotter HP Designjet 5500ps in die Finger bekommen habe, hat dieser folgenden Fehler angezeigt:

Boot Failed – Error: 1f50007 Hard Disk Failure

Fehler Designjet 5500ps

Fehler Designjet 5500ps: Boot Failed – Error: 1f50007 Hard Disk Failure

Nach ein wenig Recherche im Internet, konnte ich folgende Fehlerquellen finden:

  • Festplatte defekt: Dies kann man ganz einfach prüfen, indem man die Festplatte austauscht. Das System sollte dann die neue Festplatte wieder formatieren und das System sollte starten.
  • Netzteil defekt: Man muss den Stromanschluss für die Festplatte überprüfen. Es sollten jeweils die Spannungen 5V und 12V anliegen.
  • Platine defekt: Wenn das der Fall ist, lohnt es sich wohl nicht mehr, den Drucker zu reparieren.

Als ich die Punkte bei dem vorliegenden Plotter geprüft habe, hat sich herausgestellt, dass zwar 5V an der Festplatte ankommen aber die 12V komplett fehlen. Alles klar: Netzteil defekt.

Das Netzteil

Delta Electronics Netzteil: DPS 386AP-1B

Delta Electronics Netzteil: DPS 386AP-1B

Das Netzteil ist ein Delta Electronics DPS 386AP-1B. Lasst euch nicht von dem „PC-Anschlussstecker“ täuschen. Das Netzteil bringt komplett andere Spannungen und kann nicht einfach durch ein normales Computernetzteil ersetzt werden. Folgende Spannungen werden durch das 300W Netzteil geliefert:

  • +3,3V mit 6,25A
  • +5V mit 1A
  • +12V mit 0,5A
  • +24V mit 4A
  • +36V mit 4,8 A
  • -15V mit 0,025A

Beim Analysieren des Steckers konnte ich folgende Steckerbelegung feststellen:

Steckerbelegung DPS 386AP-1B

Steckerbelegung DPS 386AP-1B

Zusammen mit einem Freund habe ich das Netzteil komplett durchgeschaut. Die Spannungen 36V, 24V und 12V kommen nicht mehr am Stecker an. Die restlichen Spannungen werden noch sauber erstellt. Wir haben zwar das Netzteil untersucht, konnten aber keinen Fehler feststellen.

Die Lösung

Achtung, jetzt wirds schmutzig. Natürlich könnte man das Netzteil einfach austauschen und gut ist (Achtung: Es gibt zwei verschiedene Versionen, achtet darauf, wieder ein 300W Netzteil zu bekommen). Das Netzteil ist aber sehr teuer und man bekommt diese nur gebraucht.

3 Netzteile ersetzen die fehlende Spannung

3 Netzteile ersetzen die fehlende Spannung

Statt das komplette Netzteil zu ersetzen, habe ich in dieser Lösung 3 Netzteile eingebaut die die Spannungen mit der entsprechenden Stromstärke liefern. Es ist alles andere als schön, aber die Lösung ist billig und man muss nur ein wenig basteln. Die Netzteile habe ich bei folgendem Verkäufer recht günstig bekommen:

Die nötigen Stromstärken für die Spannungen sind auf der Leiterplatine unten rechts aufgedruckt. Leider haben zwei Netzteile innen keinen Platz gefunden. Die Lösung sieht dann wie folgt aus:

Das reparierte Netzteil

Das reparierte Netzteil

Das kleine 12V-Netzteil kommt nach innen, das 24V und 36V kommen außen drauf. Alle Stromführenden Leitungen sind isoliert und/oder abgedeckt.

Bitte beachtet: Die Reparatur wurde von mir privat durchgeführt. Ich bin mir sicher, das es nicht 100% korrekt installiert ist. Auf dem Bild fehlen auch die Abdeckungen für die äußeren Netzteile. Diese sind natürlich nochmal abgedeckt, damit man nicht an die Stromführenden Leitungen kommt. Bitte nur nachmachen, wenn man weiß, was man macht.

Vollständige URLs in Dataflow exportierten CSV-Dateien von Magento

Hallo Leute,

Preisvergleichsportale sind ein gutes Mittel um kontrolliert Kunden auf seinen Onlineshop los zu lassen. Dazu nötig ist aber eine CSV-Datei, die alle nötigen Daten enthält. Dies kann man erreichen, indem man sich entweder teure Plugins kauft oder die etwas komplizierte Funktion von Magento nutzt. Es gibt dabei allerdings ein kleines Problem, welches ich mit diesem Beitrag lösen möchte.

Das Problem

Das Problem auf welches ich beim Export von Produktdaten in eine CSV-Datei gestoßen bin: Wenn man die URL zu Produktbildern in der exportierten CSV-Datei haben möchte, wird nicht die vollständige URL angezeigt, also:

p/r/produkt.jpg

statt

https://website.de/media/catalog/product/p/r/produkt.jpg

Die Lösung

Die Lösungsidee klingt simpel: Ich möchte einen Prefix-String vor die Ausgabe schreiben. Klingt einfach, aber benötigt ein wenig Arbeit am Quelltext.

Zunächst muss eine eigenes MapperModel geschrieben werden. Erstellt dazu eine Datei und die fehlenden Ordner in

app/code/local/Mage/Dataflow/Model/Convert/Mapper/MyColumn.php

mit folgendem Inhalt:

<?php
class Mage_Dataflow_Model_Convert_Mapper_MyColumn extends Mage_Dataflow_Model_Convert_Mapper_Column
{
    public function map()
    {
        $batchModel  = $this->getBatchModel();
        $batchExport = $this->getBatchExportModel();

        $batchExportIds = $batchExport
            ->setBatchId($this->getBatchModel()->getId())
            ->getIdCollection();

        $onlySpecified = (bool)$this->getVar('_only_specified') === true;

        if (!$onlySpecified) {
            foreach ($batchExportIds as $batchExportId) {
                $batchExport->load($batchExportId);
                $batchModel->parseFieldList($batchExport->getBatchData());
            }

            return $this;
        }

        if ($this->getVar('map') && is_array($this->getVar('map'))) {
            $attributesToSelect = $this->getVar('map');
        }
        else {
            $attributesToSelect = array();
        }
        if ($this->getVar('prepend') && is_array($this->getVar('prepend'))) {
                $prepend = $this->getVar('prepend');
        } else {
                $prepend = array();
        }
        if (!$attributesToSelect) {
            $this->getBatchExportModel()
                ->setBatchId($this->getBatchModel()->getId())
                ->deleteCollection();

            throw new Exception(Mage::helper('dataflow')->__('Error in field mapping: field list for mapping is not defined.'));
        }

        foreach ($batchExportIds as $batchExportId) {
            $batchExport = $this->getBatchExportModel()->load($batchExportId);
            $row = $batchExport->getBatchData();

            $newRow = array();
            foreach ($attributesToSelect as $field => $mapField) {
                $prepend_2 = isset($prepend[$field]) ? $prepend[$field] : '';
                $newRow[$mapField] = isset($row[$field]) ? $prepend_2 . $row[$field] : null;
            }

            $batchExport->setBatchData($newRow)
                ->setStatus(2)
                ->save();
            $this->getBatchModel()->parseFieldList($batchExport->getBatchData());
        }

        return $this;
    }
}

Es handelt sich dabei um eine Kopie der Funktion map() aus der Datei /app/code/core/Mage/Dataflow/Model/Convert/Mapper/Column.php mit kleineren Anpassungen in Zeile 30-34 und Zeile 49-50. Im Grunde haben wir uns jetzt eine eigene Funktion geschaffen, der wir eine weitere Variable „prepend“ übergeben können, welche dann zu den Werten einer bestimmten Spalte hinzugefügt wird.

Nun müssen wir noch die Datei

app/code/core/Mage/Dataflow/Model/Convert/Profile/Collection.php

in das Verzeichnis

app/code/local/Mage/Dataflow/Model/Convert/Profile/Collection.php

kopieren und eine Zeile im Code anpassen (Achtung dazu muss ein weiterer Ordner hinzugefügt werden). Sucht nach folgender Passage im Code (müsste bei Zeile 165 sein):

 /** @var $varNode Varien_Simplexml_Element */
            foreach ($actionNode->var as $key => $varNode) {
                if ($varNode['name'] == 'map') {
                    $mapData = array();
                    foreach ($varNode->map as $mapNode) {
                        $mapData[(string)$mapNode['name']] = (string)$mapNode;
                    }
                    $container->setVar((string)$varNode['name'], $mapData);
                }  else {

und erweitert die if-Abfrage wie folgt:

 /** @var $varNode Varien_Simplexml_Element */
            foreach ($actionNode->var as $key => $varNode) {
                if ($varNode['name'] == 'map' || $varNode['name'] == 'prepend') {
                    $mapData = array();
                    foreach ($varNode->map as $mapNode) {
                        $mapData[(string)$mapNode['name']] = (string)$mapNode;
                    }
                    $container->setVar((string)$varNode['name'], $mapData);
                }  else {

Dies ist nötig, damit die Variable mit dem Namen „prepend“ auch aufgelöst wird.

Funktionsweise

Die Funktionsweise kann man am besten an einem Beispiel erklären. Ich habe dazu in der Administrationsoberfläche von Magento über System -> Import/Export -> Dataflow – Erweiterte Profile ein Profil angelegt.

2014-07-17 09_53_02-Erweiterte wiederkehrende Leistungen _ Import und Export _ System _ Magento Admi

 

Das erstellte Beispiel soll SKU (Artikelnummer), Artikelname und das Produktfoto in eine CSV exportieren.

<action type="catalog/convert_adapter_product" method="load">
	<var name="store"><![CDATA[2]]></var>
	<var name="filter/qty/from"><![CDATA[1]]></var>
	<var name="filter/qty/to"><![CDATA[999999999]]></var>
	<var name="filter/status"><![CDATA[1]]></var>
</action>

<action type="catalog/convert_parser_product" method="unparse">
	<var name="store"><![CDATA[2]]></var>
</action>

<action type="dataflow/convert_mapper_myColumn" method="map">
	<var name="map">
		<map name="sku"><![CDATA[Artikelnummer]]></map>
		<map name="name"><![CDATA[Artikelbezeichnung]]></map>
		<map name="image"><![CDATA[image]]></map>
	</var>
	<var name="prepend">
		<map name="image"><![CDATA[https://www.bier-kaufen.de/media/catalog/product]]></map>
	</var>
	<var name="_only_specified">true</var>
</action>

<action type="dataflow/convert_parser_csv" method="unparse">
	<var name="delimiter"><![CDATA[,]]></var>
	<var name="enclose"><![CDATA["]]></var>
	<var name="fieldnames">true</var>
</action>

<action type="dataflow/convert_adapter_io" method="save">
	<var name="type">file</var>
	<var name="path">var/export/bika/</var>
	<var name="filename"><![CDATA[products.csv]]></var>
</action>

Da vielleicht nicht jeder schon mit Dataflow-XML-Dateien gearbeitet hat, möchte ich dieses kleine Beispiel zerlegen und erklären. Die XML teilt sich in 5 Bereiche auf:

<action type="catalog/convert_adapter_product" method="load">
	<var name="store"><![CDATA[2]]></var>
	<var name="filter/qty/from"><![CDATA[1]]></var>
	<var name="filter/qty/to"><![CDATA[999999999]]></var>
	<var name="filter/status"><![CDATA[1]]></var>
</action>

<action type="catalog/convert_parser_product" method="unparse">
	<var name="store"><![CDATA[2]]></var>
</action>

In diesem ersten Bereich werden allgemeine Artikelfilter festgelegt. Als z.B.:

  • Es soll store=2 (der Shop den ich verwenden möchte) verwendet werden
  • Es sollen nur Artikel angezeigt werden, mit einem Lagerbestand von 1 bis 999999999
  • Es sollen nur Artikel angezeigt werden, deren status=1 (aktiv) ist.
<action type="dataflow/convert_mapper_myColumn" method="map">
	<var name="map">
		<map name="sku"><![CDATA[Artikelnummer]]></map>
		<map name="name"><![CDATA[Artikelbezeichnung]]></map>
		<map name="image"><![CDATA[BildURL]]></map>
	</var>
	<var name="prepend">
		<map name="image"><![CDATA[https://www.bier-kaufen.de/media/catalog/product]]></map>
	</var>
	<var name="_only_specified">true</var>
</action>

Hier ist nun der interessante Bereich, weswegen der ganze Aufwand getrieben wird. Die Map-Funktion mapped das Feld in der Datenbank auf das Feld in der CSV-Datei. In diesem Beispiel also:

  • Datenbankfeld  „sku“ wird auf die Spalte „Artikelnummer“ in der CSV gemapped
  • Datenbankfeld „name“ wird auf die Spalte „Artikelbezeichnung“ in der CSV gemapped
  • Datenbankfeld „image“ wird auf die Spalte „BildURL“ in der CSV gemapped

Bitte beachtet, dass hier unser eigener Mapper type=“dataflow/convert_mapper_myColumn“ statt dem normalen type=“dataflow/convert_mapper_Column“ verwendet wird.

In der zweiten Variable „prepend“ legen wir dann fest, dass das Feld „image“ noch zusätzlich den Prefix „https://www.bier-kaufen.de/media/catalog/product“ vorangestellt werden soll. Dies kann natürlich mit jedem anderen Feld auch gemacht werden.

<action type="dataflow/convert_parser_csv" method="unparse">
	<var name="delimiter"><![CDATA[,]]></var>
	<var name="enclose"><![CDATA["]]></var>
	<var name="fieldnames">true</var>
</action>

In diesem Teil der XML wird festgelegt wie die CSV-Datei aussehen soll. Also was als Separator verwendet werden soll, oder dass die erste Zeile die Spaltenbezeichnung sein soll.

<action type="dataflow/convert_adapter_io" method="save">
	<var name="type">file</var>
	<var name="path">var/export/bika/</var>
	<var name="filename"><![CDATA[products.csv]]></var>
</action>

Am Schluss legen wir dann nur noch fest, wo die Datei gespeichert wird. Wenn wir nun den Export starten, fällt eine CSV-Datei mit dem gewünschten Inhalt und einer kompletten URL beim Bild heraus.

Fazit

Ich finde es schade, dass Magento eine solche Funktionalität nicht schon von Haus aus mitbringt. Bei der Recherche einer Lösung bin ich auf viele Betroffene gestoßen. Die hier beschriebene Umsetzung ist leider auch nicht 100%-ig schön, weil wir die „Collection.php“ komplett mit einer Eigenen ersetzen. Wenn hier jemand bessere Lösungen hat, immer her damit :). Man sollte bei jedem Update von Magento zur Sicherheit prüfen, ob noch alles so funktioniert, wie gewollt.

Mir haben bei der Lösungsfindung zwei Blog- bzw. Stackoverflow-Beiträge geholfen:

  • http://stackoverflow.com/questions/21789380/magento-advanced-profiles-export-prepend-url-to-image-path um zu verstehen was geändert werden muss
  • http://www.magentocommerce.com/knowledge-base/entry/introduction-to-magento-dataflow um zu verstehen wie Dataflow arbeitet

Ich würde mich über Feedback sehr freuen 🙂 und hoffe dem einen oder anderen weitergeholfen zu haben.

Wie wehre ich mich gegen Werbepost am Beispiel kaffee-partner.de

Halli Leute,

wenn man ein Unternehmen gründet kommt man schnell in diverse Verzeichnisse und kann sich bald vor Werbepost nicht mehr retten. Aber auch privat kommt oft viel Unerwünschtes. Ich möchte euch einige Mittel vorstellen, wie ihr euch aktiv dagegen wehren könnt. Das Ganze geht natürlich am Besten an einem Beispiel und ich habe hierzu die besonders hartnäckige Firma „Kaffee Partner“ gewählt. Zunächst aber erst mal ein paar allgemeine Punkte.

Wie kann ich mich gegen unverwünschte Werbepost wehren?

1. Eintragen in die Robinson-Liste

Die Robinsonliste ist eine Schutzliste, in die sich jeder eintragen kann. Seriöse Firmen prüfen, bevor sie Werbepost verschicken, ob die Adresse hier eingetragen ist. Ist dies der Fall, wird die Werbepost nicht versandt. Natürlich halten sich nicht alle Firmen an die Liste, aber die Werbeflut wird enorm verkleinert.

Der Eintrag in die Robinsonliste geht über die Website: www.robinsonliste.de

2. Aktiv die Weiternutzung der Daten verbieten und die Löschung von Personenbezogenen Daten verlangen

Die Werbepost einfach weg zu werfen ist der falsche Weg. Klar geht es schnell, aber wenn man sich nicht wehrt, wird die Werbeflut nur größer und größer. Jeder deutsche Staatsbürger hat das Recht, die Lösung seiner Daten zu verlangen und darf natürlich auch die weitere Nutzung untersagen. Hierzu gibt es verschiedene Blankos im Internet. Ich habe mich an Folgendem orientiert:

Sehr geehrte Damen und Herren,

in Ihrer Kundendatei sind personenbezogene Daten meine Person betreffend gespeichert. Für den Fall einer Weiterveräußerung dieser Daten widerrufe ich meine Einwilligung in die Nutzung, Speicherung und Weitergabe und fordere Sie auf, gemäß § 35 Bundesdatenschutzgesetz (BDSG) alle Daten, die Sie von mir gespeichert haben, unverzüglich zu löschen.

Ich bitte Sie, dafür zu sorgen, dass die Löschung auch von den Stellen durchgeführt wird, denen Sie meine Daten übermittelt haben, insbesondere auch von Unternehmen, die Daten in Ihrem Auftrag verarbeiten.

Bitte bestätigen Sie mir kurz die Berücksichtigung meines Widerrufs und den umfänglichen Vollzug der Datenlöschung.I ch setze Ihnen zur Erfüllung meiner Forderungen eine Frist bis zum [Eine Frist von 2 Wochen ab Zusendung der Unterlassungserkläurng]. Sollten Sie dieses Schreiben ignorieren, werde ich mich an den zuständigen Landesdatenschutzbeauftragten wenden. Außerdem behalte ich mir weitere rechtliche Schritte vor.

Diesen Text in euren Briefkopf packen, unterschreiben und per Post oder Fax an die Firma senden. Beides sind rechtssichere Wege und beim Fax habt ihr sogar noch den Vorteil einer Sende-/Empfangsbestätigung.

3. Selbst Daten sammeln

Für die spätere Beweisführung ist es besonders wichtig, dass ihr alle Schreiben und Briefumschläge aufhebt. Also, das Schreiben an sich und sogar das Kuvert in dem es euch zugesandt wurde. Auch das Schreiben, das ihr an die Firma sendet ist wichtig, sowie jeglicher sonstige Schriftverkehr.

Ihr werdet euch jetzt fragen, warum man diesen Aufwand treiben muss, aber wenn gar nichts mehr hilft kann man sich auch an den Datenschutzbeauftragten wenden oder weitere rechtliche Schritte einleiten und dann ist der Schriftwechsel Gold wert.

4. Den Landesbeauftragten für Datenschutz einschalten

Wenn alles nichts hilft und ihr trotz Unterlassungserklärung weiter Post erhaltet, empfehle ich euch den „sanften rechtlichen Weg“. Wer hätte es geglaubt, aber jedes Bundesland hat einen eigenen Beauftragten für Datenschutz. Die sind genau für sowas zuständig und der Ablauf ist ziemlich einfach. Sucht euch zunächst den richtigen Datenschutzbeauftragten raus. Es ist immer der Beauftragte des Bundeslandes zuständig, in welchem die Werbefirma sitzt (im Fall Kaffee-Partner, Osnabrück z.B. Niedersachsen). Eine Liste der Beauftragten ist hier zu finden: https://www.datenschutz-bayern.de/ (Menüpunkt „Zuständigkeiten“). Dann einfach eine Email mit einer kurzen Fallbeschreibung an die richtige Stelle senden und fertig ist das Ganze.

Ich habe leider noch keine Erfahrungen, in wiefern man hier dann Antwort erhält, was unternommen wurde oder was man noch machen kann. Ich werde euch aber im aktuellen Fall Kaffee Partner auf dem laufenden halten.

Der Fall Kaffee-Partner

Ich habe euch nun ein paar Tricks gezeigt wie man sich gegen lästige Werbefirmen wehren kann. Ein besonders hartnäckiger Fall ist Kaffee-Partner.de und ich möchte euch kurz zeigen, was ich unternommen habe.

Kaffee-Partner vertreibt Vollautomaten, Leihverträge und Leasingzeugsel rund um Kaffee und sitzt in Osnabrück. Da ich keinen Kaffee trinke, ist das für mich eher uninteressante Werbung und ich habe der Zustellung zu 100% nicht zugesagt.

14.12.2013 – Erste Werbebotschaft

Kaffee Partner unerwünschte Werbung Kaffee Partner unerwünschte Werbung

Ich habe von „Kaffee Partner“ per Post direkt an mich einen Werbeflyer
erhalten. Die Adresse war „Timo Schindler, Hard- und Softwarehandel…“. Ich habe diesen Firmennamen lediglich bei der Gewerbeanmeldung verwendet. Die Daten sind offenbar
aus dem Register entnommen worden. Die Werbung ist total toll personalisiert und ich fühle mich natürlich sofort angesprochen und bin interessiert….. nicht.

15.12.2013 – Aufforderung zur Löschung meiner Daten

Schreiben für Kaffee Partner

Ich habe mir schon ein hübsches Blanko zurecht gelegt und investiere gerne das Porto. Bei den meisten Firmen klappt das super und die lästige Werbung war einmal. Gesagt getan, die Firma Kaffee-Partner hat Post von mir erhalten und wurde über meinen Widerruf der Einwilligung (die ich nie gegeben habe) und Löschung meiner personenbezogenen Daten informiert bzw. aufgefordert. Der Text stammt von einem Blanko und darf gerne von jedem weiter verwendet werden.

23.05.2014 – Zweite Werbebotschaft

Kaffee Partner unerwünschte Werbung Kaffee Partner unerwünschte Werbung

 

kaffee-partner6

Wieder habe ich Post von „Kaffee Partner“ erhalten. Aber hey, sie haben diesmal immerhin hübsches Hochglanzpapier verwendet. Am Schreiben selbst hat sich aber nichts geändert. Ich hab euch auch mal den Kuvert eingescannt. „Infopost“ ist aber ein schöner Name für Spam… Offenbar hat also meine Aufforderung nichts gebracht.

26.05.2014 – Landesdatenschutzbeauftragter ist eingeschaltet

Nach einem sehr netten Telefonat mit dem bayrischen und niedersächsischen Leuten für Datenschutz habe ich, wie oben beschreiben, eine Email mit allen Daten an die richtige Stelle geschickt. Nun heißt es mal abwarten, was weiter passiert. Ich werde euch mit Updates auf dem Laufenden halten.

Fazit – Bringt das überhaupt was?

Ich praktiziere diese „Techniken“ nun schon seit etwa einem Jahr und muss sagen, das sich die Flut der Werbepost deutlich verringert hat. Lediglich ein paar hartnäckige Fälle sind dabei. Von manchen erhält man sogar sehr nette „Entschuldigungsschreiben“ und wird informiert, das sowas ja natürlich nicht mehr passiert. Hier ein Beispiel von Daimler:

daimler1 daimler2Der Fall kaffee-partner.de zeigt aber auch, das es einige lästige und nervige Amateur-Vereine gibt, die sich nicht an geltendes Recht halten. Diesen kann man nur auf den Schlips treten, in dem man sich wehrt. In diesem Sinne: Happy Brief-schreibing ;).

 

Einzelne Owncloud Ordner können nicht mehr erreicht werden

Halli Leute,

hier eine kleiner Kurzbeitrag. Ich hatte folgendes Problem:

Ich habe zwei Ownclouds auf einem Server laufen. Die eine Owncloud ist über „Externer Speicher“ in der Anderen eingebunden. Nun hatte ich das Problem, das plötzlich das Sync-Tool im Windows nicht mehr weiter gesynct hat, bevor ich nicht den externen Speicher (also die zweite Owncloud) ausgebunden hab. Im Onlinetool tauchte die Ordner zwar auf, aber bei „Größe“ stand nur „?“ und man konnte nicht mehr in die Ordner gelangen.

Die Lösung des ganzen war eine Reindexierung der Daten:

php console.php files:scan --all

Durch diesen Befehl werden alle Daten neu indexiert. Leider sind aber meine Ownclouds etwas größer, weshalb das PHP-Script so viel RAM verschlungen hat, das das Skript irgendwann gekillt wurde. Die zweite Lösung:

  1. Auf die Datenbank einloggen
  2. In der jeweiligen Datenbank folgenden Befehl ausführen: TRUNCATE oc_filecache;

Dadurch wird der Datei-Cache in der Datenbank geleert und Owncloud baut diesen selbstständig wieder auf.

Dadurch konnte ich die Dateien wieder erreichen. Übrigens waren die Fehler die geworfen wurden:

  • Im Synctool (nachdem ich den Log aktiviert hatte):  ** error Strings:  („Interne Fehlernummer 1060 aufgetreten. 500 Internal Server Error“)
  • Online im Fehlerprotokoll: Resource not found.

Das Log im Synctool habe ich mit dieser Anleitung aktiviert: Wie aktiviere ich das Logging beim Owncloud Sync-Client

Ich hoffe mal ich kann dem einen oder anderen weiterhelfen.

Dovecot 2 mit Postfix auf Debian 7 Wheezy installieren und konfigurieren

Dies ist der Dritte Teil der Postfix Konfiguration. In den ersten zwei Teilen habe ich gezeigt wie man Postfix auf Debian 7 Wheezy mit TLS und IPv6 installiert und dazu den Spamassassin mit Postfix konfiguriert. Nun möchte ich zeigen wie man lokale Emailpostfächer erstellt (also keine reinen Weiterleitungen) und wie man mit IMAP bzw. SMTP darauf zugreifen kann.

Dovecot installieren

In diesem Beispiel wollen wir vollkommen auf POP3 verzichten, daher installieren wir nur die nötigen Pakete für IMAP.

aptitude install dovecot-core dovecot-imapd

Postfix informieren, das Dovecot installiert wird

Wir müssen Postfix noch mitteilen das wir nun Dovecot verwenden. Folgendes muss in der Datei /etc/postfix/main.cf geändert werden:

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
home_mailbox = Maildir/

Mit dieser Konfiguration werden die Emails im Homeverzeichnis des jeweiligen lokalen Benutzers abgelegt. Da ich die Emailadressen virtuell mappe (siehe Postfix installieren und konfigurieren) muss ich Postfix auch mitteilen, an welches Lokale Konto ausgeliefert werden soll. Ein Beispiel könnte wie folgt aussehen:

#################################
#                               #
#         examia.de             #
#                               #
#################################
examia.de                                        DOMAIN
webmaster@examia.de                             mail@examia.de
hostmaster@examia.de                            mail@examia.de
postmaster@examia.de                            mail@examia.de
admin@examia.de                                 mail@examia.de
mail@examia.de                                  mail_examia.de@localhost

Mit diesem Setting werden webmaster@examia.de, hostmaster@examia.de, postmaster@examia.de admin@examia.de auf mail@examia.de umgeleitet und mail@examia.de wird an das lokale Emailkonto des Benutzers mail_examia.de zugestellt.

Dovecot konfigurieren

Nun folgt noch die Konfiguration von Dovecot, ohne die man keinen Spaß haben wird. Die Konfiguration ist in mehrere Dateien aufgeteilt.

TLS einrichten bzw. Verbindungssicherheit festlegen

Zunächst muss die Datei /etc/dovecot/conf.d/10-ssl.conf bearbeitet werden.

# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
ssl_cert =

In dieser Konfiguration verwende ich die selben Zertifikate wie bereits auch schon bei postfix. Wie diese Zertifikate erstellt werden können, siehe <a title="Postfix mit TLS und IPv6 auf Debian 7 Wheezy installieren und konfigurieren" href="https://www.timoschindler.de/postfix-mit-tls-und-ipv6-auf-debian-7-wheezy-installieren-und-konfigurieren/">Postfix installieren und einrichten</a>.

Anschließend ist die Datei /etc/dovecot/conf.d/10-auth.conf zu bearbeiten.
[shell]
# Disable LOGIN command and all other plaintext authentications unless
# SSL/TLS is used (LOGINDISABLED capability). Note that if the remote IP
# matches the local IP (ie. you're connecting from the same computer), the
# connection is considered secure and plaintext authentication is allowed.
disable_plaintext_auth = yes

So stellen wir sicher, das ein Login mit Plaintextpasswort nicht möglich ist, außer man verwendet eine verschlüsselte Verbindung. Warum dies nötig ist, brauche ich denke ich nicht erklären.

IMAP-Konfiguration ändern

In dieser Konfiguration werden die Mails immer im Homeverzeichnis des jeweiligen Benutzers gespeichert. Damit auch IMAP dort gespeichert wird, muss /etc/dovecot/conf.d/10-mail.conf wie folgt bearbeitet werden.

mail_location = maildir:~/Maildir

Das wars auch schon mit der Konfiguration. Nun muss lediglich Dovecot neugestartet werden und alles sollte funktionieren. Die Logausgabe von Dovecot erfolgt in /var/log/mail.info. Sollte etwas nicht klappen, kann hier nach der Ursache geforscht werden.

/etc/init.d/dovecot restart

Neues lokales Emailkonto erstellen

Damit wir aber auch Emails auf eine lokale Adresse bekommen können, müssen wir zunächst einen Benutzer ohne Shell erstellen und ein Passwort vergeben. Anschließend muss die Adresse noch bei Postfix registriert werden und wir sind fertig und Mails werden auf das lokale Emailkonto zugestellt.

User anlegen

Ein User ist mit wenigen Handgriffen erstellt. Zusätzlich muss noch der Ordner erstellt werden und die richtigen Rechte vergeben werden.

useradd -s /usr/sbin/nologin mail_domain.de
passwd mail_domain.de
mkdir /home/mail_domain.de
chown -R mail_domain.de:mail_domain.de /home/mail_domain.de

Mit diesen Befehlen haben wir alles nötige erledigt. Die Befehle sollten selbsterklärend sein. Ab diesem Zeitpunkt kann man sich bereits z.B. mit Thunderbird zu seinem lokalen Konto verbinden. Wie die Logindaten aussehen, zeige ich weiter unten.

Konfiguration bei Thunderbird

In Kürze: Was tun bei einer neuen Emailadresse

Diese Anleitung setzt voraus, das ihr den Postfix und Dovecot so konfiguriert habt, wie in diesen Anleitungen.

  1. Domain in /etc/postfix/virtual/domains hinzufügen
  2. Emailadressen in /etc/postfix/virtual/addresses konfigurieren
  3. Postmap erstellen: postmap /etc/postfix/virtual/addresses
  4. Benutzer hinzufügen: useradd -s /usr/sbin/nologin mail_domain.de
  5. Passwort hinzfügen: passwd mail_domain.de
  6. Home-Verzeichnis erstellen: mkdir /home/mail_domain.de
  7. Rechte vergeben: chown -R mail_domain.de:mail_domain.de /home/mail_domain.de
  8. Konto bei Thunderbird einfügen
  9. Email-Adressen testen
  10. Fertig 🙂

Spamassassin mit Postfix unter Debian 7 Wheezy

Dies ist der zweite Teil in der Anleitung zu Postfix, also ist die Fortsetzung zu Postfix unter Debian 7 installieren. Diese Anleitung fügt nun den Spamfilter Spamassassin zu Postfix hinzu. Für mich war es auch das erste Mal, aber die Konfiguration ging schneller, als gedacht.

Spamassassin wird dabei so konfiguriert, dass Spam zwar als Spam markiert wird, aber keine Email gelöscht wird. Das Filtern übernimmt dann euer Mailprogramm.

Voraussetzungen

Ihr benutzt die neuste Version von Debian 7 und habt Postfix bereits installiert. Ob dies nach der oben genannten Anleitung geschehen ist oder nicht, ist zunächst egal.

Spamassassin installieren

Zunächst installieren wir uns Spamassassin:

aptitude update
aptitude install spamassassin spamc

Das war’s auch schon. Es werden natürlich viele benötigte Pakete mit installiert, aber der Overhead hält sich in Grenzen.

User mit beschränkten Rechten erstellen

Spamassassin läuft standardmäßig mit root Rechten. Da dies eine Sicherheitslücke ist und einfach zu beheben ist, erstellen wir zunächst einen eingeschränkten Benutzer und Gruppe:

groupadd -g 5555 spamd
useradd -u 5555 -g spamd -s /sbin/nologin -d /usr/local/spamassassin spamd
mkdir -p /usr/local/spamassassin/log
chown spamd:spamd -R /usr/local/spamassassin

Spamassassin konfigurieren

Die Konfigurationsdatei zu Spamassassin liegt unter /etc/default/spamassassin. Öffnet die Datei mit einem Editor eurer Wahl und passt die Konfigurationsdatei wie folgt an:

# /etc/default/spamassassin
# Duncan Findlay

# WARNING: please read README.spamd before using.
# There may be security risks.

# Change to one to enable spamd
ENABLED=1
SPAM_HOME="/usr/local/spamassassin"

# Options
# See man spamd for possible options. The -d option is automatically added.

# SpamAssassin uses a preforking model, so be careful! You need to
# make sure --max-children is not set to anything higher than 5,
# unless you know what you're doing.

OPTIONS="--create-prefs --max-children 5 --helper-home-dir ${SPAM_HOME} --username spamd"

# Pid file
# Where should spamd write its PID to file? If you use the -u or
# --username option above, this needs to be writable by that user.
# Otherwise, the init script will not be able to shut spamd down.
PIDFILE="${SPAM_HOME}/spamd.pid"

# Set nice level of spamd
#NICE="--nicelevel 15"

# Cronjob
# Set to anything but 0 to enable the cron job to automatically update
# spamassassin's rules on a nightly basis
CRON=0

Die Kommentare sollten alle Einstellungen bereits ausreichend erklären. Nun bearbeiten wir noch die Einstellungen von Spamassassin in /etc/spamassassin/local.cf
Ich habe hier nur die Teile aufgeführt, die ich aktiviert oder verändert habe. Wiedermal sollten die Kommentare alles erklären.

#   Add *****SPAM***** to the Subject header of spam e-mails
#
rewrite_header Subject *****SPAM*****

#   Save spam messages as a message/rfc822 MIME attachment instead of
#   modifying the original message (0: off, 2: use text/plain instead)
#
report_safe 0

#   Set the threshold at which a message is considered spam (default: 5.0)
#

required_score 2.0
#   Use Bayesian classifier (default: 1)
#
use_bayes 1

#   Bayesian classifier auto-learning (default: 1)
#
bayes_auto_learn 1

Das wars‘ auch schon mit der Konfiguration von Spamassassin. Nun muss lediglich Spamassassin noch in Postfix integriert werden.

Spamassassin in Postfix integrieren

Damit die Mails auch von Spamassassin „betrachtet“ werden können, müssen wir Postfix noch nicht konfigurieren. Dazu muss die Datei /etc/postfix/master.cf angepasst werden:
Der Eintrag

smtp      inet  n       -       -       -       -       smtpd

muss wie folgt ergänzt werden:

smtp      inet  n       -       -       -       -       smtpd
        -o content_filter=spamassassin

Am Ende der Datei noch folgendes ergänzen:

spamassassin unix -     n       n       -       -       pipe
        user=spamd argv=/usr/bin/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Tada! Das wars. Nun nur noch alles neustarten und fertig ist unser System.

/etc/init.d/spamassassin restart
/etc/init.d/postfix restart

Spamassassin testen

Natürlich wollen wir jetzt auch gleich mal testen, ob Spam richtig erkannt wird. Beobachtet zunächst die Logdatei:

tail -f /var/log/mail.info

Nun senden eine Email an euren Mailserver mit folgendem Inhalt:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Die Mail wird dann von Spamassassin automatisch erkannt und mit *****SPAM***** deklariert. Achtung: Die üblichen Mailprogramme sortieren die Mails gleich automatisch aus.

Fertig. Nun läuft Spamassassin und Spam wird automatisch aussortiert. Spamassassin holt sich jede Nacht die neusten Regeln und hält sich selbst aktuell.

Wie immer würde ich mich über Kritik, Anregungen und Kommentare jeglicher Art freuen :).

Postfix mit TLS und IPv6 auf Debian 7 Wheezy installieren und konfigurieren

Halli Leute! Vielleicht habt ihr es schon gemerkt, dass ich mir einen neuen Server einrichte ,denn heute gibts ne Anleitung, wie ich mir Postfix mit Spamassasin und Procmail einrichte, damit mein Mailserver nicht mehr so mit Spam überschüttet wird.

Voraussetzungen

Diese Anleitung ist für Debian 7 Wheezy geschrieben, sollte aber auch auf anderen Debian basierten Systemen funktionieren. Standardmäßig ist exim als Mailserver installiert. Die Installation von Postfix wird diesen automatisch entfernen, da ein Server keine zwei Mailserver haben darf. Für die Anleitung wird ein Root-Zugriff benötigt. Als Editor verwende ich vim (das darf euch aber reichlich egal sein ;)). Grundverständnisse von Konsole und das Bearbeiten von Dateien setzte ich aus gegeben voraus.

Der Server beherbergt verschiedene Domains und Webseiten und verschiedenste Postfächer und Weiterleitungen.

Postfix

Postfix ist ein mächtiger Mailserver der unsere Postfächer und Domains verwaltet. Weitere Informationen über Postfix sind hier zu finden: Wikipediaeintrag zu Postfix.

Ich habe mich für Postfix entschieden, da dies der quasi Standard bei Linux-Maschinen ist. Ich bin mir sicher, es gibt viele schöne Alternativen, aber ich habe mich bereits sehr an Postfix gewöhnt.

Postfix Installation

Zunächst müssen wir uns natürlich erst mal Postfix installieren und konfigurieren.

aptitude install postfix

Postfix wird installiert und eine Installationsprozedur wird gestartet. Zunächst soll man den Typ der Mailkonfiguration wählen:

  • No configuration
  • Internet Site
  • Internet with smarthost
  • Satelite system
  • Local only

Wir wählen natürlich „Internet Site“. Anschließend fragt die Installation welches unser mail name ist. Dies ist in der Regel eine Domain. Da wir aber mehrere Domains mit dem Server abhandeln wollen, setzten wir hier eine Defaultadresse (sucht euch eine eurer Domains aus). Das wars auch schon mit der Installation.

Postfix konfiguration

Zunächst muss festgelegt werden, für welche Domains Emails akzeptiert werden sollen. Ich verwalte dies über eine extra Datei. Dazu erstellen wir zunächst einen Ordner und dann die entsprechende Datei:

mkdir /etc/postfix/virtual/
vim /etc/postfix/virtual/domains

In der Datei sollte eine Liste von Domains stehen, für die der Mailserver Mails akzeptieren soll. Beispielsweise also etwas wie das:

domain1.net
domain1.de
domain2.de
domain3.com

Nun müssen wir eine Datei anelgen, in dem die Emailweiterleitungen bzw. Konten verwaltet werden.

vim /etc/postfix/virtual/addresses

Eine Beispielkonfiguration könnte wie folgt aussehen:

#################################
#                               #
#          domain1.de           #
#                               #
#################################
domain1.de                       DOMAIN
@domain1.de                      nichtempfehlenswert@gmx.de
mail@domain1.de                  blablub@gmail.com
hans@domain1.de                  hans@localhost

Die Bedeutung der Konfiguration:

  • # : Dies ist ein stink normaler Kommentar, damit man sich in seiner Konfiguration auch ein bisschen zurechtfindet.
  • domain1.de DOMAIN : Dies legt die Domain fest. Für jede Domain die berücksichtigt werden soll, muss ein solcher Identifyer in der Konfiguration vorhanden sein.
  • @domain1.de : Diese Zeile würde alle Emails an die Emailadresse nichtempfehlenswert@gmx.de weiterleiten. Dies ist, wie die Email schon sagt nicht wirklich empfehlenswert, da das ein hohes Spamaufkommen provoziert.
  • mail@domain1.de wird an die Adresse blablub@gmail.de weitergeleitet
  • hans@domain1.de wird an das lokale Emailkonto hans@localhost weitergeleitet

Der Postfix weiß natürlich noch nichts von unseren neu erstellten Dateien, deshalb müssen wir diese zunächst in der Konfigurationsdatei vermerken. Die Datei /etc/postfix/main.cf muss wie folgt verändert werden:

mydestination = somedomain.de, localhost.localdomain, localhost, /etc/postfix/virtual/domains
virtual_maps = hash:/etc/postfix/virtual/addresses

Der Eintrag mydestination sollte bereits vorhanden sein. virtual_maps musste ich bei mir erst erstellen. Nun weiß Postfix schon einmal über unsere Konfiugrationsdateien Bescheid. Nun müssen wir aber noch zwei Befehle ausführen:

postmap /etc/postfix/virtual/addresses
/etc/init.d/postfix reload

Der erste Befehl macht die Adressen in der Datei „addresses“ für postfix verfügbar. Dieser Befehl muss bei jeder Änderung durchgeführt werden! Schreibt euch diesen Befehl am besten gleich in einen Kommentar in die Datei „addresses“ mit rein, damit ihr ihn nicht vergesst. Der zweite Befehl startet den Postfix-Mailserver neu und macht die Änderungen an der Konfiguration sichtbar.

Nun sollte bereits ein Mailempfang möglich sein. Testet dies indem ihr euch selbst eine Email schickt.

Beachtet dazu immer /var/log/mail.info auf etwaige Fehler.

TLS für Postfix einrichten

Um die Kommunikation verschlüsselt ablaufen zu lassen, ist eine TLS-Verschlüsselung dringend zu empfehlen. Es gibt kostenlose Zertifikate, so z.B. von www.startssl.com. Diese sind gültig und werden von nahezu jedem Client angenommen. Dazu müsst ihr euch zunächst einen Account bei startssl.com einrichten. Lasst euch nicht von dem überaus hässlichen Design abschrecken. startssl.com bietet einen kostenlosen Service, der einfach nur Gold wert ist.

Wenn ihr einen Account habt, müsst ihr zunächst die Domain eures Mailservers validieren. Dazu einfach im Usermenü auf „Validation Wizzard“ klicken und anschließend „Domain Name Validation“. Füllt nun alles aus und lasst euch eine Email zuschicken (dazu müsst ihr die angezeigte Email natürlich zunächst in eure /etc/postfix/virtual/addresses eintragen).

Nachdem die Validierung erfolgt ist, klickt auf „Certificate Wizzard“ und wählt anschließend „Web-Server Validation“ aus. Der erste Schritt kann übersprungen werden, da wir uns unser eigenes Zertifikat erstellen:

mkdir /etc/postfix/certs
cd /etc/postfix/certs
openssl req -new -newkey rsa:4048 -nodes -keyout private.key -out website.de.csr
chmod 400 private.key

Mit dem ersten Befehl erstellt ihr zunächst ein neues Verzeichnis für die Zertifikate. Anschließend wechseln wir in dieses Verzeichnis mit „cd“. Nun erstellen wir uns einen eigenen privaten Schlüssel und gleichzeitig auch ein csr (Request-Zertifikat für startssl.com). Ihr werdet einige Dinge gefragt, füllt diese so gut wie möglich aus. Die optionalen Angaben können ausgelassen werden. Einzig bei „Common Name“ müsst ihr die Domain des Mailservers eintragen. Mit dem letzten Befehl ändern wir die rechte des privaten Schlüssels. Sichert diesen und stellt außerdem sicher, dass niemand in den Besitz dieses Schlüssels gerät!

Bei Startssl solltet ihr euch nun bei dem Schritt „Submit Certificate Request“ befinden. Öffnet die Date „website.de.csr“ und kopiert den Inhalt in das Textfeld.

Folgt nun den Schritten bis ihr euer Zertifikat in einem Textfeld angezeigt bekommt. Kopiert dieses und erstellt auf eurem Server im Verzeichnis certs die Datei „website.de.crt“ und kopiert den kompletten Inhalt in diese Datei und speichert diese.

Nun laden wir mit dem Befehl

wget --no-check-certificate https://www.startssl.com/certs/ca-bundle.pem -O startssl-ca-bundle.pem

das Zertifikatbundel von startssl herunter. Damit sagen wir unserem Server, das wir Startssl vertrauen. Führt diesen Befehl wieder im certs-Ordner aus.

Nun müssen wir der Konfiguration von Postfix nur noch die Zertifikatdaten geben. Die Konfiguration ist manchmal etwas anders, hier gibt es jetzt mal meine, damit ihr vergleichen könnt (die Konfiguration ist wieder in der main.cf).

# TLS parameters
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
smtpd_tls_auth_only = no
smtp_use_tls = yes
smtpd_use_tls = yes
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/postfix/certs/private.key
smtpd_tls_cert_file = /etc/postfix/certs/website.de.crt
smtpd_tls_CAfile = /etc/postfix/certs/startssl-ca-bundle.pem
smtp_tls_CAfile = $smtpd_tls_CAfile
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Es ist geschafft. Ab hier funktioniert schon mal der Postfix für den Mailversand. Alle weiteren Schritte sind nun nicht mehr zwingend erforderlich, werden jedoch dringend empfohlen!

Postfix abhärten

Um das System ein wenig widerstandsfähiger gegen Spam zu machen, hier ein paar kleine Einstellungen, die ihr in die main.cf eintragen könnt. Bitte testet dann aber den Mailversand, ob noch alles korrekt funktioniert. Die Doku dazu findet ihr hier: Postfix Doku

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_helo_restrictions = reject_invalid_helo_hostname, reject_non_fqdn_helo_hostname, reject_unknown_helo_hostname

Postfix IPv6 fähig machen

Tja, ich glaube, ich brauche euch nicht erklären, warum es langsam echt nötig wird, die Server für IPv6 vorzubereiten. Für diese Anleitung wird vorausgesetzt, dass euer Server bereits IPV6 kann. Vergesst auch nicht, den DNS-Eintrag eurer Domain richtig einzustellen. Dem Mailserver bringen wir das Ganze dann auch noch bei :).

Um den Mailserver richtig zu konfigurieren ist eigentlich nicht viel nötig. Es reicht folgender Eintrag:

inet_protocols = all
smtp_bind_address6 = 2a01:4f8:202:5028::2

Mit „inet_protocols“ legt ihr fest, dass auch IPv6 akzeptiert werden soll. Mit dem Eintrag „smtp_bind_address6“ legt ihr die IPv6-Adresse des Mailservers fest. Dieser Eintrag sollte mit dem Eintrag im DNS-Record übereinstimmen. Um zu testen, ob alles klappt, könnt ihr temporär „inet_protocols = ipv6“ einstellen und eine Email an eine @gmail.com-Adresse schicken. Bei Gmail bin ich mir sicher, dass diese auch IPv6 akzeptieren. Schaut auch immer wieder ins Logfile. Kommt die Mail an, hat alles geklappt und euer Server ist richtig konfiguriert. Stellt anschließend wieder auf „all“ um. Es ist zwingend notwendig, den Mailserver neu zu starten, nachdem das Protokoll geändert wurde. Ein Reload ist nicht ausreichend.

Zusammenfassung

Postfix ist soweit eingerichtet. Je nach Umfang hat man damit schon wirklich viel zu tun, aber die Einstellung lohnt sich auf jeden Fall. Beim Schreiben der Anleitung hab ich die Erfahrung gemacht, dass an diversen anderen Stellen noch weitere Einstellungen gemacht werden müssen. So muss z.B. der DNS-Server umgestellt werden. Wie dieser eingerichtet wird, werde ich an einer anderen Stelle noch weiter erläutern.

Auch die Installation von Spamassassin und Procmail werde ich in einem anderen Beitrag verwursten. Wie dies geht könnt ihr im Beitrag Spamassassin für Postfix auf Debian 7 einrichten nachlesen.