IPv4 und IPv6 Firewall.
Das Konfigurationsverzeichnis ist /etc/firewall-lihas.d darin finden die relevanten Dinge statt.
-
es gibt pro Interface ein Verzeichnis nach dem Muster interface-NAME Interface-Aliase (z.B. eth0:0) werden nicht extra angelegt.
-
interface-NAME/comment Kommentar, der einfach nur ausgedruckt wird
-
interface-NAME/network Ein Netzwerk pro Zeile, das ueber dieses Interface erreichbar ist, z.B. 192.168.1.0/25 Eingetragen werden hier:
- die Netzwerke local zum Interface
- die Netzwerke local zu evtentuell vorhandenen Interface-Aliasen
- hinter Routern erreichbare Netze
- das Netz 0.0.0.0/0 beim fuer die Defaultroute zustaendigen Interface
-
interface-NAME/network-ipsec Ein Netzwerk pro Zeile, das ueber IPSEC an diesem Interface haengt, z.B. 192.168.1.0/25 vgl. "interface-NAME/network"
-
interface-NAME/privclients Clients an diesem Interface bekommen die angegebenen Berechtigungen Format: SRC-NET DST-NET PROTO PORT [OutIFACE] Der Eintrag erfolgt in der Datei zu dem Interface, dass die verbindingsaufbauenden Pakete eingehend sieht.
-
interface-NAME/reject Analog privclients, werden aber mit REJECT abgewiesen bevor die privclients ausgewertet werden. Es gibt keinen Logeintrag.
-
interface-NAME/snat Ausgehende Verbindungen an diesem Interface werden mittels SNAT umgesetzt Format: OrigSRC NewSRC PROTO PORT[:RANGE]
-
interface-NAME/masquerade Ausgehende Verbindungen an diesem Interface werden mittels SNAT umgesetzt Format: OrigSRC NewSRC PROTO PORT[:RANGE] NewSRC ist unberuecksichtigt und nur der Kompatibilitaet mit SNAT wegen angegeben.
-
interface-NAME/dnat Eingehende Verbindungen an diesem Interface werden mittels DNAT umgesetzt Format: OrigTARG NewTARG PROTO OrigPORT[:RANGE] NewPORT Alternativ, um ein dnat zu verhindern: ACCEPT SourceIP PROTO OrigPORT[:RANGE]
-
interface-NAME/nonat SRC-NET DST-NET PROTO PORT Pakete von SRC-NET nach DST-NET werden nichtdurch SNAT/DNAT/MASQUERADE behandelt
-
interface-NAME/nolog Verbindungen hier werden nicht geloggt. Syntax wie bei privclients, allerdings mit DROP als Ergebnis statt ACCEPT
-
interface-NAME/policy-routing Zuordnung zu nicht-Defaultroutingtabellen SRC DST PROTO PORTS Routingname 0.0.0.0/0 0.0.0.0/0 tcp 80 dsl
-
interface-NAME/extra Freiform-Skript fuer Spezialfaelle
-
privclients, dnat, masquerade, reject koennen Zeilen nach dem Muster include DATEINAME enthalten.
-
groups/hostgroup-* koennen statt Rechner-/Netzadressen auch dns-HOSTNAME z.B. dns-www.lihas.de enthalten. DNS muss dafuer funktionieren, mehrere IPs pro Name sind ok, derzeit nur IPv4. firewall-lihasd.pl löst das regelmäßig auf.
-
fuer privclients, dnat, snat, masquerade, nolog, reject koennen statt Rechner-/Netzadressen/Ports/Interfaces auch Gruppen in groups/hostgroup-GROUPNAME bzw. groups/portgroup-GROUPNAME groups/ifacegroup-GROUPNAME definiert werden. hostgroup-GROUPNAME bzw. portgroup-GROUPNAME steht dann anstelle des Ports/Hosts/Netzwerks Beispiel: 192.0.2.0/28 192.0.2.128/28 any portgroup-GROUPNAME
-
interface-NAME/mark Ein Keyword pro Zeile, derzeit bekannt: dhcpd - Erlaubt DHCP-Anfragen natreflect - Maskiert Pakete an das Interface von dem Interface mit der eigenen IP um Connection Tracking zu erlauben
-
-
es gibt pro Routingtabelle ein Verzeichnis nach dem Muster policy-routing-TABELLENNAME Hiermit koennen z.B. alle Port 80/tcp Anfragen ueber eine DSL Flatrate geleitet werden
-
policy-routing-TABELLENNAME/comment Kommentar, der einfach nur ausgedruckt wird
-
policy-routing-TABELLENNAME/gateway Defaultgateway, Syntax: TYP INTERFACE [IP] PPP ppp0 -> ppp0 wird das Defaultgateway, Point-to-Point-Adresse noetig NET eth6 10.4.2.1 -> 10.4.2.1 ueber eth6 wird das Defaultgateway
-
policy-routing-TABELLENNAME/key Zahl die mit fwmark gesetzt wird, sollte eindeutig sein pro System, HEX, bsp 0x53, Wert <= 0xff
-
-
Verzeichnis groups
- Datei hostgroup-GROUPNAME eine Zeile pro Host der zu der Grouppe gehoert
- Datei portgroup-GROUPNAME eine Zeile pro Port der dazu gehoert, wenn die urspruengliche Datei als Protokoll nay' enthaelt, werden alle Zeile eingefuegt, wenn nicht nur die mit dem entsprechenden Protokoll
-
DNS-Aufloesung, dns-* Namen
- Hierfür muss firewall-lihasd.pl laufen, wird bei passend installierten Abhängigkeiten automatisch gestartet.
- Alle dns-* Statements werden aus groups/hostgroup-* genommen und, falls die TTL abgelaufen ist, neu aufgeloest.
- andere Dateien werden nicht ausgewertet, hostgroup ist hier Pflicht.
-
ipset Support
- Konfiguration in config.xml /applicationconfig/application/ipsets/ipset bitmap:ip range 10.0.10.0-10.0.13.255 ipset save testset -f /var/lib/firewall-lihas/ipset-testset ipset restore testset -f /var/lib/firewall-lihas/ipset-testset
- persistent="yes": Inhalt bleibt ueber Neustarts erhalten
- backupfile="/var/lib/firewall-lihas/ipset-testset": Datei in die dieses ipset gesichert wird
- name="testset": Name des ipset
- maximum name length for ipset: 21 characters
- call: ipset-ipsetname as source or destination in privclients
-
jump-Support in dnat:
- src jump-TARGET dummy dummy dummy
- wenn 'src' matched, springe zu existierendem target TARGET, z.B. 1.1.1.1 jump-pre-eth0 tcp 0 0
- src jump-TARGET dummy dummy dummy
-
accounting Support: Aktiviert bedeutet das für jedes Paket 1 zusätzlichen Jump
- config.xml: /applicationconfig/application/feature/counter@enabled
- counter: Wie localhost, gedacht für Dinge wie IPT_FILTER "-A counter -i eth0" IPT_FILTER "-A counter -o eth0"
- Auswertung: extern, bsp
iptables -L -Z counter -vx
Berechtigungen und DNAT werden an dem Interface konfiguriert, an dem der Client haengt. SNAT und Masquerading werden am ausgehenden Interface konfiguriert.
Externe Programme: firewall-lihasd.pl - DNS in der Firewallkonfiguration mitsamt Updates firewall-lihas-watchdog-cron.sh - prueft ob die alternative Routingtabellen aktuell sind und startete ggf. die Firewall neu