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