Inhalt

8. Vorbereitung des Linux Systems

8.1 Kompilieren des Kernels

Beste Voraussetzung ist eine saubere Linuxinstallation.(Die Beispiele hier sind auf einer RedHat 3.0.3 Distibution entstanden). Je weniger Software man installiert hat, desto weniger Schlupflöcher, Hintertürchen und/oder Fehler bilden die Grundlage für Sicherheitsprobleme in Ihrem System. Idealerweise installiert man nur die unbedingt nötigte Software.

Als Kernel verwendet man einen bekannt Stabilen, wie z.B 2.0.14 (auf den sich die folgende Konfiguration abstützt).

  1. Under General setup
    1. Turn Networking Support ON
  2. Under Networking Options
    1. Turn Network firewalls ON
    2. Turn TCP/IP Networking ON
    3. Turn IP forwarding/gatewaying OFF (UNLESS you wish to use IP filtering)
    4. Turn IP Firewalling ON
    5. Turn IP firewall packet loggin ON (this is not required but it is a good idea)
    6. Turn IP: masquerading OFF (I am not covering this subject here.)
    7. Turn IP: accounting ON
    8. Turn IP: tunneling OFF
    9. Turn IP: aliasing OFF
    10. Turn IP: PC/TCP compatibility mode OFF
    11. Turn IP: Reverse ARP OFF
    12. Turn Drop source routed frames ON
  3. Under Network device support
    1. Turn Network device support ON
    2. Turn Dummy net driver support ON
    3. Turn Ethernet (10 or 100Mbit) ON
    4. Select your network card

Nun kann man den Kernel neu kompilieren und installieren und Linux neu starten. Die Netzwerkkarte sollte in den Boot-Meldungen erscheinen. Wenn nicht, nochmal einen Blick in die entsprechende HOWTOs werfen.

8.2 Konfiguration von zwei Netzwerkkarten

Sind zwei Netzwerkkarten im Computer, kann man einen Zusatzeintrag in /etc/lilo.conf machen, der die IO-Adressen und die IRQ's der beiden Karten bekannt gibt.

z.B.

    append="ether=12,0x300,eth0 ether=15,0x340,eth1"

8.3 Konfiguration der Netzwerkadressen

Dies ist der interessante Teil, weil es ein paar Entscheidungen zu machen gilt. Nachdem erwünscht ist, daß aus dem Internet kein Zugriff auf irgendeinen Teil des LAN stattfindet, braucht man auch keine offiziellen Adressen für das LAN . Es gibt ein paar Adressen nur für den Gebrauch in privaten Netzwerken. Weil immer mehr Adressen gebraucht werden und diese private Adressen nicht geroutet werden, sind sie eine gute Wahl.

Einer dieser Adressbereiche ist 192.168.2.x , der auch hier in diesem Beispiel benützt wird.

Der Beispiel-Proxy-Server hier ist ein Bestandteil in beiden Netzwerken und kann somit Daten von und ins private Netzwerk übergeben.

            199.1.2.10   __________    192.168.2.1
      _  __  _        \ |          | /           _______________
     | \/  \/ |        \| Firewall |/           |               |
    / Internet \--------|  System  |------------| Workstation/s |
    \_/\_/\_/\_/        |__________|            |_______________|

Will man einen "Filter Firewall" benützen, kann man diese Adressen beibehalten. Man muß allerdings IP-Masquerading benützen um dies zu ermöglichen. Mit diesem Zusatz wird der Firewall die Pakete weiter transportieren und dabei in "Offizielle " "IP-Adressen umsetzen um sie ins Internet zu schicken.

Die Netzwerkkarte zum Internet muß die offizielle IP-Adresse bekommen und die Karte zum LAN bekommt die 192.168.2.1 zugewiesen. Das wird die Proxy/Gateway-Adresse. Alle anderen Systeme im geschützten LAN können Adressen aus dem Bereich 192.168.2.xxx bekommen (192.168.2.2 bis 192.168.2.254).

