Internet-Router im Eigenbau (Teil 2)

17.07.2003 von Dieter Mayer
Der Selbstbau-Fli4l-Router aus dem ersten Teil wird erwachsen: Ein Mini-Webserver, erweitertes Routing und Firewall-Funktionen machen ihn zu einem vielseitigen Alleskönner.

Nachdem die Grundkonfiguration des Eigenbau-Routers im ersten Teil fertig gestellt ist, widmen wir uns nun im zweiten Teil zusätzlichen Features und dem Feintuning des Systems.

Fli4l lässt sich durch sein offenes Konzept mittels so genannter OPT-Module um viele nützliche Funktionen erweitern, von denen in diesem Beitrag folgende besprochen werden:

Damit ist die Leistungsfähigkeit des Fli4l-Systems zwar noch nicht ausgeschöpft, aber auf der Diskette wird es so langsam eng. Außerdem steht damit bereits ein ausreichend funktionaler und abgeschirmter Router zur Verfügung.

Überwachung per Browser

Eine komfortable Anzeige aktueller Einstellungen und statistischer Informationen ist auch über einen Browser möglich. Das entsprechende Add-on ist der Mini-Webserver "httpd", dessen Konfiguration über die Textdatei fli4l-2.0.8\\config\\httpd.txt erfolgt. Den httpd können Sie ebenfalls von der Fli4l-Homepage herunterladen.

Die Variable OPT_HTTPD aktiviert den Webserver, während über HTTPD_PORT die Portadresse festgelegt wird. Der Standardport eines Webservers ist 80, wenn Sie jedoch einen internen Webserver durch Port-Forwarding (dazu später mehr) im Internet zur Verfügung stellen wollen, muss der httpd auf einem anderen Port lauschen. Die Portadresse 8080 ist dabei ein guter Wert, da man sie sich einfach merken kann. Auch hier gilt, dass in der Konfiguration nicht aufgeführte Bereiche so belassen werden, wie sie sind):

#---------------------------------------------
# Optional package: HTTP-Server for Monitoring
#---------------------------------------------
OPT_HTTPD='yes'
HTTPD_PORT='8080' # Standard: 80

DynDNS - der Service für dynamische IP-Adressen

Falls Sie interne Dienste im Internet verfügbar machen wollen, sind die vom Provider zugeteilten dynamischen IP-Adressen hinderlich, da es zu mühselig wäre, die neue Adresse nach jeder Einwahl allen Interessenten einzeln mitzuteilen.

Hier bietet es sich an, einen Service wie etwa DynDNS zu nutzen, der in der einfachsten, aber ausreichenden Variante kostenlos ist. Dieser Service wandelt eine dynamische IP-Adresse, die von OPT_DYNDNS automatisch bei jeder Router-Einwahl gemeldet wird, in eine für Sie reservierte Domain wie meine_page.dyndns.org um. Schon sind Ihre Dienste im Web unter diesem Domain-Namen jederzeit erreichbar.

Das entsprechende Zusatzpaket nennt sich OPT_DYNDNS und wird nach dem Extrahieren des Archivs über die Datei fli4l-2.0.8\\config\\dyndns.txt konfiguriert:

#-------------------------------------------
# Optional package: dyndns
#-------------------------------------------
OPT_DYNDNS='yes'
DYNDNS_N='1'
DYNDNS_PROVIDER_1='DYNDNS'
DYNDNS_USER_1='LOGIN-NAME'
DYNDNS_PASSWORD_1='PASSWORT'
DYNDNS_HOST_1='meine_page'
DYNDNS_DOMAIN_1='dyndns.org'

OPT_DYNDNS unterstützt neben DynDNS noch weitere Anbieter von dynamischen Diensten, so dass Sie den für Sie geeignetsten Dienstleister auswählen können.

Port-Forwarding

Sollen Server und Dienste, die im internen Netz betrieben werden, auch im Internet sichtbar sein, müssen die entsprechenden Ports durch die Firewall hindurch zu dem Rechner geschleust werden, der im LAN den Dienst anbietet (Port-Forwarding).

Dazu ist zuerst das Basispaket "OPT_PortFW" in der Datei fli4l-2.0.8\\config\\base.txt zu aktivieren. Weiterhin laden Sie das zusätzliche OPT-Paket PortFWup von der Fli4l-Homepage, entpacken es im Fli4l-Verzeichnis und setzen danach in der Datei fli4l-2.0.8\\config\\portfwup.txt die Variable OPT_PORTFWUP auf "yes":

