Hinweis: Dieses Script stammt aus 2009 und nutzt iptables auf einem Debian mit Kernel 2.4. Die Konzepte sind zeitlos, aber die Umsetzung ist veraltet. Heute nimmt man nftables statt iptables. Trotzdem: Wer versteht was hier passiert, versteht auch nftables.
Das Setup
Dedizierte Firewall-Maschine mit drei Netzwerkkarten. Ein Interface zum Internet (PPPoE), zwei für interne Netze mit unterschiedlichen Berechtigungen. Default-Policy auf allen Chains: DROP. Alles was nicht explizit erlaubt ist, wird verworfen.
Grundstruktur
#!/bin/bash # Module laden modprobe ip_tables modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_nat_ftp # Tabellen leeren iptables -F iptables -t nat -F iptables -t mangle -F iptables -X iptables -t nat -X iptables -t mangle -X # Default: Alles verwerfen iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Custom Chains für Logging
Eigene Chains für sauberes Logging. Jedes verworfene Paket wird mit Prefix geloggt bevor es gedroppt wird:
# MY_REJECT: Protokollieren und zurückweisen iptables -N MY_REJECT iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP " iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP " iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable # MY_DROP: Portscans stillschweigend verwerfen iptables -N MY_DROP iptables -A MY_DROP -m limit --limit 7200/h -j LOG --log-prefix "PORTSCAN DROP " iptables -A MY_DROP -j DROP
Stealth Scan Detection
Ungültige TCP-Flag-Kombinationen erkennen und verwerfen. Kein normaler Client setzt SYN+FIN gleichzeitig oder schickt ein Paket ohne Flags:
# Keine Flags gesetzt iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP # SYN und FIN gleichzeitig iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP # SYN und RST gleichzeitig iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP # FIN ohne ACK iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
Connection Tracking und NAT
Stateful Firewall: Bestehende und zugehörige Verbindungen durchlassen, neue nur aus dem internen Netz erlauben. NAT per MASQUERADE für den Internetzugang:
# Loopback erlauben iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # Ausgehend: Alles erlauben iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT # Forwarding: Neue Verbindungen nur von innen iptables -A FORWARD -i ! ppp0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # NAT für interne Netze iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/24 -j MASQUERADE
Traffic Shaping mit tc
Mit tc (traffic control) und iptables -t mangle lässt sich die Bandbreite pro Client oder Netz begrenzen. iptables markiert die Pakete, tc ordnet sie in Queues ein:
# HTB Queueing Discipline auf dem internen Interface tc qdisc add dev eth2 root handle 1:0 htb default 10 tc class add dev eth2 parent 1:0 classid 1:1 htb rate 150kbit ceil 250kbit tc filter add dev eth2 parent 1: prio 0 protocol ip handle 1 fw flowid 1:1 # Pakete per iptables markieren iptables -t mangle -A FORWARD -s 192.168.100.0/24 -j MARK --set-mark 1
Kernel-Hardening
Am Ende des Scripts werden Kernel-Parameter gesetzt die über die Firewall hinausgehen:
# SYN-Cookies gegen SYN-Flood echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Source-Routing deaktivieren for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_source_route; done # Redirects ignorieren for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/accept_redirects; done # Martian-Pakete loggen for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians; done # ICMP-Ping ignorieren echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all # TCP-FIN-Timeout gegen DoS echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
Die Konzepte aus diesem Script gelten unverändert: Default DROP, Stateful Tracking, Custom Chains für Logging, Stealth Scan Detection, Kernel-Hardening. Nur die Syntax hat sich geändert. Wer heute eine Linux-Firewall baut, nimmt nft statt iptables und erspart sich die Modprobe-Zeilen. Für IPv6 braucht man eine eigene Regelkette, damals mit ip6tables, heute in nftables integriert.
Fragen? Einfach melden.

