Vorwort
Was ist dieser Sinn dieses Artikels?
Dieser Artikel soll ein iptables-Skript erklären, das in dieser Form über längere Zeit in einem Wohnheim im Einsatz war. Der Artikel soll Anreize und Ideen liefern, worauf bei der Erstellung der Paketfilterregeln Acht gegeben werden sollte.
Was ist nicht Sinn des Artikels?
Der Artikel ist kein iptables-Howto. Ich werde nicht auf jede kleinste Syntaxbesonderheit und jeden einzelnen Parameter eingehen.
Dieser Artikel ist ebensowenig eine allumfassende Anleitung zur Netzwerkabsicherung. Die iptables-Regeln können nur Anregungen bieten und müssen je nach Einsatzzweck entsprechend angepasst werden.
Sonstiges
Die im Skript ursprünglich verwendeten IP-Adressen meiner Universität habe ich entfernt. Außerdem wurden noch ein paar andere Kleinigkeiten für dieses Beispiel leicht abgeändert, die Funktionsweise des Skripts an sich wird dadurch allerdings nicht weiters beeinträchtigt.
Ich werde die einzelnen Absätze des Skripts von oben nach unten Schritt für Schritt durchgehen, am Ende der Seite findet sich das gesamte Skript zum herunterladen.
Prinzipielles
Das Paketfilterskript ist für den Einsatz in einem Wohnheim konzipiert. Dabei wurde auf die folgenden Punkte besonders Wert gelegt:
- Die Nutzer sollten innerhalb des Universitätsnetzes weitestgehende Freiheiten haben.
- Die Nutzer sollten zu Forschungszwecken auch einen möglichst uneingeschränkten Zugang zum Internet haben.
- Trotzdem sollte ein gewisser Grundschutz gegenüber Bedrohungen von außen gegeben sein.
- Bei Verstößen gegen die Nutzungsrichtlinien muss der Internetzugang einzelner Nutzer gesperrt werden können.
- Durch Fehlkonfigurationen vorhandene offene Mail-Relays, Proxies,... auf den Nutzerrechnern dürfen von außen nicht erreichbar sein.
Der Paketfilter läuft dabei auf dem Gateway im Wohnheim, das die Verbindung zwischen dem Universitätsnetz und dem internen Wohnheimnetz darstellt. Jeder Nutzer erhält nach einer im Voraus erfolgten Registrierung eine öffentliche IP-Adresee, so dass auf dem Gateway kein NAT gemacht werden muss.
Start
Das iptables-Skript lief auf einem Rechner mit Debian 4 und sollte nach einem Reboot automatisch mit gestartet werden. Um einen Start über das init-System zu ermöglichen, beginnt das Skript mit folgendem Kopfteil:
# ### BEGIN INIT INFO
# Provides: iptables
# Required-Start: network
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start: 2 3 5
# Default-Stop:
# Description: Firewall Skript fuer das Wohnheimnetz
### END INIT INFO
Initialisierung
echo "cd into workdir..."
cd /etc/firewall
echo "Initializing iptables..."
echo 1
IPTABLES="/sbin/iptables"
IN="eth1" # internal interface
OUT="eth0" # external interface
CUSTODO="x.y.0.1"
INTERN="x.y.z/23"
UNI="x.y.0.0/16"
FH="a.b.0.0/16"
echo "Alte Regeln loeschen..."
$IPTABLES --flush
$IPTABLES -t nat --flush
Nach einem Wechsel ins passende Arbeitsverzeichnis (dort liegen das iptables-Skript und die weiter unten eingebundenen Hilfsdateien), werden das interne und externe Interface, sowie die notwendigen IP-Ranges definiert. Bevor die aktuellen Filterregeln geladen werden, werden erst eventuell bestehende Regeln gelöscht.
echo "/proc/sys/net anpassen..."
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 0 > /proc/sys/net/ipv4/conf/eth1/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/eth0/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/lo/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/default/accept_source_route
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
IP-Forwarding und Syncookies einschalten, Source-Route-Traffic nicht erlauben.
# Policies setzen
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
# loopback erlauben
$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT
Die Standardpolicy eines jeden Paketfilters: Erst einmal alles verwerfen, und dann gezielt Ausnahmen setzen. Kommunikation auf dem loopback-Interface wird generell erlaubt.
| Anhang | Größe |
|---|---|
| firewall-skript | 9.18 KB |
| firewall-skript - Digitale Signatur | 197 Bytes |
Kommentare
3 comments postedMoin moin,
coole Sache das Du die Regeln hier nommal online gestellt hast,
so kann man das ein oder andere, wenn man es mal wieder braucht, nachlesen.
Gruss
KaiP
cooles teil,
sag mal, das festlegen einer internen netzwerkschnittstelle würde mich sehr interessieren. für das erlauben eines subnetzes/bzw ein paar rechnern daraus, um mit samba durch die firewall zu kommen. hat dein script überhaupt einfluss auf samba verbindungen?
gruß
dante
Klar geht das. In meinem Skript wird zwar (auf Seite 5) smb (Ports 135-139,445 tcp und udp) explizit in beide Richtungen verboten, aber natürlich kann man davor für beliebige IPs oder Subnetze Ausnahmen definieren oder den Block ganz rauslöschen.
Gruß
Arno