• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

Firewall unter SuSE 9.2

Hallo!

Ich habe ein paar Verständisprobleme mit der SuSE-Firewall:

Ich möchte die IP-Tables per Hand in einer Datei ändern können z.B. von dieser Quelle (Typ3-Router):

http://www.linux-club.de/viewtopic.php?t=25743

Wie muss ich das Script anwenden? Muss die SuSE-Firewall deaktiviert werden? Wird dann das Script automatisch ausgeführt?

Vielen Dank für die Antworten!
 

Martin Breidenbach

Ultimate Guru
1. /etc/init.d/skeleton ansehen - das ist ein Beispielskript zum Starten und Stoppen von Diensten
2. entsprechendes Firewallskript schreiben
3. Skript mit insserv installieren
4. Jetzt kann man es im Runleveleditor aktivieren/deaktivieren

... und SuSEFirewall kann dann deinstalliert werden.
 
OP
M

marcus1907

Newbie
Hallo!

Ich wollte das Script erstmal testen:

Ich muss doch die das Script mit ./script starten oder?

Ich erhalte danach nur Fehlermeldungen "Command not found" und es ist kein Netzwerkverkehr mehr möglich.

Was läuft hier falsch?


marcus1907
 
OP
M

marcus1907

Newbie
Hallo!

Folgendes:

Ich habe eine neue Datei (script) angelegt mit folgendem Inhalt:

Code:
#!/bin/bash 
#############  Firewallskript für einen Linux Router 
# copyright (c) gaw 
# Autor: gaw 
# Oktober 2004 

############# Initialisierung der Variablen 

############# Interfaces 
INTERFACE_EXT="ppp0" 
INTERFACE_INT="eth0"    
INTERFACES="$INTERFACE_EXT $INTERFACE_INT" 
$ROUTER_IP="192.168.1.10" 
$WEB_SERVER_IP="192.168.1.200" 
$LOCAL_NET_IP="192.168.1.0/24" 

############# Portnummern 
PORTS_HIGH="1024:65535" 
# Bei mir stehen noch ein paar mehr;) 

############# Programm 
IPTABLES="/usr/sbin/iptables" 



############# Grundkonfiguration 

############# Vorläufiges Ausschalten des IP Forwarding. 
echo "0" > /proc/sys/net/ipv4/ip_forward 

############# TCP-Syncookies, Abwehrmaßnahme gegen das SYN Flooding. 
echo "1" > /proc/sys/net/ipv4/tcp_syncookies 

############# Ignorieren von Echoauforderungen von icmp 
############# Abwehrmaßnahme gegen Broadcast-Stürme 
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 

############# Das Loggen ungültiger ICMP-Pakete wird ausgeschaltet, 
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 

############# Schleife für alle Schnittstellen in $INTERFACES 
for if in $INTERFACES; 
do 

        ##### IP-Spoof Protection 
        echo "1" > /proc/sys/net/ipv4/conf/$if/rp_filter 

        ##### Keine Redirections 
        echo "0" > /proc/sys/net/ipv4/conf/$if/accept_redirects 

        ##### Kein Source-Routing 
        echo "0" > /proc/sys/net/ipv4/conf/$if/accept_source_route 

        ##### Kein Bootstrap Protokoll 
        echo "0" > /proc/sys/net/ipv4/conf/$if/bootp_relay 

        ##### Ungültige IP-Pakete werden geloggt. 
        echo "1" > /proc/sys/net/ipv4/conf/$if/log_martians 
done 
echo "Dynamische Kernelparameter gesetzt" 

############ Alle Pakete der Grundeinstellung werden verworfen 

$IPTABLES -P INPUT DROP 
$IPTABLES -P FORWARD DROP 
$IPTABLES -P OUTPUT DROP 

############ Alle eventuell noch vorhandenen Regeln werden gelöscht 

############ Lösche alle Regeln aus der Filter Tabelle 
$IPTABLES -F 

############ Lösche aller Regeln aus der NAT Tabelle 
$IPTABLES -t nat -F 

############ Lösche alle selbstdefinierten Regeln 
$IPTABLES -X 

echo "Alles verboten und alle Regeln gelöscht" 

############ Selbstdefinierte Regelkette zum Loggen wird erstellt 

$IPTABLES -N TRASH 

# Hier folgen Regeln für Pakete die nicht geloggt werden sollen als 
# Schutz gegen ein Überquellen der Logdateien 
$IPTABLES -A TRASH -p UDP --dport 123 -j DROP 
# IPP-Anfragen zur Druckereinstellungen müssen nicht geloggt werden 
$IPTABLES -A TRASH -p UDP -s 192.168.0.1 --dport 631 -j DROP 
$IPTABLES -A TRASH -p UDP --dport $NETBIOS_PORTS -j DROP 
$IPTABLES -A TRASH -p TCP --dport $NETBIOS_PORTS -j DROP 
$IPTABLES -A TRASH -p TCP --dport 445 -j DROP 
$IPTABLES -A TRASH -p TCP --dport 135 -j DROP 

# Diese Pakete sollen geloggt werden 
$IPTABLES -A TRASH -p ICMP -j LOG --log-prefix "Abgelehnte-ICMP-Pakete " 
$IPTABLES -A TRASH -p UDP  -j LOG --log-prefix "Abgelehnte-UDP-Pakete " 
$IPTABLES -A TRASH -p TCP  -j LOG --log-prefix "Abgelehnte-TCP-Pakete " 
$IPTABLES -A TRASH -j DROP 

echo "Loggin eingeschaltet" 


############ Bis hier ist alles verboten. Nun werden bestimmte 
############ Pakete wieder akzeptiert 

############ Lokale Prozesse auf dem Rechner akzeptieren ############### 
$IPTABLES -A OUTPUT -o lo -j ACCEPT 
$IPTABLES -A INPUT  -i lo -j ACCEPT 

echo "Lokale Prozesse erlaubt" 
############ SSH Verbindungen vom internen Netz erlauben 

$IPTABLES -A INPUT -i $INTERFACE_INT -s $LOCAL_NET -d $ROUTER_IP \ 
          -p TCP --sport $PORTS_HIGH --dport ssh \ 
          -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT 


$IPTABLES -A OUTPUT -o $INTERFACE_INT -s $ROUTER_IP -d $LOCAL_NET \ 
          -p TCP --dport $PORTS_HIGH --sport ssh \ 
          -m state --state ESTABLISHED,RELATED -j ACCEPT 

echo "ssh vom LAN auf den Router erlaubt" 

########### Masquarading einschalten 


$IPTABLES -t nat -A POSTROUTING -o $INTERFACE_EXT -j MASQUERADE 

########### IP-Forwarding und DNAT einschalten 
echo "1" > /proc/sys/net/ipv4/ip_forward 
echo "1" > /proc/sys/net/ipv4/ip_dynaddr 

echo "Masquerading eingeschaltet" 

########### Web-Anfragen werden auf internen Webserver umgelenkt 

$IPTABLES -A PREROUTING -t nat -p tcp --dport $HTTP_PORT -i ppp0 \ 
        -j DNAT --to-destination $WEB_SERVER_IP 

echo "DNAT für Webserver eingeschaltet:" 
echo "http-Anfragen werden nach $WEB_SERVER_IP umgeleitet" 

########### WEB-Anfragen zum Weiterleiten werden akzeptiert 

$IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT \ 
                 -d $WEB_SERVER_IP -m state \ 
                  --state NEW,ESTABLISHED,RELATED -p TCP \ 
                 --sport $PORTS_HIGH \ 
                  --dport http -j ACCEPT 

 $IPTABLES -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT \ 
                 -s $WEB_SERVER_IP -m state \ 
                  --state ESTABLISHED,RELATED -p TCP \ 
                 --sport http \ 
                  --dport $PORTS_HIGH -j ACCEPT 

echo "WEB-Anfragen aus dem Netz werden akzeptiert" 

########### DNS Verbindungen erlauben 