Bei RedHat kann man, um das Netzwerk beim starten von Linux zu konfigurieren, eine Datei in /etc/sysconfig/network-scripts hinzufügen. Diese Datei wird beim starten gelesen und konfiguriert das Netzwerk und die Routing-Tabelle.

Ein Beispiel für ifcfg-eth1:

    #!/bin/sh
    #>>>Device type: ethernet
    #>>>Variable declarations:
    DEVICE=eth1
    IPADDR=192.168.2.1
    NETMASK=255.255.255.0
    NETWORK=192.168.2.0
    BROADCAST=192.168.2.255
    GATEWAY=199.1.2.10
    ONBOOT=yes
    #>>>End variable declarations

Man kann auch das Script dazu verwenden um per Modem automatisch eine Verbindung zum Provider aufzubauen. Als Beispiel kann das ipup-ppp Skript dienen.

Bei Benutzung eines Modems für die Internetverbindung kann die IP-Adresse zum Internet vom Provider dynamisch beim Connect übermittelt werden.

8.4 Testen des Netzwerkes

begonnen wird mit der Kontrolle von "ifconfig" und "route". Bei zwei Netzwerkkarten kann ifconfig so aussehen:

  #ifconfig
  lo        Link encap:Local Loopback
            inet addr:127.0.0.0  Bcast:127.255.255.255  Mask:255.0.0.0
            UP BROADCAST LOOPBACK RUNNING  MTU:3584  Metric:1
            RX packets:1620 errors:0 dropped:0 overruns:0
            TX packets:1620 errors:0 dropped:0 overruns:0

  eth0      Link encap:10Mbps Ethernet  HWaddr 00:00:09:85:AC:55
            inet addr:199.1.2.10 Bcast:199.1.2.255  Mask:255.255.255.0
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:0 errors:0 dropped:0 overruns:0
            TX packets:0 errors:0 dropped:0 overruns:0
            Interrupt:12 Base address:0x310

  eth1      Link encap:10Mbps Ethernet  HWaddr 00:00:09:80:1E:D7
            inet addr:192.168.2.1  Bcast:192.168.2.255  Mask:255.255.255.0
            UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
            RX packets:0 errors:0 dropped:0 overruns:0
            TX packets:0 errors:0 dropped:0 overruns:0
            Interrupt:15 Base address:0x350

Und die Tabelle von route:

  #route -n
  Kernel routing table
  Destination     Gateway         Genmask         Flags MSS    Window Use Iface
  199.1.2.0       *               255.255.255.0   U     1500   0       15 eth0
  192.168.2.0     *               255.255.255.0   U     1500   0        0 eth1
  127.0.0.0       *               255.0.0.0       U     3584   0        2 lo
  default         199.1.2.10      *               UG    1500   0       72 eth0

Zur Erinnerung: 199.1.2.0 ist die Internetseite des Firewalls und 192.168.2.0 ist die private Seite.

Nun kann versucht werden vom Firewall einen ping zum Internet zu starten. Ein guter Testpunkt wäre ns.nic.de. Es ist eigentlich ein guter Test, hat sich aber als nicht sehr zuverlässig herausgestellt. Falls der ping nicht funktioniert, einfach mal eine Adresse des Providers versuchen. Falls auch das nicht funktioniert, dann ist die IP-Verbindung nicht richtig konfiguriert und muß mit Hilfe des NET-2 HOWTOs berichtigt werden.

Als nächstes versucht man einen ping vom Firewall zu einem System innerhalb des geschützten Netzwerkes. Falls dies auch nicht klappt, dann wiederum mit Hilfe des NET-2 HOWTOs das LAN neu konfigurieren.

Dann versucht man von einem System innerhalb des LAN's eine Adresse außerhalb des Firewalls anzupingen. (Dies sollte keine der 192.168.2.xxx IP-Adressen sein) Wenn das funktioniert, hat man IP-Forwarding nicht gesperrt. Man sollte sichergehen, daß dies gewünscht ist. Ist es freigegeben, sollte man sich den IP-Filtering Absatz in diesem Dokument näher ansehen.

