ADMIN-Magazin

Firewalling auf Benutzerebene mit Portsmith

Der Linux-Paketfilter IPTables ist schon länger eine ernst zu nehmende Alternative zu kommerziellen Firewall-Lösungen. Eine Funktion, die einzelne Ports für angemeldete Benutzer dynamisch frei schaltet, sucht man jedoch vergebens. In diese Bresche springt Portsmith, das es Benutzern ermöglicht, gewünschte Verbindungen selbst zu aktivieren.

Christian Ney
Share this

Die dynamische Freischaltung von Ports nach erfolgter Anmeldung eines Benutzers kennen CheckPoint- und Cisco-Administratoren schon länger unter den Begriffen ,,Client Authentication`` und ,,Cut-through Proxy``. In den allermeisten Fällen findet sich diese Funktionalität aber eher in Schulungen oder entsprechenden Prüfungen als in der Realität wieder, vorwiegend da die Umsetzung nur wenig benutzerfreundlich ist, oder aufgrund von Einschränkungen erst gar nicht genutzt werden kann. Vermutlich ist dies auch der Grund, warum IPTables eine solche Eigenschaft von Haus aus erst gar nicht mitbringt. Natürlich ließe sich eine solche Funktionalität mit einigen selbst geschriebenen Skripts nachbilden. Ob die selbst gestrickte Lösung dann aber auch von den Benutzern angenommen wird steht auf einem anderen Blatt, da für den Administrator primär zumeist die Funktionalität und Sicherheit zählt. Die Benutzbarkeit durch den Endnutzer bleibt hier in viele Fällen auf der Strecke. Portsmith macht Ports frei Abhilfe hierbei schafft das unter GPL stehende Portsmith [1], das die nötige Infrastruktur bereitstellt, um authentifizierten Benutzern die Freischaltung von Ports per Webbrowser zu ermöglichen. Mir Portsmith können sie Ports auf der Firewall nicht nur selbst öffnen, sondern vor auch Weiterleitungen von Verbindungen an interne Server einrichten. Während Ersteres praktisch für den Administrator sein kann, den SSH-Zugang von außen nur im Bedarfsfall für sich zu öffnen, zielt die zweite Variante vor allem auf Endnutzer ab, die sich beispielsweise so über das Internet mit einem internen Terminalserver verbinden können. Um potentiellen Sicherheitsrisiken vorzubeugen, bleibt der Administrator hierbei natürlich trotz allem Herr über die jeweiligen Freischaltungen. Jedem Benutzer werden die für ihn benötigten Kommunikationsbeziehungen explizit zugeordnet, so dass dieser ausschließlich Zugriff auf die für ihn freigegebenen Ressourcen erhält. Somit wird sichergestellt, dass in Nutzer nicht plötzlich das Firewall-Regelwerk in Eigenregie unterminieren kann. Potentieller Einsatzweck einer Portsmith-basierten Firewall wäre beispielsweise ein ,,VPN-Ersatz``: Durch die erfolgte Anmeldung ist sichergestellt, dass ein bestimmter Dienst ausschließlich durch den authentisierten Nutzer in Anspruch genommen werden kann. Dem Mitlesen von Verbindungen würde weiterhin durch den Einsatz verschlüsselter Verbindungen (SSH, SSL, ...) ein Riegel vorgeschoben. Auf den Einsatz eines dedizierten VPN-Servers könnte somit verzichtet werden. Als weiteres Schmankerl bringt Portsmith eine integrierte, per Webbrowser bedienbare Backuplösung mit. Per Knopfdruck werden hierbei das Regelwerk, wichtige Dateien und die Datenbank auf einen CD-Rohling gebrannt. Ein entsprechender Brenner in der Maschine ist hierfür natürlich obligatorisch. Zutaten Als Basis für Portsmith ist Ubuntu 8.0.4 Server LTS [2] vorgesehen. Natürlich steht dem Einsatz einer anderen Distribution wenig im Wege, der zuständige Administrator sollte allerdings in der Lage sein, Pfade und das Handling der Komponenten an die Bedürfnisse von Portsmith anzupassen. Das Ganze basiert auf dem Apache-Webserver [3] mit aktiviertem PHP5-Modul [4] und dessen Modul für die PostgreSQL-Datenbank [5]. Andere Datenbanksysteme bleiben außen vor, sie sind schlichtweg nicht unterstützt. Der Webserver dient im weiteren Verlauf als Frontend sowohl für den Administrator als auch für die Benutzer, deren Konten in der Postgres-Datenbank vorgehalten werden. Auch das dynamische Regelwerk wird in der Datenbank gespeichert und bei Bedarf von dort abgerufen. Im Hintergrund ablaufende Scripte erzeugen aus den Extrakten der Datenbank regelmäßig die entsprechenden IPTables-Kommandos, und fügen diese dem Regelwerk hinzu. Grundlegende Installation Die zugrunde liegende Installation von Ubuntu 8.04 Server sollte keinen Administrator vor ernste Probleme stellen. Wer aus Sicherheits- oder Performancegründen auf ein ausgeklügeltes Partionierungsschema setzt ist gut beraten, das »/var«-Filesystem auszulagern, da hier später nicht nur die Logfiles, sondern vor allem auch die Datenbank beheimatet sein wird. Die Portsmith-Dokumentation verweist auf eine anschließende Installation des »ubuntu-desktop«-Paketmakros, das zu einer vollständigen, Gnome-basierten Oberfläche führen würde. Benötigt wird dieser jedoch höchstens dann, wenn »vi« und die Kommandozeile böhmische Dörfer sind. Im Gegensatz dazu schweigt sich die Doku zu weitaus sinnvolleren Aufgaben wie dem grundlegenden Hardening des Betriebssystems leider vollständig aus. Immerhin handelt es sich hier um eine Firewall mit direkter Anbindung ans Internet, die in puncto Sicherheit mehr Sorgfalt erfahren sollte als ein normales Endsystem. Im nächsten Schritt gilt es nun, die Netzwerkschnittstellen zu konfigurieren und die restlichen, benötigten Pakete nach zu installieren. Nutzer des grafischen Desktops können hier auf die entsprechenden Hilfsmittel zurückgreifen, der Rest wird der »/etc/network/interfaces« wohl mit dem Editor des geringsten Misstrauens zu Leibe rücken. Die benötigten Pakete landen durch aptitude install -y openssh-server apache2 libapache2-mod-php5 libapache2-mod-auth-pgsql postgresql-8.3 php5-pgsql auf dem System. Wer auf die bereits integrierte Backuplösung zurückgreifen möchte, benötigt zusätzlich noch die beiden Pakete »mkisofs« und »cdrecord«. Auf dem Webserver muss man ein paar Dinge vorbereiten: Wenn es für die Firewall keine DNS-Einträge gibt, sollte zunächst der Parameter »ServerName« passend gesetzt und das SSL-Modul mit Hilfe von »a2enmod ssl« aktiviert werden. Um die Logins der Benutzer nicht im Klartext durchs Netz zu schicken, ist die Nutzung von SSL-verschlüsselten Verbindungen anzuraten. Hierzu sind im folgenden die entsprechenden Zertifikate zu erstellen. Ob diese selbst, durch eine eigene oder eine kommerzielle CA signiert werden, steht ganz im Ermessen des Administrators und der Sicherheitspolicy des Unternehmens. Portsmith Portsmith selbst wird als rund 17 MByte großes ISO-Image [6] zum Download ausgeliefert, das entweder auf CD gebrannt, oder schnell per »mount -o loop /tmp/Portsmith_4.iso /media/cdrom« eingebunden werden kann. Es enthält neben einer kurzen Anleitung zur Installation noch die diversen, im Tarball gepackten Shell- und PHP-Scripte, die Tabellenstruktur der Datenbank sowie Beispielkonfigurationen, die die Nutzung des Portsmith-Rechners als DNS- oder DHCP-Server ermöglichen. Darüber hinaus gibt es zwei Windows-Binaries (eins für den Internet Explorer, das andere für den Firefox), die die Nutzung von RDP (Remote Desktop) über die per Portsmith freigeschaltete Firewall hinweg vereinfachen. Die eigentliche Installation der Software erschöpft sich daher im Entpacken des Tarballs: »tar xvf /media/cdrom/server/ports.tar -C /«. Die im Hintergrund arbeitenden Shellskripts landen hierbei unter »/usr/local/bin«, und enthalten Variablen, die die Netzwerkstruktur wiederspiegeln, und der Portsmith-Admin anpassen muss. Sie finden sich in den beiden Dateien »fw_policy« und »fw_lookup«. Unter anderem ist es vonnöten, das externe Netzwerk sowie die offizielle IP-Adresse der Firewall anzugeben. Diejenigen, die eine oder mehrere feste IP-Adressen besitzen sind hier natürlich im Vorteil, Nutzer einer dynamischen IP müssen sich durch DynDNS [7] oder kleinen Scriptereien behelfen, die die derzeit aktuelle Adresse hier hinterlegen. Laut Dokumentation soll der Start von Portsmith über die »/etc/rc.local« durchgeführt werden. Bei einer direkt ans Internet angeschlossenen Firewall hat dies jedoch zur Folge, dass sie und die dahinter befindlichen Netze beim Start für kurze Zeit nicht durch den Paketfilter geschützt sind, da dieser so erst als allerletztes im Bootprozess gestartet würde. Ein entsprechendes, im Vorfeld ausgeführtes Init-Script oder ein Aufruf beim Hochfahren der Netzwerkschnittstellen wäre hier also sicherlich eine bessere Variante. Weiterhin muss die Datenbank vorbereitet werden. Leider verweist die Dokumentation hier auf ein potentiell fehleranfälliges Cut-and-Paste, einfacher geht es per »psql < /media/cdrom/server/TABLES.txt«. Da die eigentliche Arbeit im Hintergrund ein paar Shellskripts übernehmen, die periodisch anlaufen müssen, sind diese noch in die entsprechenden Crontabs einzutragen. Laut Anleitung ist das die Crontab von Root, vermutlich wäre der Eintrag in die »/etc/crontabs« sinnvoller. Nach einem Neustart des Webservers per »/etc/init.d/apache2 restart« ist Portsmith funktionsfähig. Administrative Tätigkeiten Die weitere Nutzung des Systems geschieht auch für den Administrator fast ausschließlich via Webbrowser. Unter der URL »https://Firewall/ports/« erscheint ein Anmeldefenster. Standardmäßig sind als Benutzername admin und als Passwort admin eingestellt. Zwar weist die Dokumentation darauf hin, dass man beides ändern soll, wenn aber die Firewall schon ans Internet angebunden ist, könnte es dafür schlimmstenfalls schon zu spät sein, da ein solches Login mehr als einfach zu erraten ist. Zugriffe ohne Unterverzeichnis (https://Firewall/) beantwortet Portsmith übrigens mit einer lapidaren ,,It works``-Seite. Man kann darüber streiten, ob das ,,Versteck`` hinter dem Unterverzeichnis ein Zugewinn an Sicherheit ist oder doch nur Security by Obscurity. Die Benutzerfreundlichkeit wird dadurch jedenfalls nicht unbedingt erhöht. Löblicherweise leitet Portsmith Zugriffe, die per HTTP auf Port 80 ankommen, automatisch auf HTTPS und Port 443 um, wodurch die Logindaten grundsätzlich verschlüsselt übers Netz gehen. Einmal eingeloggt hat der administrative Nutzer die Möglichkeit, das System und die Benutzer zu verwalten, als auch Freischaltungen für sich selbst vorzunehmen. Zwar vereinfacht dies die Nutzung von Portsmith für den Admin, da dieser mit seinem ,,normalen`` Account auch Ports öffnen kann. Eine ,,Gewaltenteilung``, wie unter Unix gewohnt wäre aber sicherlich die bessere Alternative. Immerhin gilt es auch nicht als sinnvoll, ständig als Root unter unixoiden Betriebssystemen zu arbeiten. Die eigentliche Systemverwaltung gliedert sich dann in die Administration der User und des Regelwerks. Die Liste der Nutzer ist relativ übersichtlich gehalten, und greift dem Admin bei einer Vielzahl an Einträgen durch eine Suchfunktion unter die Arme (Abbildung 1). Über den drop down-Button rechts oben lassen sich die Konten sortieren, hinzufügen, bestehende ändern oder gar löschen. Beim hinzufügen (als auch beim ändern) werden Benutzername und Passwort angegeben. Dem Benutzer wird daraufhin seine Rolle als User oder Admin zugewiesen, wobei letzterer alle Aufgaben übernehmen kann, die der ,,echte`` Systemverwalter auch erledigen darf. Eine weiter abgestufte Rollenverteilung existiert nicht. Nicht mehr benutzte Konten müssen nicht zwingend gelöscht werden, es genügt, sie zu deaktivieren. Eine zeitgesteuerte Komponente zur automatisierten Sperrung temporärer Accounts fehlt allerdings, sodass dieser Schritt grundsätzlich einen manuellen Eingriff des Admins voraussetzt. Neben der Beschreibung kann eine so genannte Default Rule eingerichtet werden. Man könnte aufgrund der Bezeichnung annehmen, dass diese ohne Zutun des Nutzers direkt nach erfolgter Anmeldung aktiv ist, doch das ist nicht der Fall. Auch die Default Rule muss zunächst manuell aktiviert werden.Die Funktion eignet sich vor allem dazu, die Funktionsweise von Regeln vor dem Nutzer zu verbergen, da er nicht zu sehen bekommt, was genau der Eintrag bewirkt. Hier lassen sich entsprechend mehrere oder kompliziertere Regeln unterbringen, ohne den User zu verwirren. Zu guter Letzt ist es möglich bereits freigegebene Regeln wieder zu entziehen, oder weitere hinzuzufügen. Abbildung 1: Benutzeraccounts lassen sich einfach anpassen und um benötigte Regeln erweitern. Die Verwaltung des Regelwerks ist der der Accounts sehr ähnlich (Abbildung 2). Auch hier kann der Portsmith-Admin Regeln suchen, ändern, hinzufügen und löschen. Abbildung 2: Anpassung des Regelwerks: Hier eine Weiterleitung von Port 80 der Firewall auf einen internen Webserver. Beim Hinzufügen oder Ändern sind neben dem verwendeten Protokoll (TCP, UDP, ICMP) noch die auszuführende Aktion (erlauben oder weiterleiten), sowie die Angabe des Zielports, respektive die des weiterzuleitenden Ports vonnöten. Der Zielrechner kann hierbei über seine IP oder (die passende DNS-Auflösung vorausgesetzt) seinen Namen angesprochen werden, die Auswahl hierfür erfolgt über das Dropdown-Feld. Weiterhin lässt sich die Regel als Default Rule für einen oder mehrere Nutzer setzen, oder ihm zur manuellen Auswahl anbieten. Über die Admin-Oberfläche sind noch weitere praktische Hilfsmittel erreichbar: Der Log Manager (Abbildung 3) gibt genauen Aufschluss darüber, welche Regel zu welchem Zeitpunkt welcher User von welcher IP aus aktiviert hat. Auch hier existiert eine praktische Suchfunktion, sodass der Überblick auch bei einer großen Anzahl von Log-Nachrichten gegeben ist. Abbildung 3: Der Log Manager verrät, wer wann welche Regel aktiviert hat. Hinter dem Tools-Schaltfeld verstecken sich vier weitere Helferlein, die durchaus Beachtung verdienen: Der Login Analyzer (Abbildung 4) verschafft dem Administrator nicht nur einen sehr guten Überblick, wer sich wann eingeloggt hat, sondern auch über die Anzahl und den Zeitpunkt des letzten fehlgeschlagenen Logins. Zur Vermeidung von Brute Force-Attacken wird die Quell-IP des Clients nämlich nach 3 falschen Logins bis zur Freigabe des Admins gesperrt. Die Sperrung geschieht jedoch in diesem Fall nicht mit Hilfe des Paketfilters, stattdessen erhält der potentielle Angreifer statt der Felder für Username und Passwort die lapidare Meldung »You are up to no good - you are now going to be blocked«, so dass auch keine Anmeldung mit Hilfe eines anderen Benutzernamens möglich ist. Schlimmstenfalls kommt es so dazu, dass sich nicht einmal mehr der administrative User zur Aufhebung der Sperre per Browser anmelden kann. In einem solchen Fall hilft nur noch der händische Zugriff auf die Datenbank. Normalerweise lassen sich die durch zu viele falsche Logins gesperrten Rechner aber über den Login Analyzer wieder freigeben. Leider ist die Funktion nicht allzu offensichtlich: Die eigentliche Freigabe erfolgt durch Aktivierung der Checkbox vor dem entsprechenden Eintrag mit abschließendem Klick auf den Submit-Button. Abbildung 4: Der Login Analyzer. Der Status listet das aktuelle Firewall-Regelwerk auf, gibt jedoch nichts anderes aus als das Kommando »iptables -L -v«. Jeden, der sich nicht mit den IPTables auskennt, dürfte die Ausgabe also eher verwirren als aufklären, eine übersichtlichere Darstellung wäre also gerade für den Einsteiger nützlich. Der Restart-Buttons stellt den ursprünglichen Zustand aller bis dahin durch Admins und Benutzer aktivierten Regeln wieder her. Bestehende Verbindungen bleiben bei diesem Schritt erhalten. Abbildung 5: Das integrierte Backup-System. Per Mausklick wird der aktuelle Zustand des Systems auf einen (beschreibbaren) CD-Rohling gebrannt. Nutzung aus Usersicht Die Nutzung von Portsmith für den User ist denkbar einfach. Analog zum Admin verbindet er sich über den Browser seiner Wahl mit der Firewall, um sich mit seinen Zugangsdaten einzuloggen. Ist die Anmeldung geglückt, bekommt der Nutzer daraufhin die Liste der für ihn freigegebenen Firewall-Regeln, aus denen er die gewünschte(n) auswählen, und per Mausklick aktivieren darf. Die Darbietung der entsprechenden Freischaltungen erfolgt leider wie in Abbildung 6 zu sehen relativ technisch. Mit der Aufzählung einzelner Ports dürften viele Endnutzer schlicht und ergreifend überfordert sein, eine aussagekräftige Beschreibung ist daher nahezu unumgänglich. An dieser Stelle ist in viele Fällen die Kreativität des Admins gefragt, da diese datenbankseitig auf 25 Zeichen beschränkt ist. Wer unbedingt möchte, kann die Spalte innerhalb der Datenbank natürlich auch manuell vergrößern. Handelt es sich um umfangreiche oder schwer verständliche Regeln, ist die beste Alternative hingegen die Nutzung der ,,Default Rules``. Abbildung 6: Nicht so einfach für den technisch unbedarften User: Die Einstellung der freigeschalteten Dienste. Auch im weiteren Verlauf ist es wichtig, den Client auf die Zusammenarbeit mir Portsmith vorzubereiten. Da Verbindungen anders als in einem VPN nicht direkt an eine dafür vorgesehene Maschine geschickt, sondern durch die Firewall weitergeleitet werden, muss der Endnutzer im Zweifel manuell eingreifen. Soll beispielsweise aus der Ferne ein interner Drucker angesprochen werden, wäre die Einrichtung eines weiteren solchen auf dem Client nötig, der dann manuell angewählt werden muss. Nicht zuletzt aus diesem Grund sollte bereits im Vorfeld eine klare Definition der Aufgabengebiete bestehen, die mit Hilfe von Portsmith abgedeckt werden sollen. Das obige Beispiel anhand des Druckers wäre zwar recht problemlos möglich, ob es sinnig ist, seine Ausdrucke unverschlüsselt durchs Internet zu schicken, steht hingegen auf einem gänzlich anderen Blatt. Regelwerk Eine Firewall ist nur so sinnvoll wie das Regelwerk, das der zuständige Paketfilter umzusetzen hat. Im Falle von Portsmith sieht die grundlegende Policy nach dem Start wie in Listing 1 aus. Listing 1: Portsmith-Filter Chain INPUT (policy DROP 22 packets, 3590 bytes)
pkts bytes target prot opt in out source destination
7 476 ACCEPT all -- eth1 * 192.168.2.0/24 0.0.0.0/0
200 17460 ACCEPT all -- lo * 127.0.0.1 0.0.0.0/0
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/sec burst 5 tcp dpt:80
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/sec burst 5 tcp dpt:25
0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/sec burst 5 tcp dpt:443
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
1 62 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 15/sec burst 5 udp spt:53 state RELATED,ESTABLISHED
0 0 ACCEPT icmp -- * * 192.168.2.0/24 0.0.0.0/0 limit: avg 5/sec burst 5

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 192.168.2.0/24 0.0.0.0/0
0 0 ACCEPT all -- * * 127.0.0.1 0.0.0.0/0
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 233 packets, 21730 bytes)
pkts bytes target prot opt in out source destination Das interne Netzwerk 192.168.2.0/24, das hinter dem Interface eth1 liegt, darf uneingeschränkt und mit Port Address Translation versehen mit dem großen weiten Internet kommunizieren. Mag dies für den einfachen Hausgebrauch oder sehr kleine Unternehmen noch akzeptabel sein, birgt diese Grundeinstellung doch hohes Gefahrenpotenzial. Entgegen des auf der Portsmith-Homepage genannten Credos ,,alle externen Ports sind geblockt bis sie nach der Anmeldung freigeschaltet werden`` sind hier jedoch nicht nur Port 80 und 443 für den Zugang zu den Webseiten, sondern auch Port 25 für den Mailverkehr freigeschaltet. Welchem Zweck diese Freischaltung dienen soll, bist unklar. Geblockt werden hingegen sämtliche ICMP-Pakete, die auf dem externen Interface ankommen, auch wenn dadurch teils wertvolle Informationen zur Fehlersuche verloren gehen. Erfreulich ist jedoch der Rückgriff auf die RELATED- und ESTABLISHED-States, so dass der Rückkanal bestehender TCP- und DNS-Verbindungen aus dem internen Netz (stateful) automatisch erlaubt ist. Weitere Rätsel gibt die standardmäßig aktivierte Source-NAT auf eine nicht näher spezifizierte IP-Adresse (192.168.1.250) auf (Listing 2). Listing 2: Source-NAT 01 Chain PREROUTING (policy ACCEPT 1603 packets, 117K bytes)
02 pkts bytes target prot opt in out source destination
03 0 0 DNAT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9100 to:192.168.1.250:9100 Vermutlich handelt es sich um das Überbleibsel einer Weiterleitung auf den LPD-Port eines internen Printservers. Auch wenn der TCP-Port 9100 standardmäßig ,,dicht`` ist, könnte der Eintrag im Falle eines ähnlichen Setups zu Fehlern führen, deren Ursache sich nicht auf den ersten Blick erschließt. Glücklicherweise lässt sich die grundlegende Policy ganz den Bedürfnissen des Admins und der Sicherheitspolicy anpassen. Hierzu sind die Vorgaben aus der »/usr/local/bin/fw_policy« einfach zu löschen oder den Wünschen entsprechend zu erweitern, wodurch auch komplexeste initiale Regelwerke problemlos ermöglicht werden. Wem die grundlegenden IPTables-Kenntnisse fehlen, der sollte dabei lieber fachkundige Hilfe in Anspruch nehmen. Nach erfolgtem Login eines Nutzers und der Freischaltung der für ihn vorgesehenen SSH-Verbindung wurde die INPUT-Chain entsprechend erweitert (Listing 3). Listing 3: Geänderte Regeln 01 Chain INPUT (policy DROP 122 packets, 14737 bytes)
02 pkts bytes target prot opt in out source destination
03 85 7589 ACCEPT tcp -- eth0 * 192.168.0.10 0.0.0.0/0 tcp dpt:22
04 14 961 ACCEPT all -- eth1 * 192.168.2.0/24 0.0.0.0/0
05 2497 640K ACCEPT all -- lo * 127.0.0.1 0.0.0.0/0
06 23 3652 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/sec burst 5 tcp dpt:80
07 0 0 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/sec burst 5 tcp dpt:25
08 262 37622 ACCEPT tcp -- eth0 * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/sec burst 5 tcp dpt:443
09 114 22241 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
10 3 204 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 15/sec burst 5 udp spt:53 \
state RELATED,ESTABLISHED
11 0 0 ACCEPT icmp -- * * 192.168.2.0/24 0.0.0.0/0 limit: avg 5/sec burst 5 Wie hier unschwer zu erkennen werden die dynamischen Regeln nach ganz oben gesetzt. Potentiellen Überscheidungen mit existierenden, nicht so exakt gefassten Einträgen wird somit aus dem Weg gegangen. Ein wenig erschreckend hingegen ist die Destination (0.0.0.0) der neuen Regel, da sie laut der Portsmith-eigenen Policy ausschließlich auf die externe IP begrenzt sein sollte. Sicherheit Besonderes Augenmerk weiterer sicherheitstechnischer Betrachtungen ist in diesem Fall sicherlich nicht der Paketfilter an sich, sondern vor allem der ständig erreichbare Webserver, insbesondere die dabei zum Einsatz kommende Scriptsprache PHP. Ließe sich die Authentifizierung an dieser Stelle durch Schwachstellen innerhalb der Programmierung oder der Sprache selbst aushebeln, wäre das gesamte Netz potentiell gefährdet, einem Angreifer stünden so Tür und Tor offen. Ein weiteres lohnendes Ziel stellt die Datenbankanbindung dar. Lässt sich das Regelwerk durch eine passende SQL-Injection ,,anpassen``, wird der Schutz, den die Firewall eigentlich bieten sollte, mehr als löchrig. Auch wenn bisherige Untersuchungen des Portsmith-PHP keine offensichtlichen Schwachstellen zutage förderten, ist ein erfolgreicher Angriff nicht auszuschließen. Dass Updates an dieser Stelle so zeitnah wie möglich eingespielt werden, versteht sich von selbst. Für einen erweiterten Schutz wäre die zusätzliche Installation von Suhosin [8] und / oder Mod-Security [9] anzuraten, die günstigstenfalls auch gegen bislang unbekannte Attacken schützen könnten. Das System basiert darauf, dass die IP-Adresse des authentisierten Clients für die jeweiligen Verbindungen freigeschaltet werden. Die Adresse wird folglich über die Quell-IP gewonnen, die auf Port 443 des Webservers ankommt. Dieses Verhalten könnte sich wiederum als mögliche Gefahrenquelle erweisen: Im einfachsten Fall sitzt der Client ohne es zu wissen hinter einem Proxy, der die Verbindung zur Portsmith-Firewall stellvertretend für den Webbrowser aufbaut, wodurch nicht die Adresse des Clients, sondern die des Proxies freigeschaltet würde. Dies hätte zur Folge, dass jeder Benutzer dieses Proxies analog der Rechte des eigentlichen Nutzers Zugang zu dessen freigegebenen Ressourcen erhalten würde. Noch schlimmer wäre der Fall, in dem ein Angreifer den Client unbemerkt über einen durch ihn kontrollierten Proxyserver umleitet. Im Zusammenspiel mit der relativen Langlebigkeit der Freischaltung wäre weiteren Angriffen Tür und Tor geöffnet. Gute Ergänzung Portsmith ist eine praktische Erweiterung für eine konventionelle Firewall. Die Lösung ergänzt das traditionell statische Regelwerk um dynamische, im Vorfeld definierte Freischaltungen, die ein per Webbrowser angemeldeter Benutzer selbst auslösen kann. Ein potenzieller Einsatzzweck wäre die weitere Absicherung des Zugriffs auf einen firmeninternen Webmailer oder anderen Diensten wie Sun Secure Global Desktop [10]. Im Fall verschlüsselter Verbindungen könnte es als ,,Ersatz`` für ein VPN dienen. Wer hingegen Wert auf eine echte VPN-Lösung legt, kann ohne weiteres IPSec-Software wie strongSwan [11] oder alternativ OpenVPN [12] installieren. Portsmith ,,nur`` dazu zu nutzen, einem eingeschränkten Nutzerkreis den SSH-Zugriff auf die Firewall zu gewähren wäre hingegen mit Kanonen auf Spatzen geschossen. Hier wäre Portknocking [13] sicherlich eine einfachere und sichere Alternative. Nutzer einer dynamischen IP-Adresse sind auf manuelles Zutun oder externer Hilfe wie beispielsweise DynDNS-Diensten angewiesen um die Konfiguration mit der derzeit aktiven offiziellen IP auf dem Stand zu halten. Das vorgegebene Regelwerk hinterlässt leider ein paar Fragezeichen, und ist an einigen Stellen definitiv verbesserungswürdig. Glücklicherweise sind die Anpassungen schnell durchgeführt, jedoch sind hierfür manuelle Änderungen an den durch Portsmith vorgegebenen Dateien nötig. Dies könnte im Falle von Updates zu Problemen führen, das sollte der Admin also als im Hinterkopf (oder noch besser der Dokumentation) behalten. Auch weicht diese Tatsache das Konzept einer schlüsselfertigen Firewall-Lösung auf. Ein Administrator ohne grundlegende Kenntnisse über IPTables oder des Linux-Betriebssystems ist an dieser Stelle schlicht überfordert. Mehr Sicherheit Leider setzt Portsmith im Fall der Authentisierung auf ein eigenes, datenbankbasiertes Konzept. Eine Anbindung an RSA Token-Systeme oder Single-Sign-On-Lösungen wäre hier wünschenswert. Das wäre nicht nur ein weiteres Plus an Komfort für den Benutzer, sondern würde die Anmeldung besonders im Fall von RSA noch um eine weitere Sicherheitsmaßnahme ergänzen. Weiterhin wünschenwert wären zeitliche Einschränkungen, beispielsweise zur automatischen Sperrung temporärer Accounts oder der Beschränkung von Logins für bestimmte Nutzer auf die Bürozeiten. Zu hoffen lässt jedoch, dass das System flexibel genug ist, auch solche Erweiterungen nicht auszuschließen. Alles in allem ist Portsmith, die entsprechende Grundkonfiguration und weitere Absicherung vorausgesetzt, eine nützliche Erweiterung einer IPTables-basierten Firewall, die sowohl den Nutzern als auch dem Administrator das Leben erleichtern wird. Der große Vorteil des Systems ist die Erweiterbarkeit durch die Ubuntu-Basis. Die Firewall könnte so also auch als eigener Web-, Mail- oder sonstiger Server ,,missbraucht`` werden. Dass dabei die Sicherheit durch weitere Angriffspunkte ausgehöhlt wird, sollte man dabei jedoch im Hinterkopf behalten. (ofr)


Der Autor Christian Ney beschäftigt sich als Systems Engineer Security für die Computacenter AG & Co. oHG den lieben langen Tag lang mit Netzwerk-, Security- und Firewallthemen.

Infos
[1] Portsmith: [http://ddbolt.net/portsmith.php]
[2] Ubuntu Server Download: [http://www.ubuntu.com/getubuntu/download]
[3] Apache Webserver: [http://httpd.apache.org]
[4] Hypertext PreProcessor: [http://www.php.net]
[5] PostgreSQL: [http://www.postgresql.org]
[6] Portsmith-Download: [http://ddbolt.net/downloads/Install_CD]
[7] DynDNS: [http://www.dyndns.org]
[8] Suhosin: [http://www.hardened-php.net/suhosin.127.html]
[9] Mod-Security: [http://www.modsecurity.org]
[10] Sun Secure Global Desktop: [http://www.sun.com/software/products/sgd/index.jsp]
[11] StrongSwan: [http://www.strongswan.org]
[12] OpenVPN: [http://openvpn.net]
[13] Portkocking: [http://www.portknocking.org]