Firewall auf vServer (Debian)

Megabyte

New Member
Hallo,
ich habe einen vServer gemietet und wollte darauf mal eine Firewall einrichten. Dazu hab ich iptables verwendet und unter /etc/init.d/ eine Datei firewall mit folgendem Inhalt angelegt:
Code:
#!/bin/sh
echo "Initialisiere Firewall..."
modprobe ip_conntrack_ftp
iptables -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -N MYDDROP
iptables -N MYACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state INVALID -j MYDROP
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A MYDROP -j LOG --log-prefix "FW-DROP: "
iptables -A MYDROP -j DROP
iptables -A MYACCEPT -j LOG --log-prefix "FW-ACCEPT: "
iptables -A MYACCEPT -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j MYACCEPT
iptables -A INPUT -p icmp -j MYACCEPT
iptables -A OUTPUT -p icmp -j MYACCEPT
iptables -A INPUT -p udp --dport 53 -j MYACCEPT
iptables -A INPUT -p tcp --dport 53 -j MYACCEPT
iptables -A OUTPUT -p udp --dport 53 -j MYACCEPT
iptables -A OUTPUT -p tcp --dport 53 -j MYACCEPT
iptables -A INPUT -p udp --dport 80 -j MYACCEPT
iptables -A OUTPUT -p udp --dport 80 -j MYACCEPT
iptables -A INPUT -p udp --dport 25 -j MYACCEPT
iptables -A OUTPUT -p udp --dport 25 -j MYACCEPT
iptables -A INPUT -p udp --dport 110 -j MYACCEPT
iptables -A INPUT -p udp --dport 143 -j MYACCEPT
iptables -A INPUT -p udp --dport 21 -j MYACCEPT
iptables -A OUTPUT -p udp --dport 21 -j MYACCEPT
iptables -A INPUT udp --dport 67 -J MYACCEPT
echo "Firewall ist konfiguriert und aktiv"

Wenn ich das jetzt mit /etc/init.d/firewall start starte, ist sofort alles tot (=alle Ports dicht).
Was ist an meinen Regeln falsch???
 
Das gleiche Problem hatte ich auch mal. Weiß aber nicht mehr genau, warum es da war. Ich habe es auf eine komische Weise umgangen.

Zuerst schalte ich alle Port frei und lösche bestehende Regeln. mit:
Code:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F
iptables -X
Danach kommen meine IpTables Regeln, und zum schluss des Skripts schließe ich alles mit
Code:
iptables -P INPUT DROP
iptables -P OUTPUT DROP

So funktioniert es zumindest bei mir.

Meine Vermutung war damals, dass während das Skript durch läuft, über die Policy irgend etwas gesperrt wird, so dass das Skript nicht sauber zu ende läuft.
 
Habs gerade ausprobiert. Klappt aber auch nicht; es tritt genau der selbe Effekt auf.

Gibts sonst noch Ideen, wie ich endlich ne Firewall zum laufen bekomme??
 
Welcher Effekt tritt denn auf?

Kommst du garnicht mehr in den Server rein, werden irgendwelche bestimmten Ports weggelassen? Schau dir mal bitte die Direktiven an, die du vergibst. Beim http-Port 80 verwendest du beispielsweise das UDP Protokoll. Du solltest hier aber das TCP Protokol verwenden. Bei mir sieht das für http Beispielsweise so aus:
Code:
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -A http -p TCP -j ACCEPT
iptables -A https -p TCP -j ACCEPT
 
Hab jetzt nur mal die Regel für http (wie du sie geschrieben hast) in das Skript geschrieben (und halt Anfang und Ende aus deinem ersten Post). Aber sobald ich das Skript starte sind sofort alle Ports dicht und ich muss den Server neustarten.
 
Sorry, das war mein Fehler. Der Code war nicht komplett!!!

Das müsste wenn man es nur für SSH und http(s) haben will so aussehen:
Code:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Iptables -F
iptables -X

# Schalte Loopback Device zur internen Kommunikation frei!
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Eingehende Verbindung zum SSH Server des Webservers
iptables -A INPUT -p TCP --sport 1024:65535 --dport 22  -j ssh
iptables -A OUTPUT -p TCP  --dport 1024:65535  --sport 22  -j ssh
iptables -A ssh -p TCP -j ACCEPT

