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