Login
Newsletter
Werbung

Mo, 10. Januar 2000, 00:00

Firewall unter Linux

Die Firewall-Konfiguration

Als erstes möchte ich Ihnen eine kleine Befehlsübersicht über ipchains geben:

ipchains -N chain legt eine neue, benutzerdefinierte Regelliste an (new).
ipchains -P chain ACCEPT/REJECT/DENY setzt die Standardregel (default policy).
ipchains -A chain rule hängt eine neue Regel an eine Regelliste (append).
ipchains -D chain löscht eine Regel (delete). Die Regel muß exakt angegeben oder über ihre Position bestimmt werden.
ipchains -F chain löscht alle Regeln einer Regelliste. Ohne chain Angaben werden ALLE Regeln gelöscht.
ipchains -L zeigt eine Regelliste und ihre Regeln an.
ipchains -s Quelladresse
ipchains -d Zieladresse
ipchains -p Protokollangabe (TCP,UDP und ICMP)
ipchains --sport Quell-Port
ipchains --dport Zielport
ipchains --icmp-type ICMP-Typ
ipchains -i interface Netzwerkinterface
ipchains -j chain ACCEPT/REJECT/DENY/MASQ/REDIRECT Aktion, die bei Paketen ausgeführt wird, auf die die Regel paßt (jump).
ipchains [!] -y bezeichnet TCP-Pakete bei denen das SYN-Bit gesetzt und die ACK- und FIN-Bits nicht gesetzt sind. Das trifft auf Pakete zu, die eine TCP-Verbindung aufbauen wollen.

Weitere Parameter bekommen Sie mit ipchains -h oder im IPCHAINS HOWTO. Beispiele:

ipchains -F
ipchains -P input DENY
ipchains -P forward DENY
ipchains -P output DENY

Es wurden alle existierenden Chains gelöscht, die Default Policy auf DENY gesetzt und es ist alles verboten. Es ist jetzt auch nicht mehr möglich, daß sich lokale Programme auf das Loopback-Device binden. Mit folgenden Befehlen wird das Loopback-Device freigegeben.

ipchains -A input -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT

Jetzt können nur Programme auf Ihrem Rechner mit dem Loopback-Interface kommunizieren. Allerdings hat noch niemand die Möglichkeit, über das maskierte Netz auf Ihren Firewall-Rechner zuzugreifen.

ipchains -A input -i eth0 -s 192.168.100.0/24 -j ACCEPT
ipchains -A output -i eth0 -d 192.168.100.0/24 -j ACCEPT

Diese beiden Befehle ermöglichen den Zugriff auf das Ethernet-Device eth0. Probieren Sie es aus! Rufen sie Telnet auf und versuchen Sie, eine Verbindung über das Netzwerk auf Ihren Firewall-Rechner herzustellen (telnetd muß natürlich aktiviert sein). Jetzt zeige ich Ihnen die ganze Konfiguration mit entsprechender Dokumentation. Wenn Sie diese Konfiguration verwenden möchten, dann erstellen Sie sich am besten ein Skript, in dem die Konfiguration kopiert wird, und tragen das Skript in der Datei boot.local ein, damit es beim Starten gleich aktiviert wird.