# ------------ http(s) --------------------------
# Zugriff auf den Webserver
iptables -N http
iptables -N https
iptables -A INPUT -p TCP  --dport 80  --sport 1024:65535 -j http
iptables -A OUTPUT -p TCP  --sport 80 --dport 1024:65535 -j http
iptables -A INPUT -p TCP  --dport 443 --sport 1024:65535 -j https
iptables -A OUTPUT -p TCP --sport 443 --dport 1024:65535 -j https

#Policy schliessen
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

So, dann sollten die Ports für SSH und für http(s) eigentlich funktionieren.

Sorry, wegen dem falschen Skript.

Gruß Mordor
 
Danke schön. Ich dachte da eher an ein Howto oder so änlich. Werde mir mal deinen Link zu gemüte führen.
 
Moin,

leider auch mit dem Code kein Erfolg. Nach dem Start kommt erst noch die Fehlermeldung: line4: Iptables: command not found.

Und dann sind wieder alle Ports dicht.

Was kann ich noch machen??
 
Oh. ja den schreibfehler hab ich jetzt gefunden.

Aber die Ports sind trotzdem alle dicht, wenn ich das Skript starte. Allerdings kommt diesmal folgende Meldung:

Code:
iptables v1.3.6: Couldn't load target `ssh':/lib/iptables/libipt_ssh.so: cannot open shared object file:
 
Das liegt an den Zeilen
Code:
iptables -A INPUT -p TCP --sport 1024:65535 --dport 22  -j ssh
iptables -A OUTPUT -p TCP  --dport 1024:65535  --sport 22  -j ssh
Ich frage mich ja immer wieder, was Leute mit solchen "Firewalls" bezwecken möchten, wenn sie die Regeln nicht verstehen und nicht verstehen, wovor sie sich eigentlich schützen möchten...
 
Einfach '-j ssh' durch '-j ACCEPT' ersetzen.

Ich an deiner Stelle würde mir aber ernsthaft Gedanken über den zweiten Teil meines letzten Beitrags machen...
 
Ich will mich mit der Firewall vor Angriffen über offene Ports schützen. Ist der Einsatz einer Firewall auf einem vServer (als Web-, Mail- und DB-Server genutzt) deiner Meinung nach nicht sinnvoll??
 
Ich will mich mit der Firewall vor Angriffen über offene Ports schützen.
Das bewirkt dein Skript jedenfalls nicht. Was sind für dich denn "offene Ports"?
Ist der Einsatz einer Firewall auf einem vServer (als Web-, Mail- und DB-Server genutzt) deiner Meinung nach nicht sinnvoll??
In der von dir geposteten Form und wie die meisten Benutzer hier Paketfilter einsetzen definitiv nicht.
 
"Offene Ports" sind für mich Ports die offen sind, obwohl sie nicht von einer Anwendung gebraucht werden und über die Angriffe möglich wären.

In welchen Fällen ist eine Firewall denn dan sinnvoll??
 
"Offene Ports" sind für mich Ports die offen sind, obwohl sie nicht von einer Anwendung gebraucht werden und über die Angriffe möglich wären.
Das, so leid es mir tut, gibt es schlicht und ergreifend nicht. Ein Port ist dann "offen", wenn sich eine Anwendung spezifisch an diesen Port gebunden hat. Ansonsten ist der Port "zu" und der TCP/IP-Stack des Betriebssystems sendet beim Versuch, sich zu diesem Port zu verbinden, ein "port closed" (TCP-RST).
 
Last edited by a moderator:
Generell sind Ports nur dann offen, wenn ein Programm darauf lauscht, oder ein programm darauf sendet. Hast du also darauf geachtet, was du installiert hast, so sind nur Ports offen, die auch offen sein sollen/müssen.

Ich benutze IpTables hauptsächlich dazu, um den Traffic der einzelnen Dienste wie SSH oder http in eine Jain zu überführen. Das wird dann einmal am Tag mit einem Perl-Skript ausgelesen. So weiß ich wieviel Traffic über den jeweiligen Dienst pro Tag gelaufen ist. Ausserdem verwende ich es, um bestimmte Pakete mitloggen zu lassen.

Ob das zu machen aller Ports und das spezifische öffnen einiger benutzter Ports sinn macht oder nicht, da streiten sich wohl die Geister.
 
Back
Top