IPFire via Mac OS X auf ALIX 2D13 installieren

Lange Zeit habe ich die kleine Firewall-Distribution m0n0wall eingesetzt, um die Edge-Firewall (sprich, die äußerste Firewall zwischen dem eigenen Netz und dem Internet) in meinem heimischen Netzwerk zu betreiben. Leider wurde die Weiterentwicklung von m0n0wall vor etwa einem halben Jahr eingestellt - ich musste also früher oder später einen Ersatz finden.

Die Macher hinter der m0n0wall empfehlen den Wechsel auf einen relativ neuen pfSense-Fork namens OPNsense. Natürlich stellte ich mir die Frage, warum ich nicht direkt das lang gediente pfSense einsetzen sollte und schaute mir das Mission Statement von OPNsense an. Dort erzählen sie davon, dass OPNsense Open Source sein soll (wie pfSense), dass es auf einem BSD basieren soll (wie pfSense) und, dass eine starke Community aufgebaut werden soll (die pfSense schon hat). Das erklärte mir aber immernoch nicht, wieso ein kleines Team den Aufwand auf sich nimmt, die pfSense-Distribution zu forken - bis ich mir das Unternehmen hinter OPNsense ansah: Decisio B.V. - eine Firma, die ihr Geld primär mit Hardware verdient.

Um das zu verstehen, muss man wissen, dass es auch Firewall-Appliances (also fertige Hardware mir vorinstallierter Firewall-Distribution und Support) mit pfSense gibt - diese stammen offenbar von dem Unternehmen Netgate. Wie es der Zufall nun so will, gibt es auch Firewall-Appliances mit OPNsense - deren Verkauf über eine Webseite der Firma Decisio B.V. erfolgt, also genau der Firma, die hinter dem OPNsense-Fork steckt. Die Interpretation dieser Zusammenhänge überlasse ich an dieser Stelle dem geneigten Leser.

Für mich stand jedenfalls fest, dass ich lieber pfSense statt des Ablegers OPNsense einsetzen wollen würde. Leider musste ich im Laufe meiner Bemühungen feststellen, dass pfSense auf meiner bisher verwendeten Hardware Probleme machte (ich bekam 500er Fehlermeldungen, teils wurden mir Binärdumps statt HTML-Seiten zurückgeliefert, etc.). Also sah ich mich erneut um und fand das deutsche Projekt IPFire (ein Fork des sehr bekannten, aber nur noch zögerlich gepflegten IPCop). Diese Firewall-Distribution sollte es nun also werden.

Als Hardware sollte mein bereits vorhandenes ALIX 2D13 von PC Engines zum Einsatz kommen. Dabei handelt es sich um ein Embedded-Board mit CF-Kartenleser, serieller Schnittstelle und einer 500MHz AMD Geode LX800 CPU. Von seinem Bruder - dem ALIX 2D3 - unterscheidet es sich eigentlich nur durch die Pufferbatterie für die BIOS-Uhrzeit.

Um mit der seriellen Schnittstelle kommunizieren zu können, braucht man einen USB-zu-Seriell-Adapter, den man problemlos bei Amazon finden kann. Diese enthalten typischerweise den Prolific PL2303 Chipsatz, für den man die passenden Treiber beim Hersteller finden kann. Vergesst nicht das Nullmodem-Kabel, das ihr ebenfalls brauchen werdet - auch das findet man bei Amazon. Um die CF-Karte beschreiben zu können, braucht man weiterhin einen CF-Kartenleser, den man ebenfalls bei Amazon findet. Und man braucht noch eine ordentliche Terminalemulation - hier habe ich dieses Mal ZOC ausprobiert, das man 30 Tage lang kostenlos testen kann. 🙂

Bevor wir mit dem Installieren von IPFire anfangen können, müssen wir wahrscheinlich erst einmal die Firmware des ALIX-Boards aktualisieren. Alle wichtigen Informationen zum ALIX-Board findet man auf der dazugehörigen Support-Seite - inklusive der Firmware-Version 0.99m. Mit dieser allein können wir jedoch noch nichts anfangen. Wir benötigen noch ein Betriebssystem, das wir auf dem ALIX-Board booten können, um das Firmware-Image flashen zu können. Auf der Webseite von PC Engines sind mehrere Möglichkeiten beschrieben, wie man das mit einem FreeDOS-Image lösen kann. Die aus meiner Sicht einfachste Variante ist die Nummer 3 - das fertige Image herunterladen, dieses auf eine CF-Karte flashen, die Dateien aus der ebenfalls heruntergeladenen Firmware-Version 0.99m mit auf die CF-Karte kopieren und das ganze Paket anschließend booten und verwenden.

