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).
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.
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"
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.
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.
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.