#--------------------------------------
# Optional package: PORTFW
# If you set OPT_PORTFW='yes',
# you can also edit opt/etc/portfw.sh
#--------------------------------------
OPT_PORTFW='yes'

#--------------------------------------
# Optional package: PORTFWUP
#--------------------------------------
OPT_PORTFWUP='yes'

Das PortFWup-Modul ruft beim Start des Routers ein Script auf, welches das Eintragen und Aktivieren der Port-Forwardings übernimmt. Für die eigentlichen Portregeln ist das Script \\fli4l-2.0.8\\opt\\etc\\portfw.sh zu editieren. Im Beispiel auf der nächsten Seite sollen sieben Ports zu zwei PCs durchgeschleift werden:

Port-Forwarding Beispiel

Zunächst definieren Sie in portfw.sh die IP-Adressen der Server im LAN, auf denen die Dienste laufen, die im Internet zu sehen sein sollen.

#--------------------------------------
# Define your PCs to forward ports to:
#--------------------------------------
hiddenhost1=192.168.1.2
hiddenhost2=192.168.1.3
/usr/sbin/ipmasqadm portfw -a -P tcp -L $ip 20 -R $hiddenhost1 20
/usr/sbin/ipmasqadm portfw -a -P tcp -L $ip 21 -R $hiddenhost1 21
/usr/sbin/ipmasqadm portfw -a -P tcp -L $ip 80 -R $hiddenhost1 80
/usr/sbin/ipmasqadm portfw -a -P tcp -L $ip 4662 -R $hiddenhost2 4662
/usr/sbin/ipmasqadm portfw -a -P udp -L $ip 4672 -R $hiddenhost2 4672
/usr/sbin/ipmasqadm portfw -a -P tcp -L $ip 6699 -R $hiddenhost2 6699
/usr/sbin/ipmasqadm portfw -a -P udp -L $ip 6257 -R $hiddenhost2 6257

Die darauf folgenden Zeilen (/usr/sbin/ipmasqadm) legen fest, welches Protokoll (TCP oder UDP) jeweils zu berücksichtigen ist. Nach der Variable $ip geben Sie den Port an, der vom Internet aus sichtbar ist. Sofern auf dem internen Rechner die gleiche Portnummer genutzt werden soll, ist nach der Variable $hiddenhostx ebenfalls der gleiche Port einzutragen. Es steht Ihnen jedoch auch frei, intern eine andere Portadresse zu verwenden. Beispielsweise würde mit dieser Zeile der externe Port 1111 intern auf den Webserverport 80 umgewandelt, etwa um zwei verschiedene Webserver im LAN ansprechen zu können:

/usr/sbin/ipmasqadm portfw -a -P tcp -L $ip 1111 -R $hiddenhost2 80

Wenn Sie die Verfügbarkeit der nun freigegebenen Ports durch Eingabe Ihrer externen IP testen wollen, werden Sie ohne Verwendung eines im Internet stehenden Proxy-Servers keine Ergebnisse aus Ihrem Netz erhalten. Also konfigurieren Sie Ihren Browser entsprechend, beispielsweise unter Verwendung des Proxy-Servers der Telekom (www-proxy.btx.dtag.de, Port 80).

Sollten Sie nach entsprechender Konfiguration kein Resultat erzielen, sollte also etwa der Webserver nicht erreichbar sein, deaktivieren Sie eine eventuell installierte lokale Firewall probeweise, da diese ja gerade dazu dient, Zugriffe aus dem Internet abzuwehren.

Routing- und Firewall-Funktionen

Fli4l verfügt neben dem NAT-Masquerading über weitere Sicherheits-Features, die beispielsweise das Eindringen von Hackern oder den Missbrauch des Internet-Zugangs erschweren (fli4l-2.0.8\\config\\base.txt). Eine dieser Funktionen ist das Sperren von ausgehenden Verbindungen für bestimmte Rechner - etwa, um per WLAN angebundenen PCs nur Zugriff auf das interne Netz, nicht aber das Internet zu geben.

#-------------------------------------------
# Routing: internal hosts to deny forwarding
#-------------------------------------------
FORWARD_DENY_HOST_N='2'
FORWARD_DENY_HOST_1='192.168.1.15'
FORWARD_DENY_HOST_2='192.168.2.16'

Gerade unter Windows gibt es spezielle, vom System genutzte Ports, die man tunlichst sperren sollte, damit nicht das System kompromittiert werden kann. Im Besonderen sind dies die Ports 137, 138 und 139, über welche Dienste wie WINS, NetBIOS, Logon oder die berüchtigte Dateifreigabe abgewickelt werden. Keinesfalls sollten diese Ports nach außen geroutet oder durch die Firewall hindurchgelassen werden. Die folgenden Anweisungen unterdrücken das Port-Forwarding für die genannten Ports in beide Richtungen:

#-----------------------------------------
# Routing: ports to reject/deny forwarding
# (from inside and outside!)
#-----------------------------------------
FORWARD_DENY_PORT_N='1'
FORWARD_DENY_PORT_1='137:139 REJECT'
FORWARD_TRUSTED_NETS='

Trojaner unterdrücken

Ebenso ist denkbar, bekannte Trojaner-Ports präventiv zu unterdrücken (eine Übersicht finden Sie etwa hier oder hier).

Eine weitere Blockade gegen Hacker ist das Sperren bestimmter Ports von außen - Anfragen an diese Adressen werden von der Firewall abgewiesen (REJECT). Damit aber beispielsweise erwünschte Port-Forwardings oder DNS-Zugriffe weiterhin funktionieren, müssen dafür Lücken in der Firewall belassen werden:

#--------------------------------------
# Firewall: ports to reject/deny from
# outside (all served ports)
#--------------------------------------
FIREWALL_DENY_PORT_N='7' # Anzahl
FIREWALL_DENY_PORT_1='0:19 REJECT'
# 20/21 offen für FTP
FIREWALL_DENY_PORT_2='22:52 REJECT'
# 53 offen für DNS
FIREWALL_DENY_PORT_3='54:79 REJECT'
# 80 offen für HTTPD
FIREWALL_DENY_PORT_4='81:112 REJECT'
# 113 offen für AUTH
FIREWALL_DENY_PORT_5='114:1023 REJECT'
FIREWALL_DENY_PORT_6='5000:5001 REJECT'
# sperre imond- und telmond-ports
FIREWALL_DENY_PORT_7='8080 REJECT'
# interner httpd, wie eingerichtet
FIREWALL_DENY_ICMP='yes'

Die letzte Zeile ist besonders interessant: Sofern die Variable FIREWALL_DENY_ICMP auf yes gesetzt wird, antwortet der Router nicht mehr auf ICMP-Anfragen aus dem Internet, typische Ping-Scans zum Auffinden von benutzten Adressen laufen nunmehr ins Leere.

Security

Weitere Bausteine in den erweiterten Fli4l-Features sind allgemeine Sicherheitsfunktionen, deren Anwendung im Einzelfall erforderlich werden könnte.

Relativ simpel und nur wirkungsvoll für unerfahrene Surfer ist das Sperren der Namensauflösung von einzelnen Seiten oder ganzen Toplevel-Domains in der Datei fli4l-2.0.8\\config\\base.txt (dies kann aber durch direkte Eingabe der IP-Adresse im Browser umgangen werden):

#--------------------------------------
# Domain configuration:
#--------------------------------------
DNS_FORBIDDEN_N='2'
DNS_FORBIDDEN_1='sexsite.de'
DNS_FORBIDDEN_2='ru'

Der erste Fall sperrt alle DNS-Anfragen an sexsite.de, während im zweiten Beispiel alle Anfragen an die Toplevel-Domain ru (Russland) als nicht vorhanden zurückgemeldet werden.

Interessant für Büros könnte eventuell die Festlegung einer Surferlaubnis nur zu bestimmten Zeiten und Wochentagen sein, etwa nur an Arbeitstagen von 8 bis 18 Uhr. Konfiguriert wird dies in der Datei fli4l-2.0.8\\config\\dsl.txt:

#---------------------------------------
# Optional package: PPPoE
#---------------------------------------
# PPPOE_TIMES='Mo-Su:00-24:0.0:Y' #immer
PPPOE_TIMES='Mo-Fr:08-18:0.0:Y'

VPN-Server

Weiterhin von Interesse ist der Betrieb eines internen VPN-Servers, um sichere Zugriffe von akkreditierten Clients aus dem Internet zu gewährleisten. Für diese Anwendung reicht das weiter oben besprochene Paket OPT_PORTFWUP nicht aus, da es nur TCP- und UDP-Pakete routen kann, das für VPN benötigte GRE-Protokoll jedoch nicht. Die Lösung bringt das optionale Paket OPT_IPFWD.

Zur Konfiguration verwenden Sie mehrere Textdateien, beginnend mit fli4l-2.0.8\\config\\ipfwd.txt. Tragen Sie dort die IP-Adresse des internen Rechners ein, der den VPN-Serverdienst, beispielsweise ein Windows 2000 Advanced Server, zur Verfügung stellt.