Aber der Reihe nach:

  1. Wenn wir das FreeDOS-Image entpackt haben, haben wir eine Datei namens "./freedos_alixupdate_0.99.img" - diese wollen wir auf die CF-Karte flashen.
  2. Dazu stecken wir unsere CF-Karte in den CF-Kartenleser - diese sollte nun von Mac OS X erkannt werden (entweder können wir nun den Karteninhalt anzeigen oder sie formatieren).
  3. Wir müssen nun die CF-Karte unmounten und das FreeDOS-Image auf die CF-Karte flashen. Dazu öffnen wir als erstes die Terminal-Anwendung von Mac OS X und wechseln in den Ordner, in dem das FreeDOS-Image liegt.
  4. Nun lassen wir uns mit einem Befehl die Liste der gemounteten Geräte auflisten - in dieser Liste müssen wir dann den Namen der CF-Karte ausfindig machen (z.B. kann man sich an der Größe der CF-Karte orientieren), der die Form "/dev/disk<n>" (<n> ist eine Zahl) haben sollte.
    1
    diskutil list
  5. Wenn wir den Namen der CF-Karte ausfindig gemacht haben, können wir die entsprechende Disk unmounten.
    1
    diskutil unmountDisk /dev/disk<n>
  6. Nun sind wir soweit, dass wir das FreeDOS-Image per "dd" auf die CF-Karte flashen können. Da wir dafür Root-Rechte benötigen, müssen wir diese Aktion mit einem Administrator-Account ausführen, der "sudo" verwenden darf. Dessen Passwort wird während der Ausführung abgefragt.
    1
    sudo dd if=./freedos_alixupdate_0.99.img of=/dev/disk<n>
  7. Das Flashen sollte relativ schnell gehen. Danach sollte Mac OS X die Karte wieder erkennen und euch ermöglichen, die Dateien darauf zu bearbeiten. Wenn ihr soweit seid, könnt ihr die Dateien aus dem entpackten ALIX-Firmware-Download auf die CF-Karte kopieren ("./alix1.bin", "./ALIX1.IMG", "./alix2.bin", "./ALIX2.IMG", "./alix5.bin", "./ALIX5.IMG", "./alixbios.txt" [optional] und "./sb.com") und die CF-Karte auswerfen.
    1
    diskutil eject /dev/disk<n>

Diese vorbereitete Karte könnt ihr nun verwenden, um die Firmware eures ALIX-Boards zu aktualisieren. Das geht leider nicht vollkommen automatisch. Deshalb müssen wir nun alles vorbereiten, um die serielle Konsole des ALIX-Boards verwenden zu können. Hierfür solltet ihr als erstes mal die Treiber eures USB-zu-Seriell-Adapters installieren (bei mir musste das Systems dabei neu gestartet werden). Nach der Installation sollten zwei neue Devices im System erscheinen ("/dev/cu.usbserial" und "/dev/tty.usbserial"). Wenn das der Fall ist, könnt ihr nun euren Terminalemulator starten. Hier müsst ihr nun konfigurieren, dass sich der Emulator mit der seriellen Schnittstelle des ALIX-Boards verbinden kann.

Hier Schritt für Schritt das Vorgehen für ZOC:

  1. Verbindet den USB-Stecker eures USB-zu-Seriell-Adapters mit eurem Mac.
  2. Öffnet ZOC und startet eine neue Verbindung.
  3. Im sich neu öffnenden Einstellungsfenster gebt ihr ein, dass ihr das Verbindungsprofil "Standard.zoc" verwenden wollt, als Verbindungstyp setzt ihr "Serial/Direct" und als Emulation nehmt ihr "Xterm".
    ZOC Serial Konfiguration

    ZOC Serial Konfiguration

  4. Nun klickt ihr auf den "Bearbeiten..."-Button neben dem Verbindungsprofil, wodurch sich ein weiteres Fenster öffnet. In diesem geht ihr links in der Liste auf "Verbindungstyp" und wählt "Serial/Direct" aus. Beim Com-Port drückt ihr nun auf "Scan..." und solltet einen Eintrag in der Form "/dev/cu.usbserial" angezeigt bekommen - den wählt ihr aus. Weiterhin wählt ihr als Baud-Geschwindigkeit den Wert "38400" (Standardwert für ALIX-2-Boards entsprechend des Handbuchs).
    ZOC Serial Konfiguration

    ZOC Serial Konfiguration

  5. Wenn ihr das soweit habt, könnt ihr nun auf "Speichern" klicken und im vorherigen Dialog auf "Verbinden" gehen. Euch sollte nun eine Fehlermeldung angezeigt werden, die ihr einfach mit "Abbruch" wegklicken könnt.
    ZOC Serial Konfiguration

    ZOC Serial Konfiguration