#!/bin/sh
# Starting up the firewall
echo
echo Stand by while starting up the firewall...
echo
# Starting IP forwarding
echo Starting IP forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
# IP Forward sollte vorher aktiviert werden.
# Deleting all chains
echo Deleting all existing chains...
ipchains -F
# Alle existierenden Regeln werden gelöscht
# Default policy
echo Setting up default policy...
ipchains -P input DENY
ipchains -P forward DENY
ipchains -P output DENY
# Die Default Policy wird auf DENY gesetzt
# Somit haben Sie jetzt eine ultimative Firewall
# Variables
echo Setting up all defined variables...
DEV_LNET=eth0
IP_LNET=192.168.100.5
DEV_INET=ippp0
LNET=192.168.100.0/24
GLOBAL=0.0.0.0/0
# Alle nötigen Variablen werden jetzt definiert
# Loopback
echo Setting up loopback interface...
ipchains -A input -i lo -j ACCEPT
ipchains -A output -i lo -j ACCEPT
# Zugriff auf den Loopback Device
# Intranet connections
echo Setting up intranet connections...
ipchains -A input -i eth0 -s $LNET -j ACCEPT
ipchains -A output -i eth0 -d $LNET -j ACCEPT
# Das maskierte Netz hat Zugriff auf das Netzwerk Device eth0
# Internet connections
echo Setting up internet syn connections...
ipchains -A input -s $LNET 1024: -p tcp -i $DEV_LNET -j ACCEPT
# Alles was aus dem LAN über dem Port 1023 auf eth0 ankommt
# und TCP verwendet wird akzeptiert und an die forward chain übergeben
ipchains -A forward -s $LNET 1024: -p tcp -i $DEV_INET -j MASQ
# Alles was aus dem LAN über dem Port 1023 und TCP verwendet
# wird maskiert, an das ippp0 weitergeleitet (geroutet)
# und somit an die output chain übergeben
ipchains -A output -s $GLOBAL 1024: -p tcp -i $DEV_INET -j ACCEPT
# Alles was von überall ($GLOBAL) über das ippp0 Device nach
# draußen möchte und TCP verwendet wird akzeptiert.
# Jetzt folgt nochmal genau das selbe nur mit dem UDP Protokoll.
# Dieses ist zum Beispiel notwendig für Nameserveranfragen.
ipchains -A input -s $LNET 1024: -p udp -i $DEV_LNET -j ACCEPT
ipchains -A forward -s $LNET 1024: -p udp -i $DEV_INET -j MASQ
ipchains -A output -s $GLOBAL 1024: -p udp -i $DEV_INET -j ACCEPT
# Internet answers
echo Setting up internet ack connections...
ipchains -A input --sport 20 -d $GLOBAL 1024: -p tcp -i $DEV_INET -j
ACCEPT
ipchains -A output --sport 20 -d $LNET 1024: -p tcp -i $DEV_LNET -j
ACCEPT
# Diese beiden Regeln sind dafür zuständig, daß aktives FTP
funktioniert.
# Ich erlaube also einen Zugriff auf einen privilegierten Port (Gerät
ippp0).
# Allerdings kann niemand auf den Port eine Verbindung aufbauen da
# er dafür den Kontrollport 21 braucht, der allerdings von außen
gesperrt ist.
ipchains -A input -d $GLOBAL 1024: -p tcp -i $DEV_INET -j ACCEPT ! -y
# Alles was über dem Port 1023 mit dem Protokoll TCP auf dem ippp0
Device
# ankommt wird akzeptiert, wenn keine Verbindung zu ihm aufgebaut
wurde.
ipchains -A output -d $LNET 1024: -p tcp -i $DEV_LNET -j ACCEPT ! -y
# Alles über dem Port 1023 mit dem Protokoll TCP und dem LAN als
# Ziel wird akzeptiert, wenn keine Verbindung zu ihm aufgebaut wurde.
ipchains -A input -d $GLOBAL 1024: -p udp -i $DEV_INET -j ACCEPT
ipchains -A output -d $LNET 1024: -p udp -i $DEV_LNET -j ACCEPT
# icmp-acc
echo Setting up icmp defined restrictions...
ipchains -N icmp-acc
# Benutzerdefinierte Chain wird erstellt.
ipchains -A icmp-acc -p icmp --icmp-type echo-reply -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type echo-request -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type destination-unreachable -j
ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type source-quench -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type time-exceeded -j ACCEPT
ipchains -A icmp-acc -p icmp --icmp-type parameter-problem -j ACCEPT
# ICMP Pakete (echo-reply, echo-request , destination-unreachable,
source-quench
# time-exceeded, parameter-problem) werden akzeptiert.
# icmp
echo Setting up icmp major restrictions...
ipchains -A input -p icmp -j icmp-acc
# Alle eingehenden Pakete werden an die benutzerdefinierte Regel
icmp-acc weitergeleitet.
ipchains -A forward -p icmp -j MASQ
# Alle Pakete die zwischen den Netzwerk Devices geroutet und maskiert.
ipchains -A output -p icmp -j icmp-acc
# Alle ausgehende Pakete werden an die benutzerdefinierte Regel
icmp-acc weitergeleitet.
# Masquerading
echo Loading modules for masquerading...
# Module für Masquerading werden geladen
insmod /lib/modules/2.2.10/ipv4/ip_masq_ftp.o
insmod /lib/modules/2.2.10/ipv4/ip_masq_irc.o
insmod /lib/modules/2.2.10/ipv4/ip_masq_quake.o
insmod /lib/modules/2.2.10/ipv4/ip_masq_raudio.o
insmod /lib/modules/2.2.10/ipv4/ip_masq_vdolive.o
insmod /lib/modules/2.2.10/ipv4/ip_masq_cuseeme.o
echo
echo Firewall active
echo
Kommentare (Insgesamt: 0 )
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung