This page (revision-6) was last changed on 12-Jun-2008 21:49 by JensKapitza 

This page was created on 03-Oct-2006 21:29 by UnknownAuthor

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
6 12-Jun-2008 21:49 10 KB JensKapitza to previous mein fw script
5 19-Feb-2008 21:16 10 KB PeterHormanns to previous | to last Kategorie raus
4 17-Jan-2008 17:10 10 KB PeterHormanns to previous | to last Tagging
3 10-Feb-2007 12:27 10 KB PeterHormanns to previous | to last Kategorie und Link
2 14-Nov-2006 10:15 9 KB PeterHormanns to previous | to last für Filter formatiert
1 03-Oct-2006 21:29 9 KB UnknownAuthor to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

Dies ist das von uns
erarbeitete Script für unsere Firewall:

{{{
 #!/bin/bash

 # Zensur-Hinweis
 # Da dieses Script von der LUG Krefeld erstellt worden ist, soll es auch
 # innerhalb und ausserhalb dieser Gruppe veroeffentlicht werden duerfen.
 # Da es jedoch teilweise sicherheitsrelevante interne Daten wie z.B.
 # interne IP-Adressen enthaelt, sind einige Zeilen mit "### ZENSUR"
 # gekennzeichnet. Diese Zeilen muessen vor der Veroeffentlichung entfernt
 # werden. Dies kann z.B. erfolgen mit:

 DEV_INET=ppp0
 DEV_BAYENNET=eth0
 DEV_LUGNET=eth1
 # Beispiel:
 # LOCALNET=192.168.1.0/24
 # Die Maske fuer Server im Internet. Sie wird fuer smtp, news etc. benutzt.
 # Im Zweifelsfalle kann hier ! $LOCALNET eingetragen werden.
 # Die hier angegebene scheint fuer T-Online zu taugen.
 PROVIDERSERVER=194.25.134.0/24


 # Wenn ich komplexe Dienste habe, die mehr als einen Port haben und diese nicht
 # global, sondern nur bestimmten Rechnern freigeben will, ist es sinnvoll, hierfuer
 # eigene chains zu erzeugen. Dies geschieht in den folgenden Routinen.

 makechain_tonline(){
   # Wenn auf einem Rechner die T-Online 3.0-Software laufen darf,
   # kommen seine Pakete in diese Chain:
   # Es ist vorher sichergestellt, dass nur ausgehende Verb. hierhergelangen
   TONLINESERVER=194.25.134.0/24
   iptables -N tonline
   # Beim Verbindungsaufbau geht ein einzelnes Paket an diesen Port:
   iptables -A tonline -j ACCEPT -s $LOCALNET -d $TONLINESERVER -p udp --dport 811
   iptables -A tonline -j ACCEPT -d $LOCALNET -s $TONLINESERVER -p udp --sport 811
   # Das ist die eigentliche T-Online-Classic-Verbindung
   iptables -A tonline -j ACCEPT -s $LOCALNET -d $TONLINESERVER -p tcp --dport 866
   iptables -A tonline -j ACCEPT -d $LOCALNET -s $TONLINESERVER -p tcp --sport 866
 }

 makechain_email(){
   # Wenn ein Rechner einen eigenen EMail-Client haben darf,
   # kommen seine Pakete in diese Chain:
   # Es ist vorher sichergestellt, dass nur ausgehende Verb. hierhergelangen
   iptables -N email
   iptables -A email -j ACCEPT -s $LOCALNET -d ! $LOCALNET     -p tcp --dport pop3
   iptables -A email -j ACCEPT -d $LOCALNET -s ! $LOCALNET     -p tcp --sport pop3
   iptables -A email -j ACCEPT -s $LOCALNET -d $PROVIDERSERVER -p tcp --dport smtp
   iptables -A email -j ACCEPT -d $LOCALNET -s $PROVIDERSERVER -p tcp --sport smtp
 }

 makechain_laestig(){
   # Hier werden Pakete, die ab und zu vorkommen, die nervig sind, die aber nicht
   # ins logfile sollen, weil sie bekannt und unvermeidbar sind, verworfen.
   iptables -N laestig
   iptables -A laestig -j DROP -p udp --sport netbios-dgm --dport netbios-dgm \
                               -m limit --limit 10/minute --limit-burst 10
   iptables -A laestig -j DROP -p udp --sport netbios-ns --dport netbios-ns \
                               -m limit --limit 10/minute --limit-burst 10
 }

 makechains(){
   makechain_tonline
   makechain_email
   makechain_laestig
 }

 deletechains(){
   iptables -X tonline >/dev/null 2>&1
   iptables -X email   >/dev/null 2>&1
   iptables -X laestig >/dev/null 2>&1
 }

 flush(){
   iptables -P INPUT   $1
   iptables -P OUTPUT  $1
   iptables -P FORWARD $1
   iptables -F
   iptables -F INPUT
   iptables -F OUTPUT
   iptables -F FORWARD
   iptables -X in_private >/dev/null 2>&1
   iptables -X papierkorb >/dev/null 2>&1
   iptables -X netzeingang >/dev/null 2>&1
   iptables -X netzausgang >/dev/null 2>&1
   iptables -X fweingang >/dev/null 2>&1
   iptables -X fwausgang >/dev/null 2>&1
   deletechains
   # Masquerading und Routing abschalten
   iptables -t nat -F POSTROUTING
   echo 0 >/proc/sys/net/ipv4/ip_forward
 }

 stop() {
   flush ACCEPT
 }

 close() {
   flush DROP
 }

 start() {
   # Erstmal ein Unterprogramm aufrufen, um alles zu sperren
   flush DROP

   # Kette papierkorb
   # hier landen alle Pakete, die geloggt und weggeschmissen werden
   iptables -N papierkorb
   iptables -A papierkorb -j LOG --log-level notice \
            -m limit --limit 60/minute --limit-burst 20
   iptables -A papierkorb -j DROP

   # Verhindern, dass Pakete mit privaten Adressen von draussen hereinkommen
   iptables -N in_private
   iptables -F in_private
   iptables -A in_private -j papierkorb -s 127.0.0.0/8
   iptables -A in_private -j papierkorb -s 10.0.0.0/8
   iptables -A in_private -j papierkorb -s 172.16.0.0/12
   iptables -A in_private -j papierkorb -s 192.168.0.0/16
   iptables -A in_private -j papierkorb -s 224.0.0.0/4
   iptables -A in_private -j papierkorb -s 240.0.0.0/4
   # INPUT und FORWARD auf solche privaten Adressen ueberpruefen
   iptables -A INPUT   -j in_private -i $DEV_INET
   iptables -A FORWARD -j in_private -i $DEV_INET

   # Sachen, die der Nameserver selber im Internet darf:
   iptables -A OUTPUT -j ACCEPT -o $DEV_INET -p tcp --sport 1024: --dport domain \
            -m state --state ESTABLISHED,NEW
   iptables -A OUTPUT -j ACCEPT -o $DEV_INET -p udp --sport 1024: --dport domain \
            -m state --state ESTABLISHED,NEW
   iptables -A INPUT -j ACCEPT -i $DEV_INET -p tcp --sport domain --dport 1024: \
            -m state --state ESTABLISHED
   iptables -A INPUT -j ACCEPT -i $DEV_INET -p udp --sport domain --dport 1024: \
            -m state --state ESTABLISHED

   # Spezialchains erzeugen
   makechains


   # Eingang in die Firewall selber:
 
   ############################################################################
   iptables -N fweingang
   iptables -A INPUT -j fweingang -i $DEV_BAYENNET
   iptables -A INPUT -j fweingang -i $DEV_LUGNET
   iptables -N fwausgang
   iptables -A OUTPUT -j fwausgang -o $DEV_BAYENNET
   iptables -A OUTPUT -j fwausgang -o $DEV_LUGNET
   # Grundvoraussetzungen fuer geroutete Pakete:
   iptables -A fweingang -j papierkorb -s ! $LOCALNET
   iptables -A fweingang -j papierkorb -m state --state INVALID
   iptables -A fwausgang -j papierkorb -d ! $LOCALNET
   iptables -A fwausgang -j papierkorb -m state --state INVALID,NEW
   # Windows-Broadcasts wegfiltern:
   iptables -A fweingang -j laestig

   # ICMP-Pakete freigeben.
   # Typ 3/Code 4 "fragmentation needed" kommt oft vor. Darueber sollte ich
   # interne Clients informieren.
   iptables -A fwausgang -j ACCEPT -p icmp --icmp-type fragmentation-needed

   # und jetzt werden die eigentlichen Protokolle freigegeben
   iptables -A fweingang -j ACCEPT -p tcp --dport ssh
   iptables -A fwausgang -j ACCEPT -p tcp --sport ssh
   # iptables -A fweingang -j ACCEPT -p tcp --dport telnet
   # iptables -A fwausgang -j ACCEPT -p tcp --sport telnet
   iptables -A fweingang -j ACCEPT -p tcp --dport domain
   iptables -A fwausgang -j ACCEPT -p tcp --sport domain
   iptables -A fweingang -j ACCEPT -p udp --dport domain
   iptables -A fwausgang -j ACCEPT -p udp --sport domain

   # Vorschlag:
   # (Das wuenscht sich Kai)
   #tcp fweingang,telnet



   # Ein- und Ausgangspakete fuer die beiden lokalen Netze in gemeinsame Chains
 
   ############################################################################
   iptables -N netzeingang
   iptables -A FORWARD -j netzeingang -i $DEV_INET -o $DEV_BAYENNET
   iptables -A FORWARD -j netzeingang -i $DEV_INET -o $DEV_LUGNET
   iptables -N netzausgang
   iptables -A FORWARD -j netzausgang -o $DEV_INET -i $DEV_BAYENNET
   iptables -A FORWARD -j netzausgang -o $DEV_INET -i $DEV_LUGNET
   # Grundvoraussetzungen fuer geroutete Pakete:
   iptables -A netzeingang -j papierkorb -d ! $LOCALNET
   iptables -A netzeingang -j papierkorb -m state --state INVALID,NEW
   iptables -A netzausgang -j papierkorb -s ! $LOCALNET
   iptables -A netzausgang -j papierkorb -m state --state INVALID

   # und jetzt werden die eigentlichen Protokolle freigegeben
   iptables -A netzeingang -j ACCEPT -p tcp --sport www
   iptables -A netzausgang -j ACCEPT -p tcp --dport www
   iptables -A netzeingang -j ACCEPT -p tcp --sport https
   iptables -A netzausgang -j ACCEPT -p tcp --dport https
   iptables -A netzeingang -j ACCEPT -p tcp --sport nntp
   iptables -A netzausgang -j ACCEPT -p tcp --dport nntp


   # Jetzt backe ich eine Extrawurst fuer den Rechner in der Wohnung
   # Er darf selber EMail machen und Classic T-Online benutzen
   iptables -A netzeingang -j tonline -d $EXTRAWURST
   iptables -A netzausgang -j tonline -s $EXTRAWURST
   iptables -A netzeingang -j email -d $EXTRAWURST
   iptables -A netzausgang -j email -s $EXTRAWURST
   iptables -A netzeingang -j email -d $LUGEXTRAWURST
   iptables -A netzausgang -j email -s $LUGEXTRAWURST
   # ssh-Ausgang z.B. fuer Sourceforge
   iptables -A netzeingang -j ACCEPT -p tcp --sport ssh -d $TESTEXTRAWURST
   iptables -A netzausgang -j ACCEPT -p tcp --dport ssh -s $TESTEXTRAWURST
   iptables -A netzeingang -j ACCEPT -p tcp --sport ssh -d $LUGEXTRAWURST
   iptables -A netzausgang -j ACCEPT -p tcp --dport ssh -s $LUGEXTRAWURST


   # Der Rest kommt in den Muell
 
   ############################################################################
   iptables -A INPUT   -j papierkorb
   iptables -A OUTPUT  -j papierkorb
   iptables -A FORWARD -j papierkorb

   # Fuer ins Internet gehende Pakete Masquerading einschalten
   iptables -t nat -A POSTROUTING -o $DEV_INET -j MASQUERADE
   echo 1 >/proc/sys/net/ipv4/ip_forward
 }



 case $1 in
   start)
     echo -n "Starting IP filtering... "
     start
     echo "done"
     ;;
   restart)
     echo -n "Re-Starting IP filtering... "
     stop
     start
     echo "done"
     ;;
   stop)
     echo -n "Stopping IP filtering... "
     stop
     echo "done"
     ;;
   close)
     echo -n "Closing IP interfaces... "
     stop
     echo "done"
     ;;
   *)
     echo "Usage: $0 start | restart | stop | close"
     exit 1
 esac

 exit 0
<<}}}

:in meinem Script sind ein paar denkanstöße zur nutzung von squit, das laden von iptables modulen und ein paar wenige dienste. File --> fw.sh Input Output und forward wird gefiltert! es geht eventuell so einiges nicht mehr durch den router!  

!Links
*[http://electron.mit.edu/~gsteele/firewall/] - Simple Linux Firewall

[{Tag Firewall Linux}]