Euch sollte nun angezeigt werden, dass die Verbindung aufgebaut werden konnte. Daher könnt ihr nun das ALIX-Board vorbereiten. Steckt die vorbereitete CF-Karte in den dafür vorgesehenen Schacht, verbindet das Nullmodem-Kabel mit dem ALIX-Board und mit dem USB-zu-Seriell-Adapter, der mit eurem Mac verbunden ist. Verbindet nun abschließend das ALIX-Board mit seinem Netzteil. Das ALIX-Board sollte nun eine Speicherprüfung machen und anschließend FreeDOS booten. Das sieht im Terminalemulator in etwa so aus:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
PC Engines ALIX.2 v0.99h
640 KB Base Memory
261120 KB Extended Memory

01F0 Master 848A TS4GCF133
Phys C/H/S 7769/16/63 Log C/H/S 971/128/63
FreeDOS kernel build 2036 cvs [version Aug 18 2006 compiled Aug 18 2006]...................123
Kernel compatibility 7.10 - WATCOMC - 80386 CPU required - FAT32 support

(C) Copyright 1995-2006 Pasquale J. Villani and The FreeDOS Project.
All Rights Reserved. This is free software and comes with ABSOLUTELY NO
WARRANTY; you can redistribute it and/or modify it under the terms of the
GNU General Public License as published by the Free Software Foundation;
either version 2, or (at your option) any later version.
 - InitDiskWARNING: using suspect partition Pri:1 FS 06: with calculated values    3-113-49 instead of    1-242-49
C: HD1, Pri[ 1], CHS=    0-1-1, start=     0 MB, size=    15 MB
FreeDOS HIMEM64 3.26 [Aug 25 2006] (c) 1995, Till Gerken 2001-2006 tom ehlert
HIMEM - Always On A20 method used
Kernel: allocated 43 Diskbuffers = 22876 Bytes in HMA

FreeCom version 0.84-pre2 XMS_Swap [Aug 28 2006 00:29:00]
C:\>

Ihr braucht nun im Grunde nur das Programm "sb.com" starten. Anschließend führt das Programm das Firmware-Update aus und meldet sich mit der Eingabekonsole zurück.

1
2
3
4
5
6
7
8
C:\>sb.com
ALIX flash update (C)2007-2011 PC Engines GmbH
Flash ID = 2 FFFF GPI = FF
Flash ID = 1 FFFF GPI = FF
Flash ID = 0 9D37 GPI = 01
Reading 512KB flash image alix1.bin................
Compare Erase Program Verify - update OK.
C:\>

Weiterhin könnt ihr nun schonmal die Baud-Rate des ALIX-Boards neu setzen, damit ihr später IPFire problemlos über die serielle Konsole verwenden könnt. Dazu rebootet ihr das Board (z.B. indem ihr es kurz stromlos schaltet). Während beim Hochfahren noch der Speichertest des ALIX-Boards läuft, drückt ihr schnell die "S"-Taste - woraufhin das ALIX-Board zur BIOS-Konfiguration wechseln sollte, was in etwa so aussieht:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PC Engines ALIX.2 v0.99h
640 KB Base Memory
261120 KB Extended Memory

01F0 Master 848A TS4GCF133
Phys C/H/S 7769/16/63 Log C/H/S 971/128/63

BIOS setup:

(9) 9600 baud (2) 19200 baud *3* 38400 baud (5) 57600 baud (1) 115200 baud
*C* CHS mode (L) LBA mode (W) HDD wait (V) HDD slave (U) UDMA enable
(E) PXE boot enable
*M* Memory test
(P) late PCI init
*R* Serial console enable
(X) Xmodem upload
(Q) Quit

Hier gebt ihr nun die "1"-Taste ein, denn IPFire wird später für die serielle Ausgabe die Geschwindigkeit von 115200 Baud verwenden (so könnt ihr dann den Bootvorgang des ALIX-Boards und die Ausgabe von IPFire ohne Probleme verfolgen). Nach Eingabe der Taste wechselt das ALIX-Board in eine andere Ansicht, in der ihr mit der "Q"-Taste und anschließendem Druck auf die "Y"-Taste die Änderung bestätigen müsst.

1
2
3
4
5
6
7
8
9
10
11
(9) 9600 baud (2) 19200 baud (3) 38400 baud (5) 57600 baud *1* 115200 baud
*C* CHS mode (L) LBA mode (W) HDD wait (V) HDD slave (U) UDMA enable
(E) PXE boot enable
*M* Memory test
(P) late PCI init
*R* Serial console enable
(X) Xmodem upload
(Q) Quit