$IPTABLES -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT \ 
                   -m state \ 
                  --state NEW,ESTABLISHED,RELATED -p UDP --sport $PORTS_HIGH \ 
                  --dport 53 -j ACCEPT 


$IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT \ 
                   -m state \ 
                  --state ESTABLISHED,RELATED  -p UDP --sport 53 \ 
                  --dport $PORTS_HIGH -j ACCEPT 


 echo "DNS  eingeschaltet" 

########### smtp Verbindungen erlauben 

$IPTABLES -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT \ 
                   -m state \ 
                  --state NEW,ESTABLISHED,RELATED -p TCP --sport $PORTS_HIGH \ 
                  --dport smtp -j ACCEPT 

$IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT \ 
                   -m state \ 
                  --state ESTABLISHED,RELATED  -p TCP --sport smtp \ 
                  --dport $PORTS_HIGH -j ACCEPT 

echo "smtp  eingeschaltet" 

########### POP3 Verbindungen erlauben 

$IPTABLES -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT \ 
                   -m state \ 
                  --state NEW,ESTABLISHED,RELATED -p TCP --sport $PORTS_HIGH \ 
                  --dport 110 -j ACCEPT 

$IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT \ 
                   -m state \ 
                  --state ESTABLISHED,RELATED  -p TCP --sport 110 \ 
                  --dport $PORTS_HIGH -j ACCEPT 

echo "POP3  eingeschaltet" 



########### http -Verbindungen erlauben 
# 
$IPTABLES -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT \ 
                   -m state \ 
                  --state NEW,ESTABLISHED,RELATED -p TCP --sport $PORTS_HIGH \ 
                  --dport http -j ACCEPT 

$IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT \ 
                   -m state \ 
                  --state ESTABLISHED,RELATED  -p TCP --sport http \ 
                  --dport $PORTS_HIGH -j ACCEPT 

echo "http eingeschaltet" 

########### https-Verbindungen erlauben 

$IPTABLES -A FORWARD -i $INTERFACE_INT -o $INTERFACE_EXT \ 
                   -m state \ 
                  --state NEW,ESTABLISHED,RELATED -p TCP --sport $PORTS_HIGH \ 
                  --dport https -j ACCEPT 

$IPTABLES -A FORWARD -i $INTERFACE_EXT -o $INTERFACE_INT \ 
                   -m state \ 
                  --state ESTABLISHED,RELATED  -p TCP --sport https \ 
                  --dport $PORTS_HIGH -j ACCEPT 

echo "https eingeschaltet" 

########### Bestimmte ICMP Anfragen werden gestattet. 
  
# 
# Vom Netz ins Internet zur Diagnose nützlich 
# $IPTABLES -A FORWARD -p ICMP --icmp-type 
# echo-request -j ACCEPT 
# $IPTABLES -A FORWARD -p ICMP --icmp-type 
# echo-reply -j ACCEPT 

# ROUTER_IP 
$IPTABLES -A OUTPUT -p ICMP --icmp-type echo-request -j ACCEPT 
$IPTABLES -A OUTPUT -p ICMP --icmp-type echo-reply -j ACCEPT 
$IPTABLES -A OUTPUT -p ICMP --icmp-type redirect -j ACCEPT 
$IPTABLES -A INPUT -p ICMP --icmp-type echo-request -j ACCEPT 
$IPTABLES -A INPUT -p ICMP --icmp-type echo-reply -j ACCEPT 
$IPTABLES -A INPUT -p ICMP --icmp-type redirect -j ACCEPT 
echo "ICMP Anfragen des Firewallrouters werden gestattet" 




############ Rest wird gesperrt und geloggt 
$IPTABLES -A INPUT   -j TRASH 
$IPTABLES -A FORWARD -j TRASH 
$IPTABLES -A OUTPUT  -j TRASH 
echo "Firewall eingeschaltet"

Dann habe ich das Script mit

Code:
chmod a+x script

ausführbar gemacht und dann mit ./script gestartet. Danach erhalte folgende Fehlermeldungen:

