Hallo Leutz!
Ich habe die letzten Tage erstmals versucht meine Firewall zu konfigurieren. Da ich ein Slackware habe und nicht so auf Oberflächen-hilfsmutti-programme stehe, mach ich das mit einem Script und iptables.
Nun hatte ich zuerst das Problem, das nicht die nötigen Module in meinem Kernel waren (selfbuild). Najagut, no problem, aktuellen kernel gesaugt, konfiguriert und neu gebaut.
So, die Module (also naja ich habs fest eingebaut) sind nun da. Jetzt bekam ich folgenden Fehler wenn ich mein Script ausführte: iptables: Unknown error 4294967295
Mein Script sieht so aus: #################################################################################### #!/bin/bash
ICH=$(ifconfig eth0 | egrep inet.*[0-9]{3}.[0-9]{3} | cut -d":" -f2 | cut -d" " -f1)
case "$1" in
start) echo "Starte Firewall..." echo "Sperre gesamten Netzwerkverkehr..." iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP echo "Öffne erlaubte, eingehende Verbindungen..."
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT echo "--" iptables -A INPUT -p tcp -s 192.168.0.0/24 --sport 1024: -d $ICH --dport 80 -m state --state NEW -j ACCEPT
echo "Öffne erlaubte, ausgehende Verbindungen..." iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
echo "Firewall erfolgreich gestartet!" ;; stop) iptables -F iptables -P INPUT ACCEPT iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT echo "Firewall erfolgreich gestoppt!" ;; status) iptables -nvL ;;
*) echo "Usage: $0 {start|stop|status}" exit 1 ;;
esac exit 0 #####################################################################################
Jetzt dacht ich mir, versuchste nochmal ne aktuelle version von iptables. Ich hab mir die 1.3.7 geladen und gebaut und nun bekomm ich nen anderen Fehler: iptables: No chain/target/match by that name
Kennt sich jemand damit aus?
Slackware 11, Kernel 2.6.19.2, iptables-1.3.7
am Thu, dem 18.01.2007, um 6:07:16 +0100 mailte Tietz, André folgendes:
So, die Module (also naja ich habs fest eingebaut) sind nun da. Jetzt bekam ich folgenden Fehler wenn ich mein Script ausführte: iptables: Unknown error 4294967295
Man kann ein script auch Zeile für Zeile testen und sieht dann, wo genau der Fehler kommt. Das mal als Hint vorweg.
Mein Script sieht so aus: #################################################################################### #!/bin/bash
ICH=$(ifconfig eth0 | egrep inet.*[0-9]{3}.[0-9]{3} | cut -d":" -f2 | cut -d" " -f1)
case "$1" in
start) echo "Starte Firewall..." echo "Sperre gesamten Netzwerkverkehr..." iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP echo "Öffne erlaubte, eingehende Verbindungen..."
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT echo "--" iptables -A INPUT -p tcp -s 192.168.0.0/24 --sport 1024: -d $ICH
--dport 80 -m state --state NEW -j ACCEPT
Du willst aus Deinem lokalen LAN Zugriff auf den Webserver zulassen, ja? Welches Interface ist eth0, das zum Lan oder das zu Inet? Und ja: das geht einfacher, Du kannst statt einer IP-Adresse auch gleich das Interface angeben. Das würde die Sache hier einfacher machen, vor allem könntest Du das Script schon laufen lassen, bevor das Interface eine IP hat.
echo "Öffne erlaubte, ausgehende Verbindungen..." iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Was ist mit ausgehenden Paketen, die eine Verbindung aufbauen sollen?
Andreas
Hi Andre,
On Thu, Jan 18, 2007 at 06:07:16 +0100, Tietz, Andre wrote:
start) echo "Starte Firewall..." echo "Sperre gesamten Netzwerkverkehr..." iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP echo "oeffne erlaubte, eingehende Verbindungen..."
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT echo "--" iptables -A INPUT -p tcp -s 192.168.0.0/24 --sport 1024: -d $ICH \ --dport 80 -m state --state NEW -j ACCEPT echo "oeffne erlaubte, ausgehende Verbindungen..." iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Hmm, so wirst Du niemals neue Verbindungen nach aussen aufbauen koennen. Nur der Webserver darf von aussen benutzt werden und kann auch antworten. Ausserdem blockst Du jegliche ICMP-Nachrichten, was keine so tolle Idee ist. Ist das so beabsichtigt?
Jetzt dacht ich mir, versuchste nochmal ne aktuelle version von iptables. Ich hab mir die 1.3.7 geladen und gebaut und nun bekomm ich nen anderen Fehler: iptables: No chain/target/match by that name
Poste mal die .config Deines Kernels, oder stell sie ins Netz und poste die URL.
Gruss, Chris
Am Thu den 18 Jan 2007 um 12:05:00PM +0100 schrieb Christian Perle:
Hi Andre,
echo "Sperre gesamten Netzwerkverkehr..." iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Das ist blöd, ein REJECT mit einem ICMP Port Unreachable o.ä. ist sinnvoller. Durch ein DROP wird dein Rechner noch lange nicht unsichtbar, er stellt sich blos taub. Wenn man an die IP deines Rechners was schickt und der wäre tatsächlich weg, würde der zuständige Router eine Fehlermeldung generieren, da er das aber nicht tut, wenn dein Rechner da ist, weiß ein Angreifer, daß du da bist... . Der Effekt eines DROPs besteht darin, daß fehlgeleitete Pakete ewig wiederholt werden, bis mal ein Timeout kommt. Das kann schon mal Stunden dauern.
Tschau, andre
On Thursday 18 January 2007 13:58, André Schulze wrote:
Am Thu den 18 Jan 2007 um 12:05:00PM +0100 schrieb Christian Perle:
echo "Sperre gesamten Netzwerkverkehr..." iptables -P INPUT DROP iptables -P OUTPUT DROP iptables -P FORWARD DROP
Das ist blöd, ein REJECT mit einem ICMP Port Unreachable o.ä. ist sinnvoller. Durch ein DROP wird dein Rechner noch lange nicht unsichtbar, er stellt sich blos taub.
Unsichtbar genug: sehr viele Bots und Würmer greifen nur Rechner an, die auch auf Ping antworten - ich habe mit DROP die Angriffe auf meine Kiste um 50% reduziert.
Abgesehen davon: eine *Policy* von DROP ist völlig korrekt, wenn man allen ICMP Messages vertraut kann man immernoch "-p ICMP -j ACCEPT" als erste Regel in die Queue schreiben. Besser ist es sich herauszusuchen welche ICMPs man als harmlos erachtet.
Wenn man an die IP deines Rechners was schickt und der wäre tatsächlich weg, würde der zuständige Router eine Fehlermeldung generieren,
...nur wenn er auch weiß, dass der andere weg ist und er standardkonform ist...
da er das aber nicht tut, wenn dein Rechner da ist, weiß ein Angreifer, daß du da bist... .
...weiß ein intelligenter Angreifer...
Der Effekt eines DROPs besteht darin, daß fehlgeleitete Pakete ewig wiederholt werden, bis mal ein Timeout kommt. Das kann schon mal Stunden dauern.
Bei welchem Protokoll kommt bitteschön der Timeout erst nach Stunden?
TCP: 30s plus 3 Wiederholungen -> Timeout nach 2 Minuten. Die meisten UDP-basierten Protokolle nehmen UDP damit sie schneller(!!) merken, dass es nicht geht.
Konrad
Ich danke erstmal für die vielen Antworten.
@Andreas Kretschmar: Das Firewall script ist ein Versuch. Bevor der nicht funktioniert, brauch ich gar nicht erst weiter zu machen. Das heisst es ist mir gerade vollig egal ob mein Rechner ein anderes Paket ausser welche vom Apache rausschicken will. Das würde ich dann von mal zu mal hinzufügen, wie ich es halt brauch.
@Christian Perle: Meine Kernel config (für Verbesserungsvorschläge bin ich offen): http://home.arcor.de/andre.tietz/config.backups/unicate_kernel.2.6.19.2_r1
@Henning Schild: Es bringen ALLE Zeilen wo was interessantes passiert ("iptables -A ****") diese Fehlermeldung
@André Schulze: Ja... mag sein, es sollen aber erst einmal die grundlegensten Funktionen gehen, bevor ich weiter mache oder?
am Fri, dem 19.01.2007, um 13:01:25 +0100 mailte Tietz, André folgendes:
Ich danke erstmal für die vielen Antworten.
Bidde.
@Andreas Kretschmar:
Runde Freibier wegens meiner Namensverstümmelung. Auf Deine Rechnung. Danke im Namen aller.
Das Firewall script ist ein Versuch. Bevor der nicht funktioniert, brauch ich gar nicht erst weiter zu machen. Das heisst es ist mir gerade vollig egal ob mein Rechner ein anderes Paket ausser welche vom Apache rausschicken will. Das würde ich dann von mal zu mal hinzufügen, wie ich es halt brauch.
Ich hab halt auch nur geschaut, was auf dem ersten Blick die gröbsten Schmerzen verursacht. Ich wollt Dir nur helfen, mehr nicht.
@Henning Schild: Es bringen ALLE Zeilen wo was interessantes passiert ("iptables -A ****") diese Fehlermeldung
Dann ist *grundlegend* was kapott. Dein Kernel zum Bleistift.
Es ist IMHO zielführender, die Leute mit deren Kernaussagen zu zitieren als eine gesammelte Antwort ohne Bezug zu geben. Du willst Hilfe, und wir, ich zumindest, sind gern bereit, diese zu geben. Aber ohne Deine Mitarbeit, hier: sinnvolles zitieren, wird das anstrengend. Und ich bin bereits im Weekend und lustlos, mich mehr als nötig zu verausgaben...
Andreas
Entschuldige wegen deinem Namen, war n bissl zu schnell gelesen...
Das Script habt ihr, die kernel config habt ihr, und die version von iptables hab ich auch mitgeschickt? Ok, was wollt Ihr noch wissen?
Habt ihr ne Idee, was das sein könnte? Ich habe in nem Forum gelesen, das Kernel neu bauen und iptables neu kompilieren helfen soll, aber das tat es nicht.
Am Fri den 19 Jan 2007 um 11:19:38PM +0100 schrieb Tietz, André:
Habt ihr ne Idee, was das sein könnte? Ich habe in nem Forum gelesen, das Kernel neu bauen und iptables neu kompilieren helfen soll, aber das tat es nicht.
Schuß ins Blaue, hast du überprüft, ob die Versionen zusammenpassen?
Tschau,
andre
Hi Andre,
On Fri, Jan 19, 2007 at 23:19:38 +0100, Tietz, Andre wrote:
Das Script habt ihr, die kernel config habt ihr, und die version von iptables hab ich auch mitgeschickt?
Hier ein paar Kommentare zu Deiner Kernelconfig:
* Warum kein modularer Kernel?
* Fuer Deine iptables-Regeln fehlen: CONFIG_NETFILTER_XT_MATCH_STATE CONFIG_NETFILTER_XT_MATCH_CONNTRACK CONFIG_IP_NF_CONNTRACK
* Math Emulation braucht man nur fuer i386 ohne FPU ==> CONFIG_MATH_EMULATION deaktivieren
* ISDN aktiviert, aber kein PPP-Support Ich habe ewig kein ISDN mehr benutzt, aber braucht man dazu nicht auch PPP-Support im Kernel?
* Framebuffer aktiviert, aber kein Framebuffer-Treiber gewaehlt
* USB ist aktiviert, SCSI Disk Support nicht ==> USB-Sticks werden nicht funktionieren
Ob es zusaetzlich einen Mismatch von iptables-Version und Kernelversion gibt, kann ich nicht sagen. Jedenfalls muss iptables fuer bestimmte Features (z.B. PID owner match) gegen die Header des laufenden Kernels gebaut werden. Andere sind weniger abhaengig von einer spezifischen Kernelversion.
Gruss, Chris
On Thu, 18 Jan 2007 06:07:16 +0100 Tietz, André andre.tietz@arcor.de wrote:
Hallo Leutz!
Ich habe die letzten Tage erstmals versucht meine Firewall zu konfigurieren. Da ich ein Slackware habe und nicht so auf Oberflächen-hilfsmutti-programme stehe, mach ich das mit einem Script und iptables.
Vielleicht ist ja shorewall was für dich.
Mein Script sieht so aus:
Mit den Umbrüchen und so? Wahrscheinlich nicht, deshalb würde ich es beim nächsten mal als attachment schicken.
Vielleicht solltest du erstmal rausfinden welche Zeile deines Scripts die Probleme macht. Die postest du dann und dann können wir über eine Zeile reden. (Syntax/Kernel) bash -x iptables.sh start
Henning
lug-dd@mailman.schlittermann.de