BLog

ImprintImpressum
PrivacyDatenschutz
DisclaimerHaftung
Downloads 

Vorassetzungen für den FreeBSD-Home-Server in der Cloud

In den bisherigen Artikeln wurden die Einrichtungen beschrieben, die es erlauben aus unserem Heim-Netzwerk über den FreeBSD-Home-Server als Router in’s Internet zu gelangen. Ferner können wir nun unsere Dateien über die diversen eingerichteten Netzwerk-Dateisysteme auf unserem Server speichern, abrufen und verändern - allerdings bisher nur aus dem heimischen Netz heraus. Ausserdem machen Dateien sowieso nur den halben Spaß im digitalen Leben aus - was ist mit E-Mails, Kalendern und Kontakten? Ja, dafür müssen wir zunächst den Home-Server für eingehende Verbindungen vom Internet aus ansprechbar machen. Wir könnten zwar jetzt bereits einen Mail-Server einrichten, so daß mir z.B. meine Frau von Ihrem Rechner am Schreibtisch gegenüber eine Mail schicken könnte, die ich dann mit meinem Rechner an meinem Schreibtisch empfangen könnte. Super, nicht wahr? Nein, richtig spannend wird es doch erst, wenn die Mails auch von aussen auf unserem Server eintreffen können. Und wenn wir ausser Haus sind, dann möchten wir auch schnell mal unsere Mails mit dem Smart-Phone abrufen können, oder auch via Web-Mail von fremden Rechnern im Hotel, am Flughafen oder im Internet-Café aus. Gleiches gilt für Kalender-Einträge und Kontakte, und schließlich wäre es ja auch nicht schlecht, wenn wir von unterwegs aus per-se auf alle unsere Daten auf dem Home-Server via VPN Zugriff bekämen. Das heißt auf neudeutsch, wir müssen unseren FreeBSD-Home-Server in die Cloud bringen.

Die Voraussetzungen

Der Internet-Serviceprovider muß mitspielen

  1. Wenn unser Server von beliebigen Orten auf der Welt erreichbar sein soll, dann geht das im Moment nur mit IPv4, wir benötigen also einen direkten IPv4-Zugang in’s Internet. Ein echter IPv4/IPv6-Dual-Stack wäre auch prima. Für die vorliegenden Zwecke ist Dual-Stack-Lite dagegen kompletter Müll (am besten sofort kündigen). Ein reiner IPv6-Zugang ist solange unbrauchbar, bis daß die Welt durchgehend auf IPv6 umgestellt wurde.
  2. Der Internetzugang muß für Verbindungen ins Internet auf allen ausgehenden Ports offen sein.
  3. Der Internetzugang muß für eingehende Verbindungen auf den folgenden UDP/TCP-Ports vom Internet aus erreichbar sein:
    • E-Mail (smtp, submission, imaps, pop3s): TCP-Ports 25, 587, 993, 995
    • Web, WebMail, WebDAV, CalDAV, CardDAV (http, https): TCP-Ports 80, 443
    • VPN (IPsec): UDP-Ports 500, 4500

Der Online-Check

Am besten prüft man die oben genannten Ports selber durch, und dazu kann man für die TCP-Ports das Open Port Check Tool auf http://CanYouSeeMe.org verwenden. Dazu muß man alle zu testenden Ports in der Firewall für eingehende Verbindungen freigeben, und wenn die Firewall so aufgebaut ist wie zuvor in den Artikeln Netzwerkeinrichtung des FreeBSD-Home-Servers und Netzwerkdienste DNS und DHCP auf dem FreeBSD-Home-Server beschrieben wurde, dann kann man das im ssh-Terminal des Home-Servers mit dem folgenden Befehl bewerkstelligen:

ipfw add 5010 allow tcp from any to me dst-port 25,80,443,587,993,995 in recv re1 setup keep-state

Anstelle von em1 bitte die tatsächliche Kennung für das externe Interface einsetzen. Der Online-Test von UDP-Ports funktioniert kaum zuverlässig, ohne daß wirklich Daten ausgetauscht werden, aber wer es dennoch versuchen will, muß auch diese in der Firewall freigeben:

ipfw add 5020 allow udp from any to me dst-port 500,4500 in recv re1 keep-state

Auch hier re1 bitte anpassen. Schließlich müssen auf dem Server die ensprechenden Dienste simuliert werden. Das macht man am besten mit einem Tool wie Netcat. Dazu startet man je ein Netcat - nc(1) für jeden der oben genannten Ports der Reihe nach im Listen-Modus:

nc -lk 25 &
nc -lk 80 &
nc -lk 443 &
nc -lk 587 &
nc -lk 993 &
nc -lk 995 &
nc -ulk 500 &
nc -ulk 4500 &​

An das Ende jedes nc-Befehls wird ein Et-Zeichen & gestellt, was eine asynchrone Abarbeitung bewirkt, d.h. das Terminal wartet nicht bis zur Beendigung des jeweiligen Befehls.

Auf http://CanYouSeeMe.org testet man dann der Reihe nach die TCP-Ports durch - alle ausser 500 und 4500. Der Erfolgsfall sieht dann in etwa wie folgt aus:

Für die UDP-Ports muß man einen anderen Online Service finden. Ich habe allerdings keinen gefunden, der zuverlässig den Status meiner UDP-Ports feststellen konnte, und daher gebe ich hier keine Empfehlungen ab, stattdessen verweise ich auf die andere eigentlich sowieso bevorzugte Do-It-Yourself-Test-Methode weiter unten. Jedenfalls muß man nach Test-Ende alle Netcats stoppen und die Firewall zurücksetzen:

killall nc
ipfw delete 5020
ipfw delete 5010

Die Do-It-Yourself-Test-Methode

Hierzu benötigt man einen zweiten unabhängigen Zugang zum Internet, und dafür bietet sich das sog. Tethering eines Computers an ein Mobiltelefon an, hier mit einem MacBook + Mac OS X 10.9 und einem iPhone 4 + iOS 7.1.

Auf dem FreeBSD-Home-Server FHS, dessen Firewall entsprechend der vorausgegangenen Artikel Netzwerkeinrichtung des FreeBSD-Home-Servers und Netzwerkdienste DNS und DHCP auf dem FreeBSD-Home-Server eingerichtet wurde, installiert man das Shell-Script fhs-responder.sh folgenden Inhalts:

#!/bin/sh
#
#  Simuliert E-Mail-, Web-, und VPN-Dienste, um die entsprechenden Verbindungen
#  von aussen testen zu können.
#
#  Benutzung: fhs-responder.sh [LANif] [WANif]
#
#    LANif ($1)  Interface-Kennung des LAN-Netzwerkadapters (intern) -- Beispiel: 're0'
#    WANif ($2)  Interface-Kennung des WAN-Netzwerkadapters (extern) -- Beispiel: 're1'
#
#  Die Parameter sind nur erforderlich, wenn keine entsprechenden Descriptions,
#  LAN bzw. WAN, bei der Interface-Konfiguration angelegt wurden - s. ifconfig(8).
#

for iface in `/sbin/ifconfig -l` ; do
   desc=`/sbin/ifconfig $iface | /usr/bin/sed -n '/.description: /{s///;s/ .*//;p;}'`
   if [ "$desc" == "LAN" ] ; then
      LAN="$iface"
   elif [ "$desc" == "WAN" ] ; then
      WAN="$iface"
   fi
done

if [ "$1" != "" ] ; then
   LAN="$1"
fi

if [ "$2" != "" ] ; then
   WAN="$2"
fi

if [ "$LAN" != "" ] && [ "$WAN" != "" ] ; then

   # Zeitweilige Firewall-Anpassung:
   # -- blockiere lokale Verbindungen, um falsch-positive Verbindungen auszuschließen.
   /sbin/ipfw -q add 0001 deny  ip  from any to me 25,587,993,995,81,444,500,4500 via $LAN
   # -- erlaube externe Verbindungen.
   /sbin/ipfw -q add 5010 allow tcp from any to me 25,587,993,995,81,444          via $WAN in setup keep-state
   /sbin/ipfw -q add 5020 allow udp from any to me 500,4500                       via $WAN in keep-state

   # Die diversen Dienste simulieren
   # TCP-Ports der E-Mail-Dienste
   nc -lk 25 &
   nc -lk 587 &
   nc -lk 993 &
   nc -lk 995 &

   # TCP-Ports der Web-Dienste
   nc -lk 81 &
   nc -lk 444 &

   # UDP-Ports für IPsec-VPN
   nc -ulk 500 &
   nc -ulk 4500 &

   echo "Beenden mit <return>!"
   read x

   # Alle simulierten Dienste beenden
   killall nc

   # Firewall zurücksetzen
   /sbin/ipfw -q delete 0001
   /sbin/ipfw -q delete 5010
   /sbin/ipfw -q delete 5020

else

   echo "Benutzung: $0 [LANif] [WANif]"
   echo ""
   echo "  LANif  Interface-Kennung des LAN-Netzwerkadapters (intern) -- Beispiel: 're0'"
   echo "  WANif  Interface-Kennung des WAN-Netzwerkadapters (extern) -- Beispiel: 're1'"
   echo ""
   echo "Die Parameter sind nur erforderlich, wenn keine entsprechenden Descriptions, "
   echo "LAN bzw. WAN, bei der Interface-Konfiguration angelegt wurden - s. ifconfig(8)."
   echo ""

fi

Vorbereitung des FHS (FreeBSD-Home-Servers)

1. Download des Scripts vom Server des BLogs:

mkdir -p /root/install
fetch -o /root/install/fhs-responder.sh https://obsigna.com/articles/downloads/fhs-responder.sh

2. Überprüfung des SHA256-Werts - muß mit dem hier gezeigten übereinstimmen:

sha256 /root/install/fhs-responder.sh
>>>>
SHA256 (...) = 375c99fe1cce063c62417a067ebf057df35154803f64a722df77486a0a514cd0

3. Das Script muß ausführbar gemacht werden:

chmod ugo+x /root/install/fhs-responder.sh

4. Feststellung der öffentlichen (externen) IP-Adresse unseres FHS:

ifconfig re1
>>>>
re1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	description: WAN
	options=8209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC,LINKSTATE>
	ether 60:61:cb:73:4b:9c
	inet 200.75.1.64 netmask 0xffffff00 broadcast 200.75.1.255

5. Das FHS-Responder-Script wird gestartet:

/root/install/fhs-responder.sh
>>>>
Beenden mit <return>!

Vorbereitung des Mac-OS-X-Clients und des iPhones

6. Auf dem Desktop des Macs folgendes Shell-Script unter dem Namen fhs-emitter.sh speichern:

#!/bin/sh
#
# Emitiert Test-Signale an den FreeBSD-Home-Server (FHS)
#
#  Benutzung: fhs-emitter.sh localIP fhsWANIP
#    localIP  ($1)  lokale IP-Adresse des Emitters, darf nicht im LAN des FHS liegen -- Beispiel: '172.20.10.2'
#    fhsWANIP ($2)  WAN-IP-Adresse (Internet-Adresse) des FreeBSD-Home-Servers       -- Beispiel: '123.45.67.8'

# TCP-Ports der E-Mail-Dienste
echo "1. Test TCP   25" | nc -w30 -s "$1" "$2" 25
echo "2. Test TCP  587" | nc -w30 -s "$1" "$2" 587
echo "3. Test TCP  993" | nc -w30 -s "$1" "$2" 993
echo "4. Test TCP  995" | nc -w30 -s "$1" "$2" 995

# TCP-Ports der Web-Dienste
echo "5. Test TCP   80" | nc -w30 -s "$1" "$2" 80
echo "6. Test TCP  443" | nc -w30 -s "$1" "$2" 443

# UDP-Ports für IPsec-VPN
echo "7. Test UDP  500" | nc -uw0 -s "$1" "$2" 500
echo "8. Test UDP 4500" | nc -uw0 -s "$1" "$2" 4500

7. Das iPhone via USB an den Mac anschließen.

8. Bei dem iPhone WLAN ausschalten sowie Mobiles Netz und Persönlicher Hostspot einschalten:

9. Bei dem Mac, WLAN deaktivieren und/oder den Ethernet-Stecker abziehen und unter
    Systemeinstellungen-Netzwerk die lokale IP-Adresse der iPhone-USB-Internetverbindung
    notieren, hier 172.20.10.3:

10. Im Terminal des Macs das Shell-Script fhs-emitter.sh ausfürhbar machen:

chmod ugo+x ~/Desktop/fhs-emitter.sh

11. Schließlich das Shell-Script ausführen:

~/Desktop/fhs-emitter.sh 172.20.10.3 200.75.1.64​

Dabei ist im vorliegenden Fall 172.20.10.3 die in Schritt 9 notierte lokale IP-Adresse des Emitters auf dem Mac und 200.75.1.64 die mit Schritt 4 festgestellte entfernte IP-Adresse des Responders auf dem FHS - selbstverständlich sind jeweils die tatsächlichen IP-Adressen einzugeben.

Zurück am Terminal unseres FreeBSD-Home-Servers

In der Ausgabe des FHS-Responder-Scripts sollten die 8 Testpakete angekommen sein:

/root/install/fhs-responder.sh
>>>>
Beenden mit <return>!
1. Test TCP   25
2. Test TCP  587
3. Test TCP  993
4. Test TCP  995
5. Test TCP   80
6. Test TCP  443
7. Test UDP  500
8. Test UDP 4500

Wenn Testpakete fehlen, dann kann man am Mac das Emitter-Script ein zweites, und vielleicht auch ein drittes Mal starten, um sicher zu gehen. Durch betätigen der Taste <RETURN> bzw. <ENTER> beendet man schließlich das Responder-Script am FreeBSD-Home-Server.

Idealerweise sind alle Testpakete angekommen, und man kann dann frohen Mutes mit den Installationen und Einrichtungen an seinem FreeBSD-Home-Server fortfahren - als nächstes besorgen wir uns einen Domain-Namen.

Wenn Testpakete fehlen, dann denkt man entweder über einen ISP-Wechsel nach oder man gibt sich mit den eingeschränkten Möglichkeiten zufrieden. Zur Erinnerung, um einen Home-Mail-Server betreiben zu können, müssen die Pakete 1-4 angekommen sein. Für die Web-Dienste, einschließlich WebMail, WebDAV, CalDAV, CardDAV müssen die Pakete 5 + 6, und schließlich für den L2TP/IPsec-VPN-Einwahlservice die Pakte 7 + 8 durchgekommen sein.

Copyright © Dr. Rolf Jansen - 2014-09-04 23:19:11

PROMOTION