2.1 PPPD und Active Filter

Für fli4l setzen wir den im Link angegebenen Ausdruck ein:

        'outbound and not icmp[0] != 8 and not tcp[13] & 4 != 0'
und erreichen damit, daß grundsätzlich nur vom lokalen Netz ins Internet gesendete Packete die Verbindung offen halten, mit ein paar Ausnahmen:

Dieser Ausdruck wird normalerweise vom PPPD in einen vom Kernel verwendbaren Paket-Filter umgesetzt. Dieser würde in diesem Beispiel wir folgt aussehen:

#
# Expression: outbound and not icmp[0] != 8 and not tcp[13] & 4 != 0
#
(000) ldb      [0]
(001) jeq      #0x0             jt 17   jf 2
(002) ldh      [2]
(003) jeq      #0x21            jt 4    jf 18
(004) ldb      [13]
(005) jeq      #0x1             jt 6    jf 11
(006) ldh      [10]
(007) jset     #0x1fff          jt 18   jf 8
(008) ldxb     4*([4]&0xf)
(009) ldb      [x + 4]
(010) jeq      #0x8             jt 18   jf 17
(011) jeq      #0x6             jt 12   jf 18
(012) ldh      [10]
(013) jset     #0x1fff          jt 18   jf 14
(014) ldxb     4*([4]&0xf)
(015) ldb      [x + 17]
(016) jset     #0x4             jt 17   jf 18
(017) ret      #0
(018) ret      #4

Dieser Code muß generiert werden und dazu enthält der pppd normalerweise einen kleinen Compiler, der Ausdrücke in den entsprechenden Code für den Paketfilter des Kerns umwandelt. Dieser Code würde denn ppp-Daemon jedoch um 100Kbyte vergrößern und damit sinnlos Platz auf der Floppy verschwenden. Deshalb wurde beschlossen, den Compiler aus dem pppd rauszunehmen und separat zur Verfügung zu stellen (pfc). Der pppd liest dann lediglich den offline compilierten Code und übergibt ihn an den Kern. Der vorcompilierte Filterausdruck liegt unter opt/etc/ppp/filter.

Will man den von fli4l verwendeten Ausdruck verändern, muß man den Paketfiltercode neu generieren. Dazu benötigt man den packet filter compiler. Zum Compilieren setzt man entweder OPT_PFC auf yes und compiliert den Ausdruck auf dem Router oder man übersetzt das unter src/base liegende pfc.c auf einem Unix-System (dazu benötigt man libpcap) und übersetzt den Ausdruck dann auf diesem System. Das Ergebnis (eine Menge Zeilen mit jeweils 4 Zahlen) kopiert man dann nach opt/etc/ppp/filter und baut eine neue floppy.

Das Fli4l-Team
23. Februar 2006