PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : firewall.sh von Harry's Linux Page & Edonky



der_angler
20.08.03, 10:08
Hallo Leute,
habe mir für mein Red Hat 9 System auf Harry's Linux Page ein Firewall-Script per iptables-Generator gemacht.
Ich habe hier einen zentralen Server (DHCP, Internet, etc... ) auf dem Linux läuft und einen Client mit Windows 2000 auf dem Edonkey läuft.
Jetzt habe ich mir per Generator ein Skript erstellen lassen. Wenn ich das auf dem Server als root starte, dann funktioniert auch erstmal alles. Will sagen der Edonkey-Client auf dem Windows 2000 PC funktioniert prima, keine LowID oder dergleichen.
Jetzt gibt es nur 2 Probleme:
1. Problem:
Ich weiß nicht wo und wie ich die Datei firewall.sh in mein Linux-System einbinden muss. Zur Zeit muss ich sie immer per Hand starten und stoppen, naja, und das kann doch nicht alles sein. Das muß doch auch irgendwie automatisch gehen. Kann mir also jemand erklären wo und wie ich das Ding einbaue (bin absoluter Neuling!)
und das 2. Problem:
Damit der Edonkey-Client auch richtig läuft, muss ja die IP weitergeleitet werden. Dafür muss auch meine IP bekannt sein, mit der mein Server im Internet ist. Das erledigt das firewall skript folgendermaßen

# IP-Adresse des LAN-Interfaces ermitteln
LAN_IP=$(ifconfig eth1 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)

Die IP wird also in LAN_IP gespeichter. Dann wird diese Variable zur Weiterleitung benutzt. Siehe unten :

# NAT fuer EDONKEY
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 4661 -j DNAT --to-destination 192.168.1.2
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 4661 -j SNAT --to-source $LAN_IP
etc....

Jetzt gibt es aber ein ganz ganz großes Problem dabei. Mein Server läuft ja tagelang durch, mein Edonkey-CLeint auf dem Windows Rechner auch. Wie aber jeder weiß, wird die DSL-Flatrate alle 24 Stunden einmal kurz getrennt. So, wenn ich also jetzt meinen Server hochfahre wird das firewall-skript automatisch gestartet. Es holt sich die aktuelle InternetIP und fertig .... so, jetzt starte ich Edonkey auf dem Windows Rechner und lasse es z. Bsp. 3 Tage lang an. Hmm, nach 24 Stunden trennt die Telekom meine Verbindung. Der Server merkt es, und wählt sich neu ein. ABER MIT EINER NEUEN IP. Leider hat mein firewall-skript meine alte IP noch. D.h. Edonkey funktioniert nicht mehr, weil das Postrouting nicht mehr korrekt funktioniert.
Versteht Ihr mich?
Mein Problem ist, wie kann ich das Skript so einbinden, das es immer(!) dann automatisch(!) gestartet wird, wenn sich der Server ins Internet einwählt. Hat jemand eine Idee? Ansonsten wäre Edonkey fürn Arsch ...

Vielen vielen Dank schonmal im Vorraus


Chrisopher

ProfBunny
20.08.03, 10:35
Hallo,

kopier das FW-Script nach /sbin, dann erstelle im /etc/ppp/ip-up.d ein Script zum Starten der Firewall. (wichtig keine Sonder- oder Satzzeichen in diesen Verueichnissen)

vi firewall:

#!/bin/sh
sleep 20
/sbin/ipfirewall.sh up

ausführbar machen mit chmod.

Dann in /etc/ppp/ip-down.d ein Stopscript

vi firewall:
#!/bin/sh
/sbin/ipfirewall.sh stop

Ausführbar machen.

Jetzt wird bei jeder Einwahl deine Firewall automatisch gestartet und die IP wird richtig gesetzt.


Mfg

Profbunny

der_angler
20.08.03, 11:38
... aber unter /etc/ppp/ gibt es bei mir kein Verzeichniss "ip-up.d" und auch kein Verzeichniss "ip-down.d". Ich habe 2 Dateien, mit den Namen "ip-up" und "ip-down".