Am Besten versucht man jetzt eine Internetadresse von einem Rechner im LAN anzupingen. Idealerweise nimmt man die Adresse die schon beim Test am Firewall funktioniert hat (ns.nic.de). Nur zur Erinnerung, bei gesperrten IP-Forwarding funktioniert der Test nicht, nur wenn IP-Forwarding freigegeben ist.

Wenn IP-Forwarding freigegeben ist und "Offizielle IP-Adressen" (keine 192.168.2.*) verwendet werden, kann man das Internet nicht direkt anpingen, sondern nur die Internetseite des Firewalls. *

Hat man als Adressen für das geschützte LAN 192.168.2.* gewählt, können auch keine Datenpakete geroutet werden. Ausser IP-Masquerading ist installiert, dann ist der Test wiederum möglich.

Jetzt ist das Basis-System installiert.

8.5 IP-Filter Konfiguration (IPFWADM)

Um zu beginnen soll IP-Forwarding im Kernel konfiguriert sein und das System sollte in der Lage sein, alle Pakete weiter zu schicken. Die Routing-Tabellen sollten passen und man soll in der Lage sein, vom LAN aus alle Zielsysteme im Internet zu erreichen und zurück.

Da hier ein Firewall gebaut werden soll, ist es notwenig jeglichen freien Zugang zu sperren.

Es ist nützlich ein paar Shell-Scripte zu schreiben die beim booten die Firewall-forwarding Regeln und das Accounting festlegen.

Das IP-Forwarding im Kernel leitet unkonfiguriert alles weiter. Aus diesem Grund soll das Boot-Script beim Systemstart jeglichen Zugriff verbieten und jegliche ipfw-Regeln vom letzten Start löschen. Ein Beispiel-Script soll dies erklären:

  #
  # setup IP packet Accounting and Forwarding
  #
  #   Forwarding
  #
  # By default DENY all services
  ipfwadm -F -p deny
  # Flush all commands
  ipfwadm -F -f
  ipfwadm -I -f
  ipfwadm -O -f

Das ist jetzt der ultimative Firewall. Keine Daten kommen jetzt durch. Um jetzt ein paar Internet-Dienste durchzulassen hier ein paar Beispiele:

  # Forward email to your server
  ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 192.1.2.10 25

  # Forward email connections to outside email servers
  ipfwadm -F -a accept -b -P tcp -S 196.1.2.10 25 -D 0.0.0.0/0 1024:65535

  # Forward Web connections to your Web Server
  /sbin/ipfwadm -F -a accept -b -P tcp -S 0.0.0.0/0 1024:65535 -D 196.1.2.11 80

  # Forward Web connections to outside Web Server
  /sbin/ipfwadm -F -a accept -b -P tcp -S 196.1.2.* 80 -D 0.0.0.0/0 1024:65535 

  # Forward DNS traffic
  /sbin/ipfwadm -F -a accept -b -P udp -S 0.0.0.0/0 53 -D 196.1.2.0/24

Um eine Übersicht des Datenverkehrs zu erhalten, der durch den Firewall geht, hier ein Beispiel:

                      
  # Flush the current accounting rules
  ipfwadm -A -f
  # Accounting
  /sbin/ipfwadm -A -f
  /sbin/ipfwadm -A out -i -S 196.1.2.0/24 -D 0.0.0.0/0
  /sbin/ipfwadm -A out -i -S 0.0.0.0/0 -D 196.1.2.0/24
  /sbin/ipfwadm -A in -i -S 196.1.2.0/24 -D 0.0.0.0/0
  /sbin/ipfwadm -A in -i -S 0.0.0.0/0 -D 196.1.2.0/24

Wenn das gewünschte ein Firewall-Filter war, dann ist hier das Ende.


Inhalt