:: Home :: Computing :: Downloads :: Scooter :: Links :: Music :: Nonsense :: Mail :: |
---|
Ein Router ermöglicht einem Netzwerksegment den Zugriff auf ein weiteres Netzwerksegment, in diesem Falle meinem Home-LAN den Zugriff auf das Internet.
Der reinen Lehre nach sollten sich auf einem Router keine bzw. nur die notwendigsten Dienste installiert sein, im Idealfall befindet sich der Router darüber hinaus hinter einem weiteren Rechner, der als Paketfilter (Firewall) fungiert.
Praktisch möchte ich mir das alles aber nicht antuen, da ich schon meiner Stromrechnung zu Liebe nicht eine Vielzahl von Rechnern "durchlaufen" lasse. Meine Router nimmt neben seiner eigentlichen Aufgabe, sich einzuwählen sowie Pakete aus dem LAN ins Internet und umgekehrt weiterzuleiten, folgende Dienste war:
Die beiden Proxy-Server, durch die meine Web-Browser auf das WWW zugreifen
laufen auf meiner Workstation (AMD K7-650, 256 MB, SCSI), da es sich bei meinem Router "nur" um einen Pentium Classic 133 mit 64 MB auf uralten IDE-Platten handelt (er hat dafür auch nur einen Zwanni gekostet), dem ich diese zusätzlichen Dienste nicht auch noch zumuten wollte.
Ein paar generelle Aussagen zum Sinn und Unsinn von Paketfiltern sowie der Sicherung eines unter *NIX laufenden Rechners findest Du übrigens hier.
Mein IpChains-Regelwerk läuft in drei Schritten ab:
Ich habe mir folgendes Skript in den Start-/Stopmechanismus meines Routers (unter Debian unter '/etc/init.d/' mit Start- und Stop-Links in '/etc/rc[1-6].d') eingebaut:
#!/bin/sh # # /etc/init.d/masquerade - prepares the system for IP-forwarding # # Author: Martin Bock # Date: 18-Jun-2001 PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="IP-forwarding" NAME="masquerade" NET="192.168.1.0" MASK="255.255.255.0" EXTIF=ppp0 IPC=/sbin/ipchains set -e # if the kernel doesn't support masquerading, exit here # test -f /proc/net/ip_masquerade || exit 1; case "$1" in start) echo -n "Starting $DESC in $NAME..." # # Setting forwarding and dynamic ip-addresses in kernel # if [ -e /proc/sys/net/ipv4/ip_forward ] then echo 1 > /proc/sys/net/ipv4/ip_forward fi if [ -e /proc/sys/net/ipv4/ip_dynaddr ] then echo 7 > /proc/sys/net/ipv4/ip_dynaddr fi $IPC -P forward DENY $IPC -A forward -i $EXTIF -d 0/0 -s $NET/$MASK -j MASQ $IPC -M -S 7200 10 160 echo " done." ;; stop) echo -n "Stopping $DESC in $NAME..." # # Unsetting forwarding and dynamic ip-addresses in kernel # for i in /proc/sys/net/ipv4/ip_forward /proc/sys/net/ipv4/ip_dynaddr do if [ -e $i ] then echo 0 > $i fi done $IPC -P forward ACCEPT $IPC -D forward -i $EXTIF -d 0/0 -s $NET/$MASK -j MASQ echo " done." ;; restart) $0 stop $0 start ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart}" >&2 exit 1 ;; esac exit 0
Dieses Skript ist grösstenteils aus dem "Ganten-Buch" von Peter H. Ganten abgekupfert und aktiviert das IP-Forwarding; d.h., herausgehende IP-Pakete mit lokalen IP Nummern, die der Router von Rechnern meines LAN's erhält, maskiert er mit der von meinem Provider jeweils zugewiesenen Internet-IP's und umgekehrt.
Damit dient der Rechner als Einwahlserver für mein LAN, ist aber einer Menge möglicher Zugriffe aus dem Internet relativ "schutzlos" ausgesetzt.
Um den Rechner vor unerwünschten Zugriffen Dritter aus dem Internet zu schützen, sollte man nach Herstellen der Verbindung einen Paketfilter starten. Diesen kann man je nach Mechanismus der jeweiligen Distribution über lokale Skripte, wie z.B. '/etc/ppp/ppp.local' oder '/etc/ppp/ip-up.d/1firewall' anstossen.
Mein Skript, dass ich mir ursprünglich mal für einen Standalone DialUp-Rechner geschrieben habe, sieht folgendermassen aus:
#!/bin/sh # # /etc/ppp/ip-up.d/1firewall-up # # IPChains-Paketfilter, der Pakete an # * alle privilegierten Ports (0:1023) REJECTed # * alle High-Ports (1024:65535) mit definierten Ausnahmen ACCEPTed # * alle gespooften Adressen DENYid # * div. bad icmp-pakets DENYed # # Author: Martin Bock # Date: 19-Nov-2000 # ---- Einige globale Variablen # IPC="/sbin/ipchains" EXTIF=ppp0 INTIF=eth0 LOCALIP=`ifconfig $EXTIF | grep inet | cut -d : -f 2 | cut -d \ -f 1` LOCALMASK=`ifconfig $EXTIF | grep Mask | cut -d : -f 4` NETWORK=`grep network /etc/network/interfaces | cut -d" " -f3` LOCALNET="$LOCALIP/$LOCALMASK" LOCALNETWORK="$NETWORK/$LOCALMASK" INTERNET="0/0" LOOPBACK="127.0.0.0/8" CLASS_A="10.0.0.0/8" CLASS_B="172.16.0.0/12" CLASS_C="192.168.0.0/16" # ---- IP-Spoofing Schutz # if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ] then for i in /proc/sys/net/ipv4/conf/*/rp_filter do echo 1 > $i done fi # ---- SYN Flood Schutz # if [ -e /proc/sys/net/ipv4/tcp_syncookies ] then echo 1 > /proc/sys/net/ipv4/tcp_syncookies fi # ---- Source routed packets # for i in /proc/sys/net/ipv4/conf/*/accept_source_route do echo 0 > $i done # ---- Einige Module laden # for i in /lib/modules/$(uname -r)/ipv4/ip_masq_* do /sbin/modprobe $(basename $i .o) done # ---- Paketfilter # 1. Alles flushen # # $IPC -F forward (look at /etc/init.d/masquerade) $IPC -F input $IPC -F output # 2. Default Policy # #$IPC -P forward ACCEPT (look at /etc/init.d/masquerade) $IPC -P input ACCEPT $IPC -P output ACCEPT # 3. Type Of Service (TOS) f. maximalen Durchsatz optimieren # $IPC -A output -p tcp -d 0/0 www -t 0x01 0x10 $IPC -A output -p tcp -d 0/0 telnet -t 0x01 0x10 $IPC -A output -p tcp -d 0/0 ftp -t 0x01 0x10 $IPC -A output -p tcp -d 0/0 nntp -t 0x01 0x02 $IPC -A output -p tcp -d 0/0 pop-3 -t 0x01 0x02 $IPC -A output -p tcp -d 0/0 ftp-data -t 0x01 0x02 # 4. Pakete an Loopback-Device ACCEPTen # $IPC -A input -i lo -s 0/0 -d 0/0 -j ACCEPT $IPC -A output -i lo -s 0/0 -d 0/0 -j ACCEPT # 5. ICMP-Pakete # # ankommende ICMP-Pakete teilweise ACCEPTen # for ICMP in echo-reply \ destination-unreachable \ time-exceeded \ parameter-problem \ source-quench do $IPC -A input -p icmp -s $INTERNET -d $LOCALNET --icmp-type $ICMP -j ACCEPT done $IPC -A input -p icmp -s $INTERNET -d $LOCALNET -j DENY -l # rausgehende ICMP-Pakete ACCEPTen # $IPC -A output -p icmp -s $LOCALNET -d $INTERNET -j ACCEPT # 6. Gespoofte Adressen DENYen (logged) # $IPC -A input -i $EXTIF -s $LOOPBACK -j DENY -l $IPC -A input -i $EXTIF -s $CLASS_A -j DENY -l $IPC -A input -i $EXTIF -s $CLASS_B -j DENY -l $IPC -A input -i $EXTIF -s $CLASS_C -j DENY -l # 7. TCP und UDP Pakete an privilegierte Ports REJECTen (0:1023 - logged) # $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 0:1023 -j REJECT -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 0:1023 -j REJECT -l # 8. bestimmte High-Ports DENYen (logged) # # rpc.mount (1024 tcp, 1026 udp) $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 1026 -j DENY -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 1024 -j DENY -l # # Network File System (2049) $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 2049 -j DENY -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 2049 -j DENY -l # # MySQL (3306) $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 3306 -j DENY -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 3306 -j DENY -l # # Postgres SQL (5432) $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 5432 -j DENY -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 5432 -j DENY -l # # Junkbuster Filter Proxy (5865) $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 5865 -j DENY -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 5865 -j DENY -l # # X (6000:6063) $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 6000:6063 -j DENY -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 6000:6063 -j DENY -l # # X Font Server (7100:7101) $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 7100:7101 -j DENY -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 7100:7101 -j DENY -l # # WWWOffle Cache Proxy (8080:8081) $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET 8080:8081 -j DENY -l $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET 8080:8081 -j DENY -l # # 8. Alle anderen Pakete ACCEPTen (aktives FTP und eMail-Empfang) # $IPC -A input -p udp -i $EXTIF -s $INTERNET -d $LOCALNET -j ACCEPT $IPC -A input -p tcp -i $EXTIF -s $INTERNET -d $LOCALNET -j ACCEPT
Dieses Skript verwirft alle ankommenden Pakete an privilegierte Ports, akzeptiert Pakete an allen nicht expliziet definierten High-Ports, lässt keine gespooften Pakete durch, und, und...
Ich mag es persönlich immer gern, nach Erledigung einer Aufgabe den Urzustand wieder herzustellen. Genau dies macht das folgende Skript, das unmittelbar vor Beendigung der Verbindung zum Internet ausgeführt wird:
#!/bin/sh # # /etc/ppp/ip-down.d/98firewall-down # # Mit diesem Skript stellt man den Zustand vor Hochfahren des Skriptes # "/etc/ppp/ip-up.d/1firewall-up" wieder her # # Author: Martin Bock # Date: 01-May-2000 # Einige Shell-Variablen # IPC="/sbin/ipchains" # Alle Chains loeschen # # $IPC -F forward (look at /etc/init.d/masquerade) $IPC -F input $IPC -F output # Default Policy # #$IPC -P forward ACCEPT (look at /etc/init.d/masquerade) $IPC -P input ACCEPT $IPC -P output ACCEPT # IPC="/sbin/ipchains" # Alle Chains loeschen # # $IPC -F forward (look at /etc/init.d/masquerade) $IPC -F input $IPC -F output # Default Policy # #$IPC -P forward ACCEPT (look at /etc/init.d/masquerade) $IPC -P input ACCEPT $IPC -P output ACCEPT # Die geladenen Module wieder entladen # for i in /lib/modules/$(uname -r)/ipv4/ip_masq_* do /sbin/rmmod $(basename $i .o) 1> /dev/null 2> /dev/null done
Du kannst Die die Skripte von meiner Download-Site herunterladen.
Zur Ergänzung jetzt noch ein paar Links:
Zurück zur Main-Site |