Hallo zusammen,
Ich möchte mal ein Bischen mit Mikrocontrollern rumspielen und wollte
mir zu diesem Zweck ein developerboard anschaffen. Als erstes Projekt
möchte ich eine Firewall bauen. Ich habe die Threats hier dazu gelesen
und mir das ATNGW100 Network Gateway Kit angeschaut. Jetzt mal eine
dumme Frage: Kann ich da ein Display anschliesen?
Ansonsten hab ich mir als Alternative das EasyARM rausgesucht. Da kann
ich ein Display anschließen und mehrere serielle LAN-Anschlüsse. Jetzt
stellt sich mir die Frage ob ich bzw. mit welchem Speed ich bei dem
Board die Packete vom einen LAN Port zum anderen schicken kann. Auserdem
wollt ich um Erfahrungen bitten bzgl. des Speeds des Prozessors den ich
dafür brauch. Ich würde gern eine Statefull Inspection machen.
Achja, Linux sollte nicht auf dem Board laufen, ich will alles von Hand
machen.
Für Tips und Links zur weiterführenden Literatur wär ich sehr dankbar.
Viele Grüße
Frank
Eine firewall... bei ADSL Speed von 5000kbit/s ergibt sich die datenrate
zu 500kbyte/s. Weitefuehrende Literatur ist das 3 baendige Werk : Ich
und TCP/IP, oder aehnlich, fuer 300 Euro.
ich möchte dich ja nicht entmutigen, aber eine "Statefull Inspection"
macht man nicht mal ebend so. Da hängt viel wissen über die Verwendeten
Protokolle tran z.b. Aktives-FTP.
Dazu kommt dan eine eventuelle fragmentierung mit der man umgehen muss.
Das ganze dann noch ohne ein Betriebssystem darunter ist schon nicht
ohne. Eventuell erstmal mit einen "dummen" Router anfangen und dann zu
einer einfachen Packet-Filter firewall übergehen.
Also Infos über das FTP brauch ich bei einer Stateful Inspection nicht,
das wäre dann ja schon eine Deep Packet Inspection oder reden wir
aneinander vorbei. Ich dachte ich arbeite halt mit SOCKET / DGRAM bzw
SOCKET / STREAM o.ä.
Leider ebend doch, beim Aktiven FTP wird vom Server eine Verbindung zum
Client aufgebaut, deine Firewall muss aus dem FTP-Kommando Kanal den
dynamischen Port auslesen und ihn in der Firewall freischalten. Und
sicherstellen das dir niemand etwas unterjubelt und du auf jeden Anfrage
jeden Port öffnest.
Was ist auserdem eine Hardware Firewall, wenn du eh software schreibt.
Unter Hardwarefirewall könnte ich mir ein Relais vorstellen, der rest
ist alles Software egal ob es auf einen Richtigen PC oder was "embedded"
ist.
Nachtrag:
was meist du mit SOCKET DGRAM bzw SOCKET STREAM. Eine
Firewall/Router baut nicht selber eine Verbindung auf. Sie Analysiert
Packete da gibt es erstmal nur den RAW-Socket mehr nicht. Ob es UDP oder
TCP ist mussst du alles selber erledigen. Meist kommt ja auch noch NAT
dazu wo du die packete manipulieren musst und die Antworten neu zuordnen
musst.
Naja, ich dachte das ich halt in C ein Programm schreib welches
Verbindungen von ANY animmt, sich forked und dann im TCP die Flags
auswertet ob SYN SYN/ACK etc, und dann das Packet an die Destination
weiterleitet oder Verwirft. NAT ist nicht nötig da es hinter meinem
Router arbeiten soll.
Also ich denke dass sowas nur Sinn macht, wenn du ein Dev-board findest
auf dem auch ein Linux läuft. Dann hast schon mal die meisten
Softwareteile "onboard".
wenn du alles "zu fuß" machen willst fehlt dir (vermutlich) das
detailierte Wissen über TCP/IP & co., aber auf alle Fälle die Zeit das
vernünftig und stabil hinzubekommen.
Falls es dir nur darum geht, eine Hardware-Firewall (*) zu haben, würde
ich mir irgend einen Router besorgen, auf dem DD-WRT oder so was in der
Richtung läuft. (ich weiß, das bietet nicht den hier gewünschten
Bastelfaktor)
Gruß
Roland
* eine Hardware-Firewall ist für mich jede Firewall die nochmal zwischen
Rechner und Internetanschluss hängt und mich "schützt" ohne dass ich auf
meinem Rechner zus. Software installieren muss. Dass auf dieser Box auch
Software läuft ist (denke ich) klar.
@Roland: Genau so definiere ich eine HW Firewall auch.
Ansonsten geht es mir NICHT darum das es stabil Läuft sondern darum das
ich etwas über Microcontroller Programmierung lerne und mir die
Ansteuerung einer Segment Anzeige zu langweilig ist ;)
> Naja, ich dachte das ich halt in C ein Programm schreib welches> Verbindungen von ANY animmt, sich forked und dann im TCP die Flags> auswertet ob SYN SYN/ACK etc, und dann das Packet an die Destination> weiterleitet oder Verwirft. NAT ist nicht nötig da es hinter meinem> Router arbeiten soll.
Popcorn!
> Naja, ich dachte das ich halt in C ein Programm schreib welches> Verbindungen von ANY animmt, sich forked
Das ist schon der falsche Ansatz, hast du mal geschaut wie viele
Packet/Verbindungen aufgebaut werden?
Das Forken braucht dafür viel zu viele Resourcen ist ist zu langsam. Was
du willst ist eine Router mit Firewall funktionalität.
Dafür bekommt du alle ankommende Packete einfach als Packet (void* +
length) und dann musst du entscheiden was mit dem Packet gemacht wird,
weiter leiten, zurückweisen, ignorieren und musst eine neues Packet
zusamemnbauen und über das passende Lan Interface übertragen.
Was du vor hast ist eine Art universeller Proxy aber keine Firewall.
Wenn du mit Socket und Forks anfängst bist du auf Layer6 ein
Router/Firewall treibt sich auf layer 3 und 4 rum.
>Naja, ich dachte das ich halt in C ein Programm schreib welches
Verbindungen von ANY animmt, sich forked und dann im TCP die Flags
auswertet ob SYN SYN/ACK etc...
Forken macht man allenfalls auf einem PC, aber sicher nicht auf einem
Embedded System, egal wieviel RAM da nun ist. Die Denkensweise ist eine
ganz andere, der erste Gedanke ist immer, wieviel RAM und Code braucht
das, und der zweite : Wieviele Mikrosekunden dauert es. Der dritte
Gedanke ist dann : wieviel Strom braucht die Maschine.
Ich wuerd mal ein einfacheres Projekt anpacken.
> Ich möchte mal ein ...> Ich würde gern eine Statefull Inspection machen.> ... ich will alles von Hand machen.
Will, möchte, würde...
> Als erstes Projekt möchte ich eine Firewall bauen.> ... das ich etwas über Microcontroller Programmierung lerne> und mir die Ansteuerung einer Segment Anzeige zu langweilig ist ;)
Ja, so ist das: gleich alles wollen und zwei Schritte auf einmal machen,
und dann auf die Schnauze fallen.
Und dann:
> Jetzt mal eine dumme Frage: Kann ich da ein Display anschliesen?
Mir scheint, du vermutest die Probleme an einer anderen Stelle, als sie
in der Wirklichkeit auftreten werden.
Machs doch erst mal einfach:
- nimm so ein Dev-Board
- und schalte übers Internet die LEDs an und aus
- dann schliess ein LCD an
- und gib übers Internet Text aus
Du wirst nicht glauben wie schön die Blumen blühen,
bis das fehlerfrei läuft ;-)
BTW:
> Ich würde gern eine Statefull Inspection machen.http://de.wikipedia.org/wiki/Stateful_Packet_Inspection