Skip to content

LinuxHaus/firewall-lihas

Repository files navigation

# $Id$

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
    <ipset name="testset" persistent="yes" backupfile="/var/lib/firewall-lihas/ipset-testset">
      <create>bitmap:ip range 10.0.10.0-10.0.13.255</create>
      <dump>ipset save testset -f /var/lib/firewall-lihas/ipset-testset</dump>
      <restore>ipset restore testset -f /var/lib/firewall-lihas/ipset-testset</restore>
    </ipset>
  - 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

- 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