Save changes Y/N ?
Writing setup to flash... OK

Wenn ihr das geschafft habt, könnt ihr das ALIX-Board erst einmal wieder vom Strom trennen und die CF-Karte entfernen. Auf diese werden wir als nächstes das IPFire-Image installieren, das man von deren Webseite herunterladen kann. Die CF-Karte, die für IPFire verwendet wird, muss mindestens 1GB groß sein. Größere Karten sind in Ordnung - IPFire wird bei der Installation dafür sorgen, dass der größere Speicherplatz mit verwendet wird. Beim Flashen des IPFire-Images gehen wir im Grunde genauso vor, wie auch vorhin schon.

Hier Schritt für Schritt:

  1. Nach dem Entpacken finden wir das IPFire-Image in der Datei "./ipfire-2.17.1gb-ext4-scon.i586-full-core93.img" - dieses wollen wir nun auf die CF-Karte flashen.
  2. Wir stecken unsere CF-Karte wieder in den CF-Kartenleser.
  3. Wir unmounten die CF-Karte wieder, um das IPFire-Image auf die CF-Karte flashen zu können. Dazu öffnen wir wieder die Terminal-Anwendung von Mac OS X und wechseln in den Ordner, in dem das IPFire-Image liegt.
  4. Wir lassen uns wieder die Liste der gemounteten Geräte auflisten - in dieser Liste müssen wir dann den Namen der CF-Karte wieder ausfindig machen (z.B. kann man sich an der Größe der CF-Karte orientieren), der die Form "/dev/disk<n>" (<n> ist eine Zahl) haben sollte.
    1
    diskutil list
  5. Wenn wir den Namen der CF-Karte wieder ausfindig gemacht haben, können wir die entsprechende Disk unmounten.
    1
    diskutil unmountDisk /dev/disk<n>
  6. Nun können wir das IPFire-Image wieder per "dd" auf die CF-Karte flashen können. Da wir dafür Root-Rechte benötigen, müssen wir diese Aktion mit einem Administrator-Account ausführen, der "sudo" verwenden darf. Dessen Passwort wird während der Ausführung abgefragt.
    1
    sudo dd if=./ipfire-2.17.1gb-ext4-scon.i586-full-core93.img of=/dev/disk<n>
  7. Das Flashen sollte dieses Mal etwas mehr Zeit in Anspruch nehmen, da es mit 1GB doch recht groß ist - habt Geduld. Mac OS X wird den Inhalt nach Beenden des Flash-Vorgangs wahrscheinlich nicht erkennen - aber das ist okay. Wir werfen die CF-Karte einfach aus.
    1
    diskutil eject /dev/disk<n>

Bevor wir weitermachen können, müssen wir noch den Terminalemulator umkonfigurieren, damit er die Geschwindigkeit von 115200 Baud verwendet. Bei ZOC gehen wir wieder so vor, dass wir das Programm starten, eine neue Verbindung aufbauen und im Einstellungsdialog neben dem Verbindungsprofil auf "Bearbeiten..." klicken. Im neuen Dialog gehen wir wieder auf "Verbindungstyp", "Serial/Direct", wählen die Geschwindigkeit 115200 Baud aus und klicken auf "Speichern". Nun können wir im vorherigen Dialog auf "Verbinden" gehen.

ZOC Serial Konfiguration

ZOC Serial Konfiguration

Nun können wir die neu geflashte CF-Karte wieder in den CF-Kartenslot des ALIX-Boards schieben und dieses mit dem Strom verbinden. Nach dem obligatorischen Speichercheck sollte nun der Bootloader GRUB geladen werden, in dem IPFire standardmäßig nach wenigen Sekunden gebootet wird. Beim ersten Hochfahren reformatiert IPFire die CF-Karte automatisch und startet dann direkt wieder neu. Beim zweiten Hochfahren sollte dann eine pseudografische Oberfläche gestartet werden, die ihr mit der Tastatur steuern könnt. Dort werden dann Dinge wie das Root-Passwort der seriellen Konsole und des SSH-Zugangs, das Passwort des "admin"-Accounts (der für die Weboberfläche benötigt wird), sowie der Netzwerktyp und die zugehörigen Netzwerkadressen erfragt. Das initiale Setup ist im Wiki von IPFire noch ausführlicher beschrieben.

