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