./script: line 13: =192.168.1.10: command not found
./script: line 14: =192.168.1.200: command not found
./script: line 15: =192.168.1.0/24: No such file or directory
./script: line 46: /proc/sys/net/ipv4/conf/ppp0/rp_filter: No such file or directory
./script: line 49: /proc/sys/net/ipv4/conf/ppp0/accept_redirects: No such file or directory
./script: line 52: /proc/sys/net/ipv4/conf/ppp0/accept_source_route: No such file or directory
./script: line 55: /proc/sys/net/ipv4/conf/ppp0/bootp_relay: No such file or directory
./script: line 58: /proc/sys/net/ipv4/conf/ppp0/log_martians: No such file or directory
Dynamische Kernelparameter gesetzt

Danach stürzt das Netzwerk ab und man hat vom LAN aus keine Zugriff auf den Server mehr.

Warum geht das Script bei mir nicht?


marcus1907
 

Martin Breidenbach

Ultimate Guru
Ergänzung:

Wenn Du in einem bash-Skript eine Variable definierst dann geht das ohne '$'. Mit dem '$' erhältst Du ihren Wert.

$IPTABLES weiter unten ersetzt sich dabei z.B. durch /usr/sbin/iptables

Ansonsten: wenn Du bei der Sache neu bist dann fang doch mit einem einfachen Skript an und wenn Du das soweit verstanden hast dann bau komplexere Sachen ein. Sonst sieht man ja den Wald vor lauter Bäumen nicht.
 
OP
M

marcus1907

Newbie
Hallo!

Hat jemand für mich ein einfach Firewallscript für einen DSL-Router unter SuSE 9.2?



marcus1907
 

Martin Breidenbach

Ultimate Guru
Hat SuSE doch im Lieferumfang - SuSEFirewall2. Schau mal hier rein:

http://www.linux-club.de/viewtopic.php?t=13317

Die Frage ist doch - was soll die Firewall denn machen ? Davon hängt ab was im Firewallskript steht. In der einfachsten Variante darf alles raus und nix ein - also default policy reject oder drop, masquerade ein, forward für neue Verbindungen von innen nach außen erlaubt, established und related Verbindungen werden erlaubt, ferdisch. Da kann man natürlich noch mehr einbauen - aber auf jeden Fall muß man sich selber die Frage stellen was die Firewall eigentlich machen soll bevor man anfängt ein eigenes Skript zu bauen.
 
OP
M

marcus1907

Newbie
Hallo!

Folgendes habe ich mit meinen Server vor:

Ich habe 3 Netzwerkkarten im Rechner, 1 LAN, 1 DSL und 1 WLAN. Der Server soll so konfiguriert werden, dass soweit alle Verbindungen vom LAN aus zugelassen werden sollen aber bei WLAN nur auf VPN-Port (VPN-Server) anfragen beantwortet werden.
Ich glaube das geht mit der SuSE Firewall nicht einzurichten oder?



marcus1907
 

Martin Breidenbach

Ultimate Guru
Ich wüßte momentan nicht wie man der SuSEFirewall2 das mit dem WLAN nur über VPN beibringen sollte.

Um ein eigenes Skript zu schreiben das das realisiert würde ich so vorgehen:

- Skript erstellen das die Grundfunktionalität eines DSL Routers realisiert
- austesten
- Skript um VPN über WLAN erweitern
- austesten
- Feinheiten einbauen
- austesten

WLAN nur über VPN zu machen halte ich übrigens für sehr sinnvoll. Ich habe vor das bei mir auch mal zu machen - dazu brauche ich aber erst einen separaten Access Point da meiner im DSL-Router drin steckt.

Ich hatte mal ein Firewall-Skript für unsere Firma gebaut. Darin habe ich in der Testphase nicht nur 'start' und 'stop' unterstützt sondern habe auch einen alternativen einfachen Satz Regeln eingebaut den man dann mit 'open' aufrufen konnte. './firewall stop' hat zugemacht, './firewall open' hat Zugang von außen gesperrt und von innen alles durchgelassen. Macht es einfacher wenn man im Skript was versaubeutelt hat aber man mal schnell ins Internet muß :)
 
Oben