Hallo Zusammen, ich habe die Threads verfolgt und habe mir auch meine Fingers wund gegoogled, aber ich bin nicht so recht fündig geworden. Ich suche eine Beispiel konfiguration der Firewall für Server. Denn jetzt habe ich meine alten ipchains regeln nach iptables portiert, bin aber der Meinung das es recht umständlich bzw. auch auch unsicher ist. Hat da nicht jemand ein Beipsiel oder URL zur Hand ? Gruß Michael -- Phone/Fax +49 7000 MACBYTE (+49 7000-6222983) Registered Linux User #228306 HomePage http://www.macbyte.info/ http://counter.li.org/ PGP-Key http://www.macbyte.info/shared/mykey.pkr ++ CGI-Hosting ++ Domains ++ Webspace ++ PHP Development ++
Griasdebua! Am Freitag, 9. November 2001 11:23 schrieb Michael Raab:
ich habe die Threads verfolgt und habe mir auch meine Fingers wund gegoogled, aber ich bin nicht so recht fündig geworden.
Soso, dann hast Du aber anscheinend nicht meine geistigen Ergüsse gefunden. Normalerweise sollte das Dir weiterhelfen: Konfiguration in meinem SOHO: | | | <----- Verbindung zum Internet | über DSL-Modem (!) zu | t-longline (flatrate) | +-----+-----+ | eth0 | | | +-----+ | eth1 +--------------+ Hub | | | +-+-+-+ | "Server" | | | +-----------+ | | | | +-----------+ | | | | | | | | | | | eth0 +----------------+ | | | | | "clientA" | | +-----------+ | | +-----------+ | | | | | | | | eth0 +------------------+ | | | "clientB" | +-----------+ Der "Server" bietet folgende Dienste: - SAMBA-Fileserver - Druckerserver - Router mit firewall mit DSL-Anschluss - voll funktionierende Workstation, d.h. ° Mailclient ° http, ftp ° Staroffice ° DTP (Sannen, gPhoto, Drucken ...) Die Regelkette also mit Source-NAT (Masquerading), sieht wie folgt aus: + / \ / \ / \ +---------+ / \ | | +---------+ incoming / \ | FORWARD | | POST- | outgoing ---------->+ routing? +--->+ REGEL- +--+--+ REGEL +----------> \ / | | ^ | S-NAT | \ / +---------+ | +---------+ \ / | \ / | \ / | + | | | | | V | +-------+-------+ +--------+-------+ | | | | | INPUT - REGEL | | OUTPUT - REGEL | | | | | +-------+-------+ +--------+-------+ | ^ | | V | LOKAL LOKAL Zusammengefasst nun also im Detail: Da auf dem "Server" auch noch nebenbei gearbeitet werden können muss, müssen die bekannten Regeln beibehalten werden: INPUT-Regel : Es kommt ein Paket von ppp0 und das Paket wird an den "lokalen Rechner" weitergegeben. FORWARD-REGEL: Es kommt ein Paket und wird an die FORWARD-REGEL weitergereicht, da das Routing im Firewall-script eingeschaltet wurde. ( echo "1" > /proc/sys/net/ipv4/ip_forward ) OUTPUT-REGEL : Der Rechner verschickt selbst Pakete, die konform mit dieser Regel sein muss. POST-REGEL : Im Firewall-Script wird "Masquerading" mittels ( $IPTABLES -t nat -A POSTROUTING -o $EXT -j MASQUERADE ) eingeschaltet; somit werden Pakete, die den Router via ppp0 verlassen maskiert, Die rückwärtige Richtung wird über das Kernel-Modul ip-conntrack automatisch Adressmäßig wieder umgeschrieben, so daß das Paket zum "verursachenden" Host zurückgeschickt wird. Zusätzliche muss für den SAMBA- und Printserver-Betrieb sichergestellt werden, daß die betreffenden Ports vom lokalen Netzwerk in Richtung Router/Server offen sind, aber von Richtung Internet aus, diese Port nicht erreichbar sind. So und dann sollte es auch mit den gewünschten Diensten am "Server/Router" klappen _U_N_D_ die clients im lokalen Netzwerk können auch surfen, mailen, speichern und drucken.
Ich suche eine Beispiel konfiguration der Firewall für Server.
siehe obiges Beispiel ... ;-)
Denn jetzt habe ich meine alten ipchains regeln nach iptables portiert, bin aber der Meinung das es recht umständlich bzw. auch auch unsicher ist.
Laut den einschlägigen Sicherheitstools im internet sei meine firewall sehr sicher.
Hat da nicht jemand ein Beipsiel oder URL zur Hand ?
Nachdem nun immer wieder die gleichen Fragen gestellt werden, werd' ich das Zeug nun in meine homepage einbauen. Aber Dir sollte es erst einmal helfen, oder? Beispielsscript: #!/bin/tcsh # ========================================================================= # Firewall-Skript fuer gatewayrechner im heimischen # Netzwerk bei Michael Nausch's server # ------------------------------------------------------------------------- # Erste Version (V1.1) der Firewall # erste Gehversuche am 17.07.01 # zweiter Anlauf (V1.2) am 02.08.01 (Buch Seite 236 ff.) # - EXT device gaendert # dritter Anlauf (V1.3) am 05.08.01 # - modul ip_contrack_ftp.o geladen # vierte Version (V1.4) vom 19.08.01 # - for each - Schleife fuer die Mailserver eingetragen # ------------------------------------------------------------------------- # Neue Version (V2.0) der Firewall # erste Gehversuche am 19.08.01 # - Migration von "surfer" nach "gateway" groesstenteils Uebernahme der # Vorgaben aus dem Buch Seite 246 ff. # zweiter Anlauf am 01.09.01 # - Teilung des Scripts in lokale Absicherung und Absicherung des # lokalen Netzwerk(chen) # Groesstenteils kompletter Umbau der vorhandenen Regelketten- # definitionen sowie der Vorgaben aus dem Buch # # ========================================================================= # TEIL I: Definition der Variablen # ========================================================================= set IPTABLES = /usr/sbin/iptables set DONE = "\033[70G\033[1A\033[1;32mdone\033[m" # ++++++++^^^^^^^++++++++++ ++++++---> zuruecksetzen # | | +-----------------> Schrift "hellgruen" # | +--------------------------> eine Zeile hoch # +---------------------------------> Spalte 70 # ------------------------------------------------------------------------- # special ports set p_high = 1024:65535 # unprivileged ports set p_ssh = 1000:1023 # common ssh source ports # Die genaue Port-Definitionen sind ggf. aus /etc/services zu entnehmen # -------------------------------------------------------------------------- # Definition der Interfaces [ DSL (ppp0) via eth0 ] set EXT = ppp0 set INT = eth1 set IF = ( $EXT $INT ) # -------------------------------------------------------------------------- # Definitionen der Server und hosts set INTERN = 192.168.10.0/255.255.255.0 # interne Netzwerk set loghost = 192.168.10.10 # Host auf dem die Zugriffsversuche dokumentiert werden # sollen set NS = ( 212.185.252.201 194.25.2.129 ) # name-server von t-online set SMTP = ( 195.20.224.208 195.20.224.209 195.20.224.219 195.20.224.220 195.20.224.204 ) # SMTP-Server bei puretec.de set POP3 = ( 212.227.126.134 212.227.126.130 212.227.126.138 212.227.126.142 ) # POP3-Server bei puretec.de # ========================================================================== # TEIL II: Grundkonfiguration: absichern # ========================================================================== # Laden der dynamischen Kernel Module, wie z.B.: # * ip_conntrack_ftp # Modul zum # * ip_contrack # Modul fuer die Zuordnung der ruecklaeufigen Pakete bei Masquerading depmod -a modprobe ip_conntrack_ftp modprobe ip_conntrack modprobe ip_nat_ftp modprobe ipt_tcpmss # Setzen der dynamischen Kernelparameter echo "1" > /proc/sys/net/ipv4/ip_forward echo "1" > /proc/sys/net/ipv4/ip_dynaddr echo "1" > /proc/sys/net/ipv4/tcp_syncookies echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses echo "5" > /proc/sys/net/ipv4/icmp_destunreach_rate echo "5" > /proc/sys/net/ipv4/icmp_echoreply_rate echo "5" > /proc/sys/net/ipv4/icmp_paramprob_rate echo "10" > /proc/sys/net/ipv4/icmp_timeexceed_rate foreach if ( $IF ) echo "1" > /proc/sys/net/ipv4/conf/$if/rp_filter echo "0" > /proc/sys/net/ipv4/conf/$if/accept_redirects echo "0" > /proc/sys/net/ipv4/conf/$if/accept_source_route echo "0" > /proc/sys/net/ipv4/conf/$if/bootp_relay echo "1" > /proc/sys/net/ipv4/conf/$if/log_martians end # -------------------------------------------------------------------------- # Default Policy und Loeschen der ev. vorhandenen Regelketten $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD DROP $IPTABLES -P OUTPUT DROP $IPTABLES -F # Loeschen aller Regelketten in der Tabelle 'filter' $IPTABLES -t nat -F # Loeschen aller Regelketten in der Tabelle 'nat' $IPTABLES -X # Loeschen aller selbstdefinierten Regelketten in der # Tabelle 'filter' # -------------------------------------------------------------------------- # lokale Prozesse wieder freigeben echo "setting firewall rules for device lo" $IPTABLES -A OUTPUT -o lo -j ACCEPT $IPTABLES -A INPUT -i lo -j ACCEPT echo $DONE # ========================================================================== # TEIL III: Userdefinierten Filterregelkette (Drop und Log) # ========================================================================== $IPTABLES -N my_drop $IPTABLES -A my_drop -p ICMP -j LOG --log-prefix "DROP-ICMP " $IPTABLES -A my_drop -p UDP -j LOG --log-prefix "DROP-UDP " $IPTABLES -A my_drop -p TCP -j LOG --log-prefix "DROP-TCP " $IPTABLES -A my_drop -j DROP # ========================================================================== # TEIL IV: Userdefinierten Filterregelketten lokale Netzwerk (intranet) # ========================================================================== echo "setting firewall rules for internal network on eth1" # -------------------------------------------------------------------------- # Regeln fuer "internen ICMP-Verkehr" $IPTABLES -A INPUT -i $INT -p ICMP -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p ICMP -j ACCEPT # -------------------------------------------------------------------------- # Regeln fuer "internen FTP-Verkehr" $IPTABLES -A INPUT -i $INT -p TCP -s $INTERN -d $loghost \ --dport ftp -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p TCP -d $loghost -s $INTERN \ --sport ftp -j ACCEPT # -------------------------------------------------------------------------- # Regeln fuer "internen telnet und ssh Zugriff" $IPTABLES -A INPUT -i $INT -p TCP -s $INTERN -d $loghost \ --dport ssh -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p TCP -d $loghost -s $INTERN \ --sport ssh -j ACCEPT $IPTABLES -A INPUT -i $INT -p TCP -s $INTERN -d $loghost \ --dport telnet -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p TCP -d $loghost -s $INTERN \ --sport telnet -j ACCEPT # -------------------------------------------------------------------------- # Regeln fuer SAMBA-Betrieb (port 137,138 und 139) $IPTABLES -A INPUT -i $INT -p tcp --dport 137:139 -j ACCEPT $IPTABLES -A INPUT -i $INT -p tcp --sport 137:139 -j ACCEPT $IPTABLES -A INPUT -i $INT -p udp --dport 137:139 -j ACCEPT $IPTABLES -A INPUT -i $INT -p udp --sport 137:139 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --dport 137:139 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --sport 137:139 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p udp --dport 137:139 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p udp --sport 137:139 -j ACCEPT # Regeln fuer SAMBA-SWAT (port 901) $IPTABLES -A INPUT -i $INT -p tcp --dport 901 -j ACCEPT $IPTABLES -A INPUT -i $INT -p tcp --sport 901 -j ACCEPT $IPTABLES -A INPUT -i $INT -p udp --dport 901 -j ACCEPT $IPTABLES -A INPUT -i $INT -p udp --sport 901 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --dport 901 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --sport 901 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p udp --dport 901 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p udp --sport 901 -j ACCEPT # -------------------------------------------------------------------------- # Regeln fuer Hylafax-Server # Simple Network Paging Protocol $IPTABLES -A INPUT -i $INT -p tcp --dport snpp -j ACCEPT $IPTABLES -A INPUT -i $INT -p tcp --sport snpp -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --dport snpp -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --sport snpp -j ACCEPT # Oeffnen der HylaFax Ports 4558 und 4559 $IPTABLES -A INPUT -i $INT -p tcp --dport 4558:4559 -j ACCEPT $IPTABLES -A INPUT -i $INT -p tcp --sport 4558:4559 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --dport 4558:4559 -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --sport 4558:4559 -j ACCEPT # -------------------------------------------------------------------------- # Regeln fuer Drucker-Spooler $IPTABLES -A INPUT -i $INT -p tcp --dport printer -j ACCEPT $IPTABLES -A INPUT -i $INT -p tcp --sport printer -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --dport printer -j ACCEPT $IPTABLES -A OUTPUT -o $INT -p tcp --sport printer -j ACCEPT echo $DONE # ========================================================================== # TEIL V: Userdefinierten Filterregelketten fuer das externe Netzwerk # ========================================================================== echo "setting firewall rules for external network on eth0" # -------------------------------------------------------------------------- # Rekelketten fuer Masquerading $IPTABLES -A POSTROUTING -t nat -o $EXT -j MASQUERADE # -------------------------------------------------------------------------- # Regelketten fuer ausgehende Pakete bei einer bereits aufgebauten # Verbindung $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $INT -o $EXT -m state \ --state ESTABLISHED,RELATED -j ACCEPT # -------------------------------------------------------------------------- # Rueckkanal: eingehende Pakete zu einer bestehenden Verbindung $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A INPUT -m state --state NEW,INVALID -j my_drop $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $EXT -o $INT -m state \ --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A FORWARD -i $EXT -o $INT -m state \ --state NEW,INVALID -j my_drop # -------------------------------------------------------------------------- # Regeln fuer "externenn ICMP-Verkehr" $IPTABLES -A FORWARD -o $EXT -p ICMP --icmp-type echo-request -j ACCEPT $IPTABLES -A OUTPUT -o $EXT -p ICMP --icmp-type echo-request -j ACCEPT # -------------------------------------------------------------------------- # DNS Regelketten fuer den Server/Router + intranet foreach ns ( $NS ) $IPTABLES -A OUTPUT -p UDP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p TCP --sport $p_high -d $ns --dport domain \ -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -o $EXT -m state --state NEW -p UDP --sport \ $p_high -d $ns --dport domain -j ACCEPT $IPTABLES -A FORWARD -o $EXT -m state --state NEW -p TCP --sport \ $p_high -d $ns --dport domain -j ACCEPT end # ------------------------------------------------------------------------- # HTTP Regelkette fuer den Server/Router + intranet $IPTABLES -A OUTPUT -p TCP --sport $p_high --dport http -m state \ --state NEW -j ACCEPT $IPTABLES -A FORWARD -o $EXT -m state --state NEW -p TCP --sport \ $p_high --dport http -j ACCEPT # ------------------------------------------------------------------------- # HTTP via SSL Regelkette fuer den Server/Router + intranet $IPTABLES -A OUTPUT -p TCP --sport $p_high --dport https -m state \ --state NEW -j ACCEPT $IPTABLES -A FORWARD -o $EXT -m state --state NEW -p TCP --sport \ $p_high --dport https -j ACCEPT # -------------------------------------------------------------------------- # Mail (senden via SMTP) Regelketten fuer den Server/Router + intranet foreach ms ( $SMTP ) $IPTABLES -A OUTPUT -p TCP --sport $p_high -d $ms --dport smtp \ -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -o $EXT -m state --state NEW -p TCP --sport \ $p_high -d $ms --dport smtp -j ACCEPT end # -------------------------------------------------------------------------- # Mail (empfamgen via POP3) Regelketten fuer den Server/Router + intranet foreach ms ( $POP3 ) $IPTABLES -A OUTPUT -p TCP --sport $p_high -d $ms --dport pop3 \ -m state --state NEW -j ACCEPT $IPTABLES -A FORWARD -o $EXT -m state --state NEW -p TCP --sport \ $p_high -d $ms --dport pop3 -j ACCEPT end # -------------------------------------------------------------------------- # ident-Regelsatz $IPTABLES -A FORWARD -i $EXT -p TCP --dport auth --syn -j REJECT $IPTABLES -A INPUT -p TCP --dport auth --syn -j REJECT # -------------------------------------------------------------------------- # FTP-Regelketten fuer den Server/Router und das intranet $IPTABLES -A FORWARD -o $EXT -p TCP --sport $p_high --dport ftp \ -m state --state NEW -j ACCEPT $IPTABLES -A OUTPUT -p TCP --sport $p_high --dport ftp -m state \ --state NEW -j ACCEPT # -------------------------------------------------------------------------- # So, das war's! ;-) Den Rest sperren und loggen $IPTABLES -A INPUT -j my_drop $IPTABLES -A FORWARD -j my_drop $IPTABLES -A OUTPUT -j my_drop echo $DONE Du musst bei Dir "nur noch" die Variablen Deiner Umgebung anpassen: # -------------------------------------------------------------------------- # Definition der Interfaces [ DSL (ppp0) via eth0 ] set EXT = ippp0 # für ISDN set INT = eth1 # ev. eth0 für Deine NIC set IF = ( $EXT $INT ) # -------------------------------------------------------------------------- # Definitionen der Server und hosts set INTERN = 192.168.10.0/255.255.255.0 # interne Netzwerk ggf. hier anpassen. set loghost = 192.168.10.10 # Host auf dem die Zugriffsversuche dokumentiert werden # sollen, ggf. anpassen set NS = ( 212.185.252.201 194.25.2.129 ) # name-server von t-online, bzw. den "richtigen" set SMTP = ( 195.20.224.208 195.20.224.209 195.20.224.219 195.20.224.220 195.20.224.204 ) # SMTP-Server bei puretec.de bzw. Deines Providers set POP3 = ( 212.227.126.134 212.227.126.130 212.227.126.138 212.227.126.142 ) # POP3-Server bei puretec.de bzw. Deines Providers Na denn Viel Spaß beim umschreiben deiner ipchains-Regeln und wenn 'was unklar sein sollte, einfach melden! cu, BC -- Michael Nausch Anzinger Str. 20 85586 Poing +49-8121-989810 (voice) +49-8121-971941 (fax) http://omni128.de michael@nausch.org
participants (2)
-
Michael Nausch
-
Michael Raab