Iptables unter Linux

saschabu

Registered User
Hi,

also ich habe nun eine iptables Datei firewall.sh erstellt....

Nun bekomme ich das Teil klar nicht gestartet :(
Wie kriege ich das hin, das ich die Datei einfach von hand starten kann, unter SUSE, ich finde nur Debian Befehle....

Und warum haben manche diese Schreibweise von den iptables Befehlen:
$IPTABLES
$iptables

Kann man diese Befehle unter suse benutzen? Ich habe hier ein Buch aber da ist es wieder ganz anderst:
#iptables

Also ich möchte nur Mal ne klare Aussage und sorry wegen so einer NOOB Frage :D

MfG
Sascha
 
Hi, füge mal in dein Skript folgende Zeilen ein falls noch nicht vorhanden:

#!/bin/bash

iptables=/sbin/iptables


$iptables oder $IPTABLES ist nur eine Variable die Du vorher deklarieren mußt, also ein Platzhalter. Du kannst Dein Skript mit folgenden Befehl auf der Komandozeile starten: ./firewall.sh

Unter SuSE kannst Du abr auch mittels Yast die Firewall einrichten und automatisch starten lassen.

Gruss C.
 
Hi,

Also ich poste nun Mal einfach meine firewall.sh, auf die Gefahr hin das da einige Fehler drin sind die ich eigentlich selber ausmerzen wollte um es zu lernen:

Code:
#!/bin/bash
# Mein Firewall Script (by saschabu)
echo "Bitte warten..... Die Firewall wird gestartet... "

# ein paar Variablen deklarieren
IPTABLES=/sbin/iptables
MY_LAN_IP=80.86.91.27
LAN_INTERFACE=eth0
WWW_INTERFACE=eth0

#Alles Regeln löschen
IPTABLES -t nat -F
IPTABLES -t filter -F
IPTABLES -X


#Alles verbieten, was nicht erlaubt wird
IPTABLES -P INPUT DROP
IPTABLES -P OUTPUT DROP
IPTABLES -P FORWARD DROP

# Loopback Interface freigeben
IPTABLES -A INPUT -i lo -j ACCEPT
IPTABLES -A OUTPUT -o lo -j ACCEPT

#SSH (Port 22) aus dem Lan erlauben
IPTABLES -A INPUT -p TCP -i $LAN_INTERFACE --dport 22 -d $MY_LAN_IP -s -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -A OUTPUT -p TCP -o $LAN_INTERFACE --sport 22 -s $MY_LAN_IP -d -m state --state ESTABLISHED,RELATED -j ACCEPT

#HTTP (Port 80) erlauben (WWW)
IPTABLES -I INPUT -i $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 80 --dport 1024:65535 --m state --state ESTABLISHED,RELATED -j ACCEPT

#HTTP (Port 80) erlauben (vom Server ausgehend, z.Bsp. für Software Updates (YAST usw.)
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 80 --m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I INPUT -i $LAN_INTERFACE -p TCP --sport 80 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

#FTP (Port 21) erlauben (vom Server ausgehend, z.Bsp. für Software Updates (YAST usw.)
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 21 --m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 1024:65535 -m state --state NEW -j ACCEPT
IPTABLES -I INPUT -i $LAN_INTERFACE -p TCP --sport 21 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT

#FTP (Port 21) für FTP Transfer erlauben (zum Webseiten hochladen)
IPTABLES -I INPUT -i $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 21 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 21 --dport 1024:65535 --m state --state ESTABLISHED,RELATED -j ACCEPT

#SMTP (Port 25) für E-Mails senden
IPTABLES -I INPUT -i $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 25 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 25 --dport 1024:65535 --m state --state ESTABLISHED,RELATED -j ACCEPT

#POP3 (Port 110) für E-Mails abrufen
IPTABLES -I INPUT -i $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 110 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 110 --dport 1024:65535 --m state --state ESTABLISHED,RELATED -j ACCEPT

#PLESK (Port 8443) für Plesk Zugriff
IPTABLES -I INPUT -i $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 8443 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 8443 --dport 1024:65535 --m state --state ESTABLISHED,RELATED -j ACCEPT

#DNS TCP (Port 53) für DNS Zugriffe
IPTABLES -I INPUT -i $LAN_INTERFACE -p TCP --sport 1024:65535 --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p TCP --sport 53 --dport 1024:65535 --m state --state ESTABLISHED,RELATED -j ACCEPT

#DNS UDP (Port 53) für DNS Zugriffe
IPTABLES -I INPUT -i $LAN_INTERFACE -p UDP --sport 1024:65535 --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
IPTABLES -I OUTPUT -o $LAN_INTERFACE -p UDP --sport 53 --dport 1024:65535 --m state --state ESTABLISHED,RELATED -j ACCEPT

echo "[fertig]"
exit 0

#end of file


Folgendes kommt wenn ich versuche es auszuführen:
xxx:/etc # xxx:/etc # ./firewall.sh
-bash: xxx:/etc: No such file or directory
xxx:/etc # : bad interpreter: No such file or directory
xx:/etc # xxx:/etc # firewall.sh
-bash: xxx:/etc: No such file or directory
xxx:/etc # -bash: firewall.sh: command not found
-bash: -bash:: command not found

Also irgendwas mache ich falsch...ich vermute da auch schon was, das ich doch ein start script schreiben muss :(

Vielen Dank schon Mal für eure Hilfe...

MfG
Sascha
 
Das klappte auch ned...

Was machen diese beiden Sachen:
#!/bin/bash

IPTABLES=/sbin/iptables

Ich will die SUSE FW nicht, ich hatte mit der nur Probleme, der Hoster Support wusste auch keinen Rat mehr.
Denn in der SUSE FW war explizit SMTP freigegeben, alles durchprobiert, es wurden einfach keine Mails verschickt, FW ausgeschalten und siehe da, Mails werden versendet.

Ich habe dann beschlossen auf iptables umzusteigen und dann in der Zukunft viel mehr über Nat zu machen, um etas sicherer zu fahren....

Nur muss ich erst mal richtig verstehen, wie das ganze aufgebaut ist :D

Ich habe hier das Apache Webserver 2 Buch, das geht aber in die Sicherheit nicht so ins Detail ein und ich finde das ganze auch etwas umständlich erklärt :(

Aber sonst super Buch....

MfG
Sascha
 
saschabu said:
#!/bin/bash
Das ist die Shebang-Zeile. Die sagt, welcher Interpreter für dieses Script zuständig ist.

IPTABLES=/sbin/iptables
Dies definiert eine Variable '$IPTABLES' (auch wenn hier noch keine $ steht).
Falls das Script z.B. wärend des Bootens schon aufgerufen wird, ist evtl. noch kein PATH vorhanden. Daher solltest Du iptables immer über den vollständigen Pfad aufrufen.

Das Script gehört unter /etc/init.d/firewall.
Dort sollte es per "chmod +x /etc/init.d/firewall" ausführbar gemacht werden.
Ausserdem mußt Du vor jeden Aufruf von IPTABLES noch das $ davor setzen.

Viel Spaß beim experimentieren.

huschi.
 
Also es liegt in /etc/init.d/ als firewall.sh
Ausführen kann ich es auch, habe die Rechte überprüft und mehrmals geändert, ich kann es nicht von Hand starten...

Es kommt immer noch:
-bash: xxx:/etc: No such file or directory

Muss ich das ganze doch eintragen, so das es beim Neustart gestartet werden kann? (Ich glaube nicht)

Aber genau das möchte ich ja nicht, denn wenn ein Fehler drin ist, sitz ich dumm da :eek:

Irgendwas mache ich noch falsch....

MfG
Sascha
 
saschabu said:
-bash: xxx:/etc: No such file or directory
Poste mal die Zeile die Du eingibst (inkl. des Pfades in dem Du gerade bist).

Muss ich das ganze doch eintragen, so das es beim Neustart gestartet werden kann? (Ich glaube nicht)
insserv firewall.sh

Aber genau das möchte ich ja nicht, denn wenn ein Fehler drin ist, sitz ich dumm da :eek:
Dafür gibt es entweder die Recovery-Console, oder Du aktivierst es zum Reboot erst, wenn Du es geprüft hast.

huschi.
 
Die Recovery Console möchte ich meiden :D

Denn es muss ja kein Server mit Absicht down sein wenn es nicht nötig ist :D

So hier die Daten:
Have a lot of fun...
xxx:~ # chmod +x /etc/init.d/firewall.sh //nochmals ausgeführt (sicher ist sicher)
xxx:~ #
xxx:~ # /etc/init.d/firewall.sh start
: bad interpreter: No such file or directory

Danke schon Mal für deine Hilfe...

MfG
Sascha
 
saschabu said:
xxx:~ # /etc/init.d/firewall.sh start
: bad interpreter: No such file or directory
Das ist aber ein anderer Fehler als oben!

Dieser hier ist klar:
Du hast garantiert das Script mit einem Windows-Editor geschrieben.
Dabei aber nicht darauf geachtet es im Unix-Format zu speichern bzw. hoch zu laden (Stichwort: ASCII-Modus).

Nimm mind. aus der ersten Zeile den überflüssigen CarrigeReturn raus, und Du bist einen Schritt weiter.

huschi.
 
Oh nein, typischer NOOB Fehler *schäm*

Er führt es nun aus....nur spuckt er nun command not found Fehler aus...

Obwohl yast sagt iptables ist installiert scheint es zu fehlen, denn ich finde es ja nirgends....
//EDIT// Habs gefunden, war gut versteckt :D //EDIT//
Dann passe ich das Mal in dem Script an :)

Code:
Bitte warten..... Die Firewall wird gestartet...
/etc/init.d/firewall.sh: line 6: =/sbin/iptables: No such file or directory
/etc/init.d/firewall.sh: line 12: -t: command not found
/etc/init.d/firewall.sh: line 13: -t: command not found
/etc/init.d/firewall.sh: line 14: -X: command not found
/etc/init.d/firewall.sh: line 18: -P: command not found
/etc/init.d/firewall.sh: line 19: -P: command not found
/etc/init.d/firewall.sh: line 20: -P: command not found
/etc/init.d/firewall.sh: line 23: -A: command not found
/etc/init.d/firewall.sh: line 24: -A: command not found
/etc/init.d/firewall.sh: line 27: -A: command not found
/etc/init.d/firewall.sh: line 28: -A: command not found
/etc/init.d/firewall.sh: line 31: -I: command not found
/etc/init.d/firewall.sh: line 32: -I: command not found
/etc/init.d/firewall.sh: line 35: -I: command not found
/etc/init.d/firewall.sh: line 36: -I: command not found
/etc/init.d/firewall.sh: line 39: -I: command not found
/etc/init.d/firewall.sh: line 40: -I: command not found
/etc/init.d/firewall.sh: line 41: -I: command not found
/etc/init.d/firewall.sh: line 44: -I: command not found
/etc/init.d/firewall.sh: line 45: -I: command not found
/etc/init.d/firewall.sh: line 48: -I: command not found
/etc/init.d/firewall.sh: line 49: -I: command not found
/etc/init.d/firewall.sh: line 52: -I: command not found
/etc/init.d/firewall.sh: line 53: -I: command not found
/etc/init.d/firewall.sh: line 56: -I: command not found
/etc/init.d/firewall.sh: line 57: -I: command not found
/etc/init.d/firewall.sh: line 60: -I: command not found
/etc/init.d/firewall.sh: line 61: -I: command not found
/etc/init.d/firewall.sh: line 64: -I: command not found
/etc/init.d/firewall.sh: line 65: -I: command not found
[fertig]

Also die Command not found sachen muss ich mir anschauen, die FW ist aber nun noch nicht aktiv, oder?

Vielen Dank für deine Hilfe Huschi :D

MfG
Sascha
 
Last edited by a moderator:
Hi,

überprüfe mal bitte den Pfad von iptables mit folgendem Befehl: which iptables

Sollte der Pfad anders lauten mußt Du diesen dann anstelle des "/sbin/iptables" in dein Skript schreiben.

Gruss C.
 
Last edited by a moderator:
Also wie schon gesagt der Pfad passt nun, nur das wars nun :D

Er spuckte noch das hier aus:

Bitte warten..... Die Firewall wird gestartet...
iptables v1.3.1: can't initialize iptables table `nat': Table does not exist (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.

Ich weiss das es eine alte Version ist, ich denke ich sollte erst mal updaten :p
Er startet gerade durch.....

//EDIT// Das wars :( Ich komm nicht mehr drauf, alles zu :( Also im Repair Modus starten, oder? (Ich starte nun im Repair Modus und stope iptables durch den Befehl /etc/init.d/firewall.sh stop , das müsste ja dann gehen...
Nur warum startet iptables nach dem Neustart wieder mit, es wurde nie eingerichtet das es mitstarten soll???
//EDIT//

MfG
Sascha
P.S.: @huschi wurde gemacht, seit du es gesagt hast :D
 
Last edited by a moderator:
saschabu said:
stope iptables durch den Befehl /etc/init.d/firewall.sh stop
Falsch. Siehst Du in Deinem Script irgendwo eine Stop-Anweisung?
Nein. Weil Du auch keine eingebaut hat.
Du mußt einfach den chmod wieder umdrehen:
chmod -x /etc/init.d/firewall.sh

huschi.
 
Vielen Dank huschi, für deine Antwort, der Server läuft nun wieder....

Im Repair Modus gestartet und dann die firewall.sh gesucht, oh nicht mehr da, ok durchgestartet...

Und siehe da der Server ist wieder da....

Falsch. Siehst Du in Deinem Script irgendwo eine Stop-Anweisung?
Nein. Weil Du auch keine eingebaut hat.
Du mußt einfach den chmod wieder umdrehen:
chmod -x /etc/init.d/firewall.sh
Ah ok dann sollte ich eine einbauen...

Wie oben schon beschrieben, firewall.sh war nicht mehr da im Repair Modus nun ist sie wieder da.

Warum hat das mit dem Neustart nicht einfach geklappt? Und nach dem Fehler zu urteilen sollte ich erst Mal das nat raus löschen oder aber eine aktuellere iptables Version einspielen, oder?

MfG
Sascha
 
saschabu said:
Wie oben schon beschrieben, firewall.sh war nicht mehr da im Repair Modus nun ist sie wieder da.
Weil Du im Recovery-Modus ein anderes root-Verzeichnis hast. Im Regelfall mußt Du Deine Festplatte erstmal mounten (z.B. nach /mnt) und kannst dann auf Dein Script (unter /mnt/etc/init.d/firewall.sh) zugreifen.

huschi.
 
Vielen Dank Huschi, deine Tips helfen mir viel :)

Der Fehler hat mich nun auch einiges gelehrt und es liegt an meinem Hoster, das es nicht ging:

Ursache ist, dass auf dem Hostsystem, auf dem Ihr RootDS liegt, noch keine iptables-Nutzung moeglich ist. Wir haben dies auf allen Hostsystemen bereits konfiguriert und werden es mit dem naechsten Wartungsfenster aktivieren, welches anfang kommender Woche sein wird.

MfG
Sascha
P.S.: Und ihr hattet mal wieder recht :D
 
Hi,

so am 9.03. wurden über der Nacht die iptables aktiviert.

Der Server lief einwandfrei bis heute morgen um 6 Uhr.
Nun ist die Seite down, habe dann in Plesk reingeschaut und dort stand das iptables nicht mit dem Booten gestaret wird und auch nicht aktiv ist.

Ich habe nun den Support diesbezüglich angeschrieben, sie meinten das ich wohl doch iptables an habe???

Wie kann das sein? Ich habe das ganze nun auch im Reparatur Modus gestartet und komme nun ja auch drauf. Das Problem ist nun, wie kann das sein, das iptables an sein soll wenn es mir Plesk nicht anzeigt? Und die Umstellung war ja am 09.03. am morgen bis um 6 Uhr, warum ging es dann an dem Tag und am darauffolgendem?

Ach ja hoster ist webperoni....

SO aber nun zu meinem Problem:
Ich habe im Recovery Modus gestartet, alles überprüft und gemerkt das alles soweit ok ist...Neugestartet, danach war der Server ca. 10 Minuten online und dann wieder offline...nochmals das gleiche durchgeführt und nun läuft er wie lange nur?

Vielen Dank schon Mal für eure Hilfe...

MfG
Sascha
 
Last edited by a moderator:
Back
Top