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
Add new attachment
Only authorized users are allowed to upload new attachments.
List of attachments
Kind | Attachment Name | Size | Version | Date Modified | Author | Change note |
---|---|---|---|---|---|---|
sh |
fw.sh | 3.7 kB | 1 | 12-Jun-2008 21:46 | JensKapitza |