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 eine AlteSeite aus unserem UseModWiki bei Sourceforge.

Bitte überarbeite die Seite, passe die Formatierung für
>>das <<JSPWiki an
und entferne diesen Text.

Vielen Dank!

{{{
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}]