Ich habe jetzt einfach 2 Ordner in /etc/ppp angelegt mit den Namen ip-down.d und ip-up.d ist das richtig??

ProfBunny
20.08.03, 12:20
Ob das richtig ist wirst du ja merken bei der nächsten Trennung.
Keine Ahnung wie das bei Red Hat aussieht, bei debian werden die Verzeichnisse standardmäßig angelegt.

Evtl gibt dir man ppp Aufschluß darüber.

Mfg

Profbunny

mctop
20.08.03, 20:45
Also erstens reicht es, wenn du die Firewall einmal startest, am besten mit dem REchner zusammen :-). Das geht ziemlich einfach, kopier dein Firewall Skript in /etc/init.d. Unter der Vorausetzung, dass du bis Runlevel 5 hochfährst, gehst du nun weiter in Verzeichnis rc5.d und legst einen symbolischen Link zu deinem Firewallskript was in etwa so aussieht:

ln -s ../firewall.sh S99firewall

Dir wird auffallen, dass dort viele Links sind, die einen beginnen mit K (für Kill beim runterfahren), die anderen beginnen mit S (für Start), schließlich gibt die Nummer noch die Reihenfolge der Starts an, 99 wäre dann so ziemlich das letzte Skript.

Zweitens meint LAN_IP mit ziemlicher Sicherheit die IP deiner Netzwerkkarte und nicht die deiner Internetverbindung, das wäre nämlich die von ppp0 und entsprechend würde die Variable mit EXT_IP eine wesentlich sinnvollere Bezeichnung bekommen. Hab übrigens noch kein Firewallskript mit der Notwendigkeit entdeckt, die externe IP zu verwenden, das Interface, nämlich ppp0 reicht normalerweise für dei Regeln vollkommen aus, aber man lernt ja nie aus:-).

der_angler
21.08.03, 08:12
Also irgendwie funktioniert das so alles nicht.
Ich habe die beiden Ordner "ip-up.d" und "ip-down.d" angelegt und dort ein Start/Stop Skript hineingelegt. Aber irgendwie interessiert das Red Hat nicht, er startet das Firewall Skript nicht nach der Einwahl.
Und wenn ich das Skript nur einmal beim hochfahren starte, dann funktioniert es exakt 24 Stunden lang. Werde ich getrennt und der Server wählt sich neu ein, so funktioniert es nicht mehr, da in LAN_IP wirklich(!) die Internet IP steht. Das kann man auch ganz leicht überprüfen, indem man sich den Wert von LAN-IP ausgeben läßt. Also weiß noch jemand Rat? Bin ich der einzige mit dem Problem?
Es muss doch ne Möglichkeit geben ein Skript automatisch zu starten (bei der Einwahl) und autoamtisch zu stopppen (beim trenn)??? Oder gibt es ne bessere Lösung für LAN-IP ( siehe 1 Beitrag oben ) ????

swen1
21.08.03, 09:29
äh, kleiner blackout ...

... wozu brauch ich hier die Zeile überhaupt (iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 4661 -j SNAT --to-source $LAN_IP)?

Bin mir sicher, das ich die Zeile nicht habe, und bei mir klappt das nach wiedereinwahl wunderbar, ohne das Skript neu zu starten.

Gruß Swen

mctop
21.08.03, 18:09
gute Frage, hab so eine Zeile auch noch nie gesehen, dafür fehlt aber eine andere Zeile :D , nämlich die mit dem FORWARD !!!
Also
iptables -A FORWARD usw.

Da wäre noch eine Sache die mich interessieren würde.
Du hast DSL, aber deine externe IP liegt auf dem eth1 statt aus ppp0 !?!?!
Also das versteh ich nicht.

Abschließend nochmal gesagt,

du brauchst deine externe ip nicht für die Firewall Konfiguration !!!!!!!!!!!!!!
Du kannst bei iptables auch mit dem Device Arbeiten und das ändert sich nicht, egal wie oft du dich einwählst !!!!!! Ist allerdings normalerweise ppp0 :D