Wenn ihr das initiale Setup erfolgreich absolviert habt, könnt ihr euren Mac mit einem Ethernet-Kabel mit dem (von euch konfigurierten) "grünen" LAN-Anschluss (also dem Anschluss, dem ihr das interne Netzwerk zugeordnet habt) verbinden und anschließend die webbasierte Konfigurationsoberfläche von IPFire aufrufen. Dazu müsst ihr euch erinnern, welche IP-Adresse ihr dem internen Netzwerkanschluss der Firewall gegebenen habt (typischerweise sowas wie 192.168.0.1) und könnt anschließend im Browser die URL "https://<ip>:444" aufrufen. Ihr solltet per HTTP-Basic-Authentication nach den Zugangsdaten gefragt werden ("admin"-Account verwenden!) und anschließend auf der Startseite der Weboberfläche landen.

IPFire Weboberfläche IPFire Weboberfläche

IPFire Weboberfläche

Ist das der Fall? Dann herzlichen Glückwunsch! Ihr habt soeben die Firmware eures ALIX-Boards aktualisiert und anschließend erfolgreich IPFire darauf installiert! Die weitere Konfiguration lässt sich durch die moderne Weboberfläche in meinen Augen ziemlich schnell erledigen. 🙂

Feurige Grüße, Kenny

4 Kommentare » Schreibe einen Kommentar

  1. Hallo,

    Ich beiß mal an. Was genau soll sich denn der Leser denken? Business macht Geld? NL späht mehr als US? Orange ist blöd? Ich bin jedenfalls verwirrt. 🙂

    Gruß
    Franco

    • So schwer ist das IMHO nicht zu verstehen: Es gibt eine weitverbreitete Opensource Firewall-Distribution, für die es auch offizielle HARDWARE gibt. Nun kommt ein anderer HARDWAREhersteller (von dem die offizielle HARDWARE nicht stammt), der aus offenbar vorgeschobenen Gründen die Firewall-Distribution forkt. Kurz darauf gibt es genau von diesem HARDWAREhersteller erstmal offizielle HARDWARE für seinen Fork. Ich finde das auffällig.

      • Ist korrekt beobachtet. Jetzt haben wir 3 Setups mit pfSense, OPNsense und IPFire, die jeweils Hardware zu ihrem Open Source Projekt verkaufen. Schlimm oder notwendig? Gelten für Forks andere Regeln? Alle Beteiligten wollen essen. 🙂

        Jetzt müsste man nur noch mit einer lebenslangen Lerneinstellung hinterfragen, warum es zum Fork kam und warum es mehr als nur eine neue GUI gibt. Oder warum pfSense mit 2.3 so stark nachlegt mit Features, die wir schon for 2 Jahren wollten, aber nicht umsetzen durften.

        Wir reden übrigens darüber hier um sicherzustellen, dass solche Missverständnisse wie dieses hier in Zukunft nicht mehr auftreten mit transparenterer Kommunikation. https://forum.opnsense.org/index.php?topic=1499.0

        Gruß
        Franco

        • Dass ein Hardwarehersteller ein Interesse daran hat, seine Hardware zu verkaufen, kann ich durchaus verstehen. Auch, dass es gute Gründe für einen Fork geben kann, ist mir bekannt (siehe z.B. OpenOffice.org vs. LibreOffice, OpenSSL vs. LibreSSL, IPcop vs. IPfire).

          Trotzdem würde ich bei einem neuen Fork erwarten, dass sich dieser etwas stabilisiert, bevor zugehörige Hardware auf den Markt geworfen wird. Wenn ich mir jedoch den Blog ansehe, in dem tlw. im Abstand von zwei Tagen eine Version 15.7.12 und dann eine 15.7.13 angekündigt wird, frage ich mich, wann eigentlich getestet wird und in welchem Umfang. Allein im September gab es vier Stable Releases - die ja allesamt entwickelt, getestet, paketiert und released werden mussten.

          Abschließend finde ich es sehr merkwürdig, dass auf euren Webseiten (hallo Franco, gut zu wissen, dass du einer der drei Lead Developer bist) so oft der Begriff "Open Source" verwendet wird. Ja, ihr seid eine Open Source Firewall und ja, man kann das ruhig erwähnen, aber bei euch finde ich die Häufigkeit der Erwähnung etwas "too much".

Schreibe einen Kommentar

Um Ihnen beim weiteren Kommentieren auf dieser Webseite die erneute Eingabe Ihrer Daten zu ersparen, wird beim Absenden Ihres Kommentars ein Cookie an Ihren Browser gesendet und von diesem gespeichert. Mit dem Absenden eines Kommentars auf dieser Webseite stimmen Sie der Speicherung und Übertragung dieses Cookies explizit zu.

Pflichtfelder sind mit * markiert.