Links ist ein Standfuss mit Magnet. Dieser hält auch bei 50km/h noch auf dem Autodach.
Auf diesen wird nun die Antenne (Mitte) geschraubt. Dieses kann man nun ohne Probleme in die
Orinoco Gold PCMCIA-Karte (rechts) stecken, hier ist auch ein Prism II Chip verbaut.
Fertig….. Der Empfang ist einfach nur geil. Egal
wo man nun genau sitzt!
Jetzt fehlt nur noch ein Notebook.
Ich nutze ein Fujitsu Siemens LifeBook E 7110! Linux arbeiten mit
allen Komponenten in diesem Notebook ohne Probleme und gebastel zusammen.
Um Funknetzwerke zu finden, muss die Wlan-Karte in den Monitor Mode gesetzt werden.
Im Monitor Mode nimmt die Karte alle Packet an. Egal aus welchem Netz sie kommen und egal
für wen sie bestimmt sind.
Der Standart Linux-Kernel kann die Karte nicht in den Monitor Mode setzen. Dieser muss also gepatch
werden oder es muss ein passendes Kernelmodul erstellt werden. Am einfachsten geht es so:
0. Mit iwpriv schauen ob der eigene Kernel vielleicht schon gepatcht wurde!
1. Quellen des aktuellen Kernels installieren.
2. gcc installieren.
3. Die aktuelle Konfiguration des Kernels ins root der Kernelquellen legen.
Unter Suse: zcat /proc/config.gz > .config
Als Root unter /usr/src/linux
4. Saug dir
Dieses sollte vorher noch konfigurieren werden;-). Es gibt unter /etc/kismet/ die Datei:
kismet.conf.
In dieser müssen wir zwei Änderungen vornehmen.
Beim Punkt „suiduser=“ tragen wir hinter dem = unseren Usernamen ein mit dem wir auf der Linux
Kiste arbeiten.
Am Punkt „source=“ tragen wir hinter dem = folgendes ein: orinoco,eth1,orinocosource
Wobei wir eth1 natürlich gegebenenfalls gegen unsere Wlan-Karte austauschen!
Ein „sudo kismet“ in der Userkonsole sollte nun das Programm starten und sogleich nach Netzen
suchen.
Haben wir eines gefunden und wollen erst einmal nachschauen, was genau dort durch die Gegend fliegt.
Brauchen wir dazu ein Programm mit dessen Hilfe wir den Datenstrom auslesen können. Dieses erledigt Ethereal
super. Später ist es auch drin, mit diesem Programm sehr komplexe Filterungen auf den Datenstrom anzuwenden.
Da wir aber nur die Daten annehmen können welche auf unserem Channel gesendet werden.
Betreibt Kismet Channelhopping. D.h.: Kismet springt im ms. Takt vom Einen in den Anderen Channel.
Wenn wir einen konstanten Datenstrom mitlesen wollen, ist das scheisse! Wir können dann ja nur die Daten
mitlesen, wenn wir auch gerade im passenden Channel sind. Daher beenden wir Kismet und setzen die Karte von Hand
in den Monitor Mode und den passenden Channel. Dieses geht als User-Root so:
iwpriv eth1 monitor 1 1
eth1 ist in diesem Fall die Wlan-Karte, mit monitor 1 sagen wir das der Monitor Mode gestartet werden soll
(mit iwpriv eth1 monitor 0 würden wir ihn also wieder beenden) und die letzte 1 gibt den Channel an, in
welchem die Karte gesetzt werden soll.
Ethereal kann nun mit den im Bild angezeitgen Optionen gestartet werden.
Nun würde Ethereal JEDES Datenpaket welches im Channel 1 durch die Gegend fliegt
auffangen und speichern.
Sollte auf dem AccessPoint eine Mac-Adressenfilterung eingerichtet sein, so müssen wir uns um
diese nicht weiter kümmern. Wir versuchen uns ja nicht am AP anzumelden, sondern hören ja einfach
nur zu. Interessant wird es erst, wenn das Netzwerk die Daten verschlüsselt überträgt.
Wir bekommen zwar immer noch alles, können damit aber nichts mehr anfangen.
Es ist aber Möglich WEP-Verschlüsselungen aufzubrechen, den Schlüssel zu errechnen.
AirSnort ist ein Programm welches genau das macht. Es kann die Karte in den Monitor-Mode
packen. Wenn vom User gewünscht auch gleich noch in den passenden Channel. Ab diesem Zeitpunkt
sammelt Airsnort die verschlüsselten Packete. Bei einer 128 Bit WEP Verschlüsselung muss es ca.
6 Millionen Pakete sammeln.
Das liegt daran, dass für die WEP Verschlüsselung nur ein begrenzter
Zufallszahlenraum zur Verfühgung steht. Nach ca. 6 Millionen Paketen wiederholen sich in jedem Fall Teile.
Mit diesen kann AirSnort nun rechnen.
Hat AirSnort den Schlüssel erfolgreich errechnet, tragen wir ihn einfach mit iwpriv bei unserer Wlan-Karte
ein und schon kann es weiter gehen!
WEP Verschlüsselungen mit einer Stärke von 256 Bit sind im Vergleich noch sehr sicher. Es würde
eine sehr lange Zeit dauern die notwendigen Pakete zu sammeln. Leider arbeiten kaum Karten mit 256 Bit WEP
Schlüsseln. Es gibt auch eine neue Methode: WPA… WPA gilt bisher als sicher.
Ich stufe mein Wlan immer noch als ein feindliches Netz ein. So behandelt es auch meine Firewall und so sollte es
jeder Admin behandeln. Es ist und bleibt wohl noch über lange Zeit ein grosses Sicherheitsproblem.
Genauere Fragen zu diesem Thema beantworte ich gerne per E-Mail!
Solltest du Fragen stellen achte bitte darauf deine Frage so genau wie irgend
möglich zu stellen. Beschreibe kurz dein Problem, haue mich nicht mit log und
configs zu und habe etwas Geduld. Ich bekomme nicht nur eine E-Mail am Tag. Darum
werde ich ganz sicher nicht auf unfreundliche und ungenaue Fragen antworten. KEINER
hat ein Recht drauf von mir Support zu bekommen!!









