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

[erlöst] iptables Script will nicht starten

Hallo, ich habe irgendwann mal einen iptables Abschaltscript von einem Freund bekommen. Jetzt wollte ich ihn anwenden, doch es geht nicht.

Mein Aufruf:
Code:
./usr/local/sbin/fwabschalten.sh

Script:
Code:
# /usr/local/sbin/fwabschalten.sh

#! /bin/bash
echo „0“ > /proc/sys/net/ipv4/ip_forward
IPT = „/usr/sbin/iptables“

   for TABELLE in filter nat mangle
       do
	 $IPT -t $TABELLE -F
	 $IPT -t $TABELLE -X
       done
   for KETTE in INPUT OUTPUT FORWARD
       do
	 $IPT -P $KETTE ACCEPT
       done

echo „Jetzt stehen die Regeln in der $TABELLE auf:“

   $IPT -L -n -v
   $IPT -t nat -L -n -v

Linux sagt, daß "cannot execute binary file".

Ich hatte das von einer Office Datei in ein neues Windows Wordpad unicode-textdocument kopiert und auf meinem USB Stick gespeichert. Kann es daran liegen? Wie kriege ich das ins richtige Format?
 
Ich bin mir nicht sicher wie das nochmal ging. Ich habe erst jetzt nach 2 Jahren mich damit wieder beschäftigt - "Schandemodus AN". :schockiert:

Eigentlich dachte ich, daß "./" ausreichen würde ?

Edit:
Da war doch noch etwas mit "sh" davor. Hast du das gemeint?
 
A

Anonymous

Gast
Code:
IPT = „/usr/sbin/iptables“

wenn das wirklich so da in einem Script steht, geht schon mal gar nichts. zumindesdens nicht in einer BASH
* LEERZEICHEN von und hinter dem = bei der Variablezuweisung ---> ERROR

* „ Das dürfte wohl als Sonderzeichen auch nicht so recht funktionieren.

gTux schrieb:
Hallo, ich habe irgendwann mal einen iptables Abschaltscript von einem Freund bekommen.
......
Ich hatte das von einer Office Datei in ein neues Windows Wordpad unicode-textdocument kopiert und auf meinem USB Stick gespeichert. Kann es daran liegen? Wie kriege ich das ins richtige Format?

Leg dir mal ein paar Linux-Freunde zu, die speichern sowas dann auch im richtigen Format. ;) (nur Späßle gemacht)

Probier lieber so was hier, http://www.tobias-bauer.de/computer/iptables/index.html

robi
 
Gut, ich hab das verändert:

Code:
# /usr/local/sbin/fwabschalten.sh

#! /bin/bash
echo "0" > /proc/sys/net/ipv4/ip_forward
IPT=/usr/sbin/iptables

   for TABELLE in filter nat mangle
       do
    $IPT -t $TABELLE -F
    $IPT -t $TABELLE -X
       done
   for KETTE in INPUT OUTPUT FORWARD
       do
    $IPT -P $KETTE ACCEPT
       done

echo "Jetzt stehen die Regeln in der $TABELLE auf:"

   $IPT -L -n -v
   $IPT -t nat -L -n -v

Es gibt immer noch keine Veränderung. Egal ob ich so aufrufe:

Code:
./fwabschalten.sh
oder mit
Code:
sh fwabschalten.sh

Die Fehlermeldung ist immer noch die gleiche.

P.S. War das ein Angebot? :D
 
A

Anonymous

Gast
Keine Ahnung was du machst.??????
Code:
#! /bin/bash
echo "0" > /proc/sys/net/ipv4/ip_forward
IPT=/usr/sbin/iptables

   for TABELLE in filter nat mangle
       do
    $IPT -t $TABELLE -F
    $IPT -t $TABELLE -X
       done
   for KETTE in INPUT OUTPUT FORWARD
       do
    $IPT -P $KETTE ACCEPT
       done

echo "Jetzt stehen die Regeln in der $TABELLE auf:"

   $IPT -L -n -v
   $IPT -t nat -L -n -v
Das ist das Script
das als root unter /usr/local/sbin/fwabschalten.sh abspeichern
Code:
chmod 700 /usr/local/sbin/fwabschalten.sh
die Ausführungsrechte drauf und
Code:
/usr/local/sbin/fwabschalten.sh
ausführen, das sollte gehen, zumindesten sollte sich was tun, den Inhalt habe ich mir noch nicht angeschaut.

robi
 
Super. Danke dir. Das hat geklappt. ;)

Ein Problemchen hätte ich noch. Überall wo "$IPT" auftaucht wird ein Fehler gemeldet. In einem nächsten Script ist der Pfad zu iptables offenbar nicht passend zu der aktuellen Suse Version:

Code:
# FIREWALLSCRIPT
#!/bin/bash
......
IPT="/sbin/iptables"
......

for KETTE in INPUT OUTPUT FORWARD
do
$IPT -P $KETTE DROP
done
for TABELLE in filter nat mangle
do
$IPT -t $TABELLE -F
$IPT -t $TABELLE -X
done
exit
....

Habe das Script auf das Wesentliche verkürzt. Das script ist für Version 10.1 glaube ich. Der Pfad "/sbin/iptables" soll nicht mehr auffindbar sein. Wo finde ich die Datei neuerdings?
 
A

Anonymous

Gast
framp schrieb:
ändern in
Code:
IPT=`which iptables`
halte ich nicht für eine gute Idee. Funktioniert zwar sicher solange du es aus einer Konsole heraus aufrufst, aber es hat schon seinen Grund warum in solchen Scripten Programmnamen in einer Variable abgelegt werden und nicht einfach so aufgerufen wird. Wird das Script irgendwo aus Startscripten heraus oÄ aufgerufen ist nicht immer sichergestellt das die PATH-Variable komplett richtig gesetzt ist, dann geht auch dein
`which .....` in die Hose, da es auf eine gesetzte PATH-Variable aufsetzt.

der richtige Eintrag für Suse ist hier
Code:
IPT="/usr/sbin/iptables"

robi
 
Ach super. Ich bedanke mich.

Jetzt bin ich mir nicht sicher - wenn ich das erste Script ausführe ("fwabschalten.sh") dann wird die FW abgeschaltet. Bekomme ich dann keine Verbindung mehr? Auch das andere Script scheint keine Verbindung ins Netz zu erlauben, ist wohl zu umfangreich.

Code:
# FIREWALLSCRIPT
#!/bin/bash
INT="eth0"
EXT="eth1"
MYDNS="192.168.147.2 192.168.147.2"
MYNTP="10.10.110.9"
MYMAIL="192.168.30.4"
ADMIN="192.168.147.1"
ADMINMAC="......"
MYNET="192.168.147.0/24"
PRDNS="192.168.147.1 192.168.147.2"
PRMAIL="10.10.110.9"
EXTNTP="217.20.20.3 3.4.5.6"
HIGH="1024:"
IPT="/usr/sbin/iptables"
FTPRAUS="192.168.147.2"
OEFIP="217.3.2.1"

for KETTE in INPUT OUTPUT FORWARD
do
$IPT -P $KETTE DROP
done
for TABELLE in filter nat mangle
do
$IPT -t $TABELLE -F
$IPT -t $TABELLE -X
done
exit

# FOR LOOPBACK (IPC)
$IPT -A INPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -i lo -j ACCEPT
$IPT -A OUTPUT -s 127.0.0.0/8 -d 127.0.0.0/8 -o lo -j ACCEPT
$IPT -A FORWARD -i ! $INT -p tcp --syn -j DROP

# FOR HTTP
$IPT -A FORWARD -i $INT -o $EXT -s $MYNET -p tcp --sport $HIGH -m multiport --dports 80,443 -j ACCEPT
$IPT -A FORWARD -i $EXT -o $INT -d $MYNET -p tcp --dport $HIGH -m multiport --sports 80,443 -j ACCEPT

# FOR DNS
for INDNS in $MYDNS
do
for AUSDNS in $PRDNS
do
for PROTO in udp tcp
do
$IPT -A FORWARD -p $PROTO -s $INDNS -d $AUSDNS --sport 53 --dport 53 -i $INT -o $EXT -j ACCEPT
$IPT -A FORWARD -p $PROTO -s $OUTDNS -d $INDNS --sport 53 --dport 53 -i $EXT -o $INT -j ACCEPT
done
done
done

# SSH-ZUGANG fuer Admin
$IPT -A INPUT -i $INT -s $ADMIN -p tcp --dport ssh --sport 1021: --match mac --mac-source $ADMINMAC -j ACCEPT
$IPT -A OUTPUT -o $INT -d $ADMIN -p tcp --sport ssh --dport 1021: -j ACCEPT

# FOR SMTP
$IPT -A FORWARD -i $INT -o $EXT -s $MYNET -p tcp --sport $HIGH --dport 25 -j ACCEPT
$IPT -A FORWARD -i $EXT -o $INT -d $MYNET -p tcp --sport 25 --dport $HIGH -j ACCEPT

# FOR POP
$IPT -A FORWARD -i $INT -o $EXT -s $MYNET -p tcp --sport $HIGH --dport 110 -j ACCEPT
$IPT -A FORWARD -i $EXT -o $INT -d $MYNET -p tcp --sport 110 --dport $HIGH -j ACCEPT


# FOR PING von INT. Rechnern
$IPT -A INPUT -i $INT -s $MYNET -p icmp --icmp-type echo-request -j ACCEPT
$IPT -A OUTPUT -o $INT -s $MYNET -p icmp --icmp-type 0 -j ACCEPT

$IPT -A FORWARD -i $INT -o $EXT -s $MYNET -p icmp --icmp-type 8 -j ACCEPT
for TYP in echo-reply host-unreachable port-unreachable network-unreachable fragmentation-needed source-quench parameter-problem time-exceeded
do
$IPT -A FORWARD -i $EXT -o $INT -s $MYNET -d icmp --icmp-type $TYP -j ACCEPT
done

# FUER Linux Traceroute
$IPT -A FORWARD -i $INT -o $EXT -s $MYNET -p udp --dport 33434:33500 -j ACCEPT
$IPT -A INPUT -p icmp -j LOG --log-prefix "icmp-schrott rein"
$IPT -A FORWARD -p icmp -j LOG --log-prefix "icmp-muell durch"

# FOR FTP
# STEUERKANAL
$IPT -A FORWARD -i $INT -o $EXT -s $MYNET -p tcp --dport 21 --sport $HIGH -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i $EXT -o $INT -d $MYNET -p tcp --dport $HIGH --sport 21 -m state --state ESTABLISHED,RELATED -j ACCEPT

# PASSIV
$IPT -A FORWARD -p tcp --sport $HIGH --dport $HIGH -s $MYNET -i -$INT -o $EXT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p tcp --sport $HIGH --dport $HIGH $MYNET -i $EXT -o $INT -m state --state ESTABLISHED,RELATED -j ACCEPT

# AKTIV
$IPT -A FORWARD -p tcp --sport $HIGH --dport $HIGH -s $MYNET -i -$INT -o $EXT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p tcp --sport $HIGH --dport 20 -s $MYNET -o $EXT -i $INT -m state --state ESTABLISHED,RELATED -j ACCEPT

# NAT starten
#$IPT -t nat -A POSTROUTING -s $MYNET -o $EXT -j MASQUERADE
$IPT -t nat -A POSTROUTING -s $MYNET -o $EXT -j SNAT --to-source $OEFIP

# Routing einschalten
echo "1" > /proc/sys/net/ipv4/ip_forward
$IPT -L -n -v
$IPT -t nat -L -n -v

Zur Erklärung:
Netzwerk 192.168.147.0 /24
Server 192.168.147.2
Router 192.168.147.1
Verbindung über LAN

Dienste wie DNS, NTPD oder MAIL werden mommentan nicht gebraucht, ich war mir nicht sicher ob ich es auskommentieren oder einfach rauslöschen soll. Scripten ist nicht meine Stärke.

Ich habe
Code:
iptables -L
angegeben, aber es wurden keinerlei Zahlen ausgegeben. Leider habe ich hier keine Ausgabe, kann aber noch nachreichen. Übrigens werden keine Fehler mehr beim Starten gemeldet.
 

framp

Moderator
Teammitglied
robi schrieb:
... halte ich nicht für eine gute Idee. Funktioniert zwar sicher solange du es aus einer Konsole heraus aufrufst, aber es hat schon seinen Grund warum in solchen Scripten Programmnamen in einer Variable abgelegt werden und nicht einfach so aufgerufen wird.
Jup, Das stimmt - aber es funktioniert wenn er es in der Shell als root aufruft.

@gTux: Warum nimmst Du nicht die SuSEFirewall2 sondern ein eigenes Script? Das macht Sinn wenn man sich damit auskennt und spezielle Dinge machen möchte - ansonsten würde ich immer die SuSEFirewall2 nehmen :roll:
 
So sehen die Ausgaben aus, wenn ich das erste Script (fwabschalten.sh) starte:
Code:
linux-esfd:~# /usr/local/sbin/fwabschalten.sh
Jetzt stehen die Regeln in der mangle auf:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
  pkts   bytes   target      prot   opt   in         out          source

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
  pkts   bytes   target      prot   opt   in         out          source

Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
  pkts   bytes   target      prot   opt   in         out          source

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
  pkts   bytes   target      prot   opt   in         out          source


Und so wenn ich das "fw1.sh" Script ausführe kommt nix, aber wenn ich dann "iptables -L" schreibe kommt:
Code:
linux-esfd:~# iptables -L
Chain INPUT (policy DROP)
target      prot  opt  source                     destination

Chain FORWARD (policy DROP)
target      prot  opt  source                     destination

Chain OUTPUT (policy DROP)
target      prot  opt  source                     destination

So wie das aussieht komt da garnix !?
 
Am besten du bringt das in eine Form die iptables-restore akzeptiert, das macht es nicht nur schneller sondern auch etwas einfacher fehlerhafte Regeln aufzuspüren.
 
A

Anonymous

Gast
gTux schrieb:
Auch das andere Script scheint keine Verbindung ins Netz zu erlauben, ist wohl zu umfangreich.

Keine Ahnung wo du diese Script (scheinbar für einen Router gedacht) aufgetrieben hast, aber mit ssh und putty sollte die Kiste danach immer noch erreichbar sein. ;) ;) ;) ;) Ne, nicht mal das ist möglich, beim 1. Hinschauen übersehen.

Was meist du wohl, warum man dir solche Tipps hier gibt?
robi schrieb:
Probier lieber so was hier, http://www.tobias-bauer.de/computer/iptables/index.html
framp schrieb:
@gTux: Warum nimmst Du nicht die SuSEFirewall2 sondern ein eigenes Script? Das macht Sinn wenn man sich damit auskennt und spezielle Dinge machen möchte - ansonsten würde ich immer die SuSEFirewall2 nehmen :roll:

robi
 
Hi, sorry - du hattest das später nachgetragen, ich hatte die alte Version gelesen. Danke für den Link. Ein tolles Teil dieser Generator. Ich werde es gleich ausprobieren. Bevor ich iptables scripting einigermaßen drauf habe, dauert es offenbar noch lange Zeit.

Weißt du zufällig welches Format ich wählen soll (oder Programm) wenn ich dieses Script mit Windows abspeichern möchte? Mein Linux Rechner ist jetzt ja geblockt, der Windows Rechner ist der einzige mit den ich ins Netz kann um das Script zu kopieren. Aber meine vorherigen Scripte verursachten immer einen "interpreter" Fehler auf dem Linux Rechner.
 
Hallo, ich habe das Script ausprobiert. Es blockiert alles sehr schön, nur ich habe bei Ein- und Ausgang "http, ftp" usw. ausgewählt. Sobald ich das script dann laufen ließ - wurde alles blockiert. Nichts ging mehr. Im Browser ist "Einstellungen für das Netzwerk automatisch erkennen" gewählt. Ich habe auch in "/proc/sys/net/ipv4/ip_forward" eine "1" stehen. Es ging mit den erzeugten Firewall script von der oben verlinkten Seite einfach nicht. Also habe ich ein noch einfacheres Script erzeugt und nur noch "http" beim Ein- und Ausgang gewählt.

Code:
#!/bin/sh
 
#####################################################
# IPTables Firewall-Skript                          #
#                                                   #
# erzeugt mit dem IPTables-Skript-Generator auf     #
#      tobias-bauer.de - Version 0.3                #
#                                                   #
#####################################################
 
# iptables suchen
iptables=`which iptables`
 
# wenn iptables nicht installiert abbrechen
test -f $iptables || exit 0
 
case "$1" in
   start)
      echo "Starte Firewall..."
      # alle Regeln löschen
      $iptables -t nat -F
      $iptables -t filter -F
      $iptables -X
 
      # neue Regeln erzeugen
      $iptables -N garbage
      $iptables -I garbage -p TCP -j LOG --log-prefix="DROP TCP-Packet: " --log-level crit
      $iptables -I garbage -p UDP -j LOG --log-prefix="DROP UDP-Packet: " --log-level crit
      $iptables -I garbage -p ICMP -j LOG --log-prefix="DROP ICMP-Packet: " --log-level crit
 
      # Default Policy
      $iptables -P INPUT DROP
      $iptables -P OUTPUT DROP
      $iptables -P FORWARD DROP
 
      # über Loopback alles erlauben
      $iptables -I INPUT -i lo -j ACCEPT
      $iptables -I OUTPUT -o lo -j ACCEPT
 
      #####################################################
      # ausgehende Verbindungen
      # Port 80
      $iptables -I OUTPUT -o eth0 -p TCP --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I INPUT -i eth0 -p TCP --sport 80 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
 
      #####################################################
      # eingehende Verbindungen
      # Port 80
      $iptables -I INPUT -i eth0 -p TCP --sport 1024:65535 --dport 80 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
      $iptables -I OUTPUT -o eth0 -p TCP --sport 80 --dport 1024:65535 -m state --state ESTABLISHED,RELATED -j ACCEPT
 
      #####################################################
      # Erweiterte Sicherheitsfunktionen
 
      #####################################################
      # bestehende Verbindungen akzeptieren
      $iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
      $iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 
      #####################################################
      # Garbage übergeben wenn nicht erlaubt
      $iptables -A INPUT -m state --state NEW,INVALID -j garbage
 
      #####################################################
      # alles verbieten was bisher erlaubt war
      $iptables -A INPUT -j garbage
      $iptables -A OUTPUT -j garbage
      $iptables -A FORWARD -j garbage
      ;;
   stop)
      echo "Stoppe Firewall..."
      $iptables -t nat -F
      $iptables -t filter -F
      $iptables -X
      $iptables -P INPUT ACCEPT
      $iptables -P OUTPUT ACCEPT
      $iptables -P FORWARD ACCEPT
      ;;
   restart|reload|force-reload)
   $0 stop
   $0 start
      ;;
   *)
      echo "Usage: /etc/init.d/firewall (start|stop)"
      exit 1
      ;;
esac
exit 0

Doch auch das hat nicht geholfen. Übrigens - wenn das Script aus ist, dann ist die Verbindung zwar da, aber ziemlich langsam.

Bitte, bitte, bitte - helft mir! :???:
 
A

Anonymous

Gast
gTux schrieb:
Bitte, bitte, bitte - helft mir! :???:
Ist dir schon mal durch den Kopf gegangen, das man da eventuell auch eine Namensauflösung braucht? Und warum willst du einen WebServer freigeben, wenn du sowieso keinen auf deiner Maschine am laufen hast, nehme ich stark an.

Tu dir selber einen Gefallen, fang bei den Standardtools und Einstellungen an die Suse per default hat, die sind nicht schlecht und einfach zu bedienen und arbeite dich von den Grundlagen her ein. Linux ist ein Betriebssystem und kein Spielzeug das man in einer Woche verstanden hat.

robi
 
Gut, ich hab http nicht freigeben müssen, ich bin nur mit den Nerven total runter. Sitze hier schon seit fast 19 Stunden am Rechner und versuche das Teil einzustellen.

Wieso brauche ich DNS? Reicht DHCP nicht aus um Firewall einzuschalten? Das verstehe ich nicht.

Zudem weiß ich jetzt nicht wie ich die Grundeinstellungen wiederherstellen kann. Wird mein Problem aber nicht lösen.
 
A

Anonymous

Gast
gTux schrieb:
Wieso brauche ich DNS? Reicht DHCP nicht aus um Firewall einzuschalten? Das verstehe ich nicht.
hier gehen die Grundlagen von TCP/IP los bei denen du dich weiterbilden musst.
gTux schrieb:
Zudem weiß ich jetzt nicht wie ich die Grundeinstellungen wiederherstellen kann.
Code:
Dein_Script stop
rm Dein_Script
YaST -> Sicherheit und Benutzer > Firewall

robi
 
Sorry, aber auch wenn ich total uebermuedet bin - fuer iptables braucht man kein DNS. Es sei eine Regel wuerde es erfordern - doch selbst dann glaube ich nicht daran. Ich habe auf meinen Rechner kein DNS und vorher hatte es auch funktioniert. TCP/IP ist ein Transportprotokoll auf OSI Referenzmodell Transport Ebene und hat rein mit Namensaufloesung meiner Meinung nach nichts zu tun. Man kann FW auch ohne DNS anwenden. Auch wenn ich seit ueber 2 Jahren mit IP Tables nicht gearbeitet hatte (und vorher auch nicht viel), habe ich damals schon kein DNS zwingend gebraucht um iptables zu nutzen.
 
Oben