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