#--------------------------------------
# Package tools
#--------------------------------------
OPT_IPFWD='yes'
IPFWD_VPNSERVER='192.168.1.5'

In der Hauptkonfigurationsdatei fli4l-2.0.8\\config\\base.txt muss zwingend die folgende Option aktiviert sein, um die Verwendung des Protokolls PPTP zuzulassen:

#--------------------------------------
# Masquerading:
#--------------------------------------
MASQ_NETWORK='192.168.1.0/24'
MASQ_MODULE_N='1'
MASQ_MODULE_1='pptp'

Das eben aktivierte Protokoll PPTP benutzt neben dem erwähnten GRE-Protokoll zusätzlich den Port 1723 mit den Protokollen TCP und UDP, die dementsprechend durch Port-Forwarding an den Zielserver weitergeleitet werden müssen (fli4l-2.0.8\\config\\portfwup.txt).

#--------------------------------------
# Define your PCs to forward ports to:
#--------------------------------------
hiddenhost3=192.168.1.5
/usr/sbin/ipmasqadm portfw -a -P tcp -L $ip 1723 -R $hiddenhost3 1723
/usr/sbin/ipmasqadm portfw -a -P udp -L $ip 1723 -R $hiddenhost3 1723

Grafische Statistik mit SGraph

SGraph sammelt auf dem Router Daten verschiedener Quellen wie Speicherverbrauch, CPU- oder Bandbreitenauslastung und zeigt die daraus erstellten Statistiken grafisch aufbereitet auf einem Browser an.

Voraussetzung zum Einsatz von SGraph ist ein laufender Mini-Webserver (OPT_HTTPD). Die Konfigurationsdatei findet sich unter fli4l-2.0.8\\config\\sgraph.txt. Die Variablen SGRAPH_TARGET_x definieren dabei die Quellen, aus denen die Daten gesammelt werden sollen. Doch Achtung: SGraph ist relativ speicher- und ressourcenhungrig, so dass nur ein paar Quellen ausgewählt werden sollten - es kann passieren, dass bei zu vielen die Erstellung der Bootdiskette wegen Speichermangel misslingt!

#---------------------------------------------
# optional package: sgraph v0.91
#---------------------------------------------
OPT_SGRAPH='yes'
SGRAPH_TARGET_N='4'
SGRAPH_TARGET_1='cpu'
SGRAPH_TARGET_2='eth0_traffic'
SGRAPH_TARGET_3='on_offline'
SGRAPH_TARGET_4='rootopt_fs'

Ein Zeitserver für das Netz

Gerade wenn mehrere Rechner in einem Netzwerk arbeiten, ist es ohne Synchronisation mit einem Zeitserver fast ausgeschlossen, dass alle PCs die gleiche Uhrzeit aufweisen. Manche Anwendungen im LAN verlangen jedoch nach gleichlaufenden Systemuhren, etwa um die letzte Änderung an einer Datei zweifelsfrei feststellen zu können. Fli4l bietet dazu mit dem zusätzlichen Modul Time eine entsprechende Option (fli4l-2.0.8\\config\\time.txt).

#--------------------------------------
# Optional package: TIME
#--------------------------------------
OPT_TIME='yes'
TIME_ZONE='MET' # für Deutschland MET
TIME_SERVER='ptbtime1.ptb.de'
TIME_CIRCUITS='pppoe'

Die nun mit dem Internet synchronisierte Systemzeit des Routers lässt sich entweder über den Windows-Client "IMONC" (siehe Teil 1 des Workshops) setzen, oder auf den Rechnern laufen entsprechende Clients, die über den Port 37 automatisch die Zeit mit dem Zeitserver abgleichen.

Aufrüst-Kits

Fli4l bietet durch sein offenes Konzept genügend Spielraum für weitere Ausbauten. Findige Programmierer haben dazu eine Reihe von spezialisierten Zusatzpaketen geschaffen, die auch exotische Szenarien abdecken. So wäre es beispielsweise möglich, einen Wireless Accesspoint an eine zusätzliche Netzwerkkarte anzuschließen und WLAN-Clients nur über einen VPN-Tunnel in das eigentliche LAN zu lassen. Möchtegern-Hacker würden dabei an der Firewall abgewiesen und bekämen weder Zugriff auf das LAN noch auf die Internet-Verbindung.

Ein Stöbern auf der Fli4l-Homepage fördert viele interessante Schätze zu Tage, neben einer Vielzahl von zusätzlichen OPT-Modulen finden sich dort auch eine Reihe von How-To-Anleitungen - etwa um VNC- oder SSH-Server zu betreiben oder zwei komplette LANs per Fli4l zu verbinden. (mha)