PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Firewall?



Seiten : [1] 2

Muhnwalker
01.03.03, 16:56
Hi!

Hab mal ne Frage: Gibts es für Linux eine Firewall, die bestimmten Anwendungen bestimmte Internetzugriffe (Protokolle, Ports, z.B. TCP/IP:80) erlaubt bzw. verbietet?
Ich kenne sowas von Windows her (AtGuard, Norton Personal Firewall, Conseil PC Firewall, Kerio Personal Firewall) und vermisse das seit ich Linux habe sehr.
Ich möchte mich damit u.A. gegen Spyware und Trojaner schützen. Ein Beispiel ist der Real Player, der _nicht_ Open Source ist und fröhlich rauszusenden scheint. Ich möchte diesen allerdings _nur_ offline nutzen.

HangLoose
01.03.03, 17:16
hi

iptables ist dein freund ;) => http://www.linux-user.de/ausgabe/2002/05/030-firewall/firewall-4.html


Gruß HL

HangLoose
01.03.03, 18:00
hi

ich hab das eben mal mit dem realplayer getestet, da wird nichts rausgeschickt.


Gruß HL

Muhnwalker
01.03.03, 18:25
Hm, es kommt mir nicht speziell auf den Real Player an, ist klar... unter Windoofs hat der Real Player von sich aus Verbindungen aufgebaut.

Ich wühl mich schon durch die iptables und hab mir schon ein Script erstellt, das nur Verbindungen in meinem lokalen Netz und Port 80-Verbindungen ins Netz (ich schreib ja schliesslich grade hier *g*) zulässt. Was ich aber bräuchte wäre eine Beschränkung auf bestimmte Anwendungen. Dass muss doch auch gehen (oder geht das auch mit iptables?)

Muhnwalker
01.03.03, 18:32
Kann man die Regeln für spezielle Anwendungen vielleicht mit dem Parameter "--in-interface name" realisieren?
Habs schon probiert, leider klappts (noch) nicht...

Muhnwalker
01.03.03, 18:50
nee leider ist der Parameter für eth0, eth1 usw gedacht :-(
das gibts doch net in jedem Paket steht doch die Anwendung drin...

HangLoose
01.03.03, 18:55
hi


Kann man die Regeln für spezielle Anwendungen vielleicht mit dem Parameter "--in-interface name" realisieren?

iptables -A INPUT -i ppp0 .....

regel gilt für das interface ppp0



Was ich aber bräuchte wäre eine Beschränkung auf bestimmte Anwendungen. Dass muss doch auch gehen (oder geht das auch mit iptables?)

ich will's mal so sagen, es ist *beschränkt* mit iptables möglich. mein script ist so aufgebaut, das vom lan ins inet nur darf, was explizit freigegeben wurde. damit hast du schonmal einen recht guten schutz. angenommen ich hab nur www erlaubt und starte dann den realplayer und der will ne verbindung nach *hause* aufbauen, so wird ihm das nicht gelingen.
es sei denn, er benutzt auch den port 80, dann läßt ihn der paketfilter durch.

eine weitere möglichkeit ist der einsatz von proxys, die haben die möglichkeit auch in die pakete zu schauen.


Gruß HL

Muhnwalker
01.03.03, 19:15
Also, ich habe es bereits hinbekommen, dass nur ein Prozess mit einer bestimmten ID raus darf. Und zwar mit folgender Zeile:

iptables --append OUTPUT --protocol tcp --match owner --pid-owner 2090 --jump ACCEPT

Das würde den Prozess mit der PID 2090 durchlassen. Das Problem ist nur, dass sich diese Nummer bei jedem Start des jeweiligen Programms ändert. Es gäbe noch weitere Möglichkeiten, und zwar:
--sid-owner => die Prozessgruppe, ist leider bei vielen Anwendungen die gleiche :-(
--cmd-owner => wäre die Lösung, gibt z.B. "/opt/kde3/bin/sim" an, GEHT ABER NICHT :-(

HangLoose
01.03.03, 19:19
du bist schon auf dem richtigen weg ;)

stichwort

-m owner --uid-owner <userid>
-m owner --gid-owner <groupid>




Gruß HL

Muhnwalker
01.03.03, 19:20
Ich hätte noch ne Idee, und zwar:
Für jede Anwendung ein kleines Script schreiben, dass
- die Anwendung startet
- irgendwie die PID rausfindet
- einen iptable für diese PID erstellt
- irgendwie nach beenden der Anwendung den iptable wieder löscht

Ein weiteres Problem ist noch, dass der Parameter mit dem Owner nur bei ausgehenden Verbindungen klappt, allerdings lässt sich das halbwegs lösen, wenn man mit folgender Zeile alle eingehenden Verbindungen erlaubt, die Antworten auf bereits erlaubte ausgehende Verbindungen sind (hier beschränkt auf die Ports 1024+):

iptables -A INPUT -p tcp --dport 1024: ! --syn -j ACCEPT

Muhnwalker
01.03.03, 19:22
versteh dich jetzt nicht, UID und GID sind doch bei allen von mir gestarteten Prozessen gleich...

Muhnwalker
01.03.03, 19:51
Hat vielleicht jemand eine Idee, wie ich --cmd-owner zum laufen bekomme?
Hier ein Auszug aus der iptables-manpage:



--cmd-owner name
Matches if the packet was created by a process with the given command name. (this option is present only if iptables was compiled under a kernel supporting this feature)

HangLoose
01.03.03, 19:54
versteh dich jetzt nicht, UID und GID sind doch bei allen von mir gestarteten Prozessen gleich...

du könntest theoretisch für die anwendungen die ins inet dürfen, nen eigenen user erstellen. du müßtest dann allerdings die anwendung immer mit diesem user starten, was natürlich etwas umständlich ist.


Ein weiteres Problem ist noch, dass der Parameter mit dem Owner nur bei ausgehenden Verbindungen klappt, allerdings lässt sich das halbwegs lösen, wenn man mit folgender Zeile alle eingehenden Verbindungen erlaubt, die Antworten auf bereits erlaubte ausgehende Verbindungen sind (hier beschränkt auf die Ports 1024+):

dafür gibt es connection tracking, ist *genauer* und funktioniert auch bei udp verbindungen.

iptables -A INPUT ... -m state --state ESTABLISHED,RELATED -j ACCEPT

rein darf nur was zu einer von innen gestarteten verbindung gehört.


deine idee mit dem script ist nicht schlecht ;)


Gruß HL

Muhnwalker
01.03.03, 20:00
Hm mir wäre das mit der PID rausfinden sympathischer.
Wie kann man denn die PID eines Programms, dass man in einem Script startet, rausfinden?
Und wie kann man ein Script anweisen, auf das Ende eines Programms zu warten und dann noch Code auszuführen?

HangLoose
01.03.03, 20:02
mit pidof kanst du die pid rausfinden, wie du dein vorhaben aber in einem shellscript umsetzen kannst, bin ich überfragt.

Muhnwalker
01.03.03, 20:23
Ich glaube, die bester Lösung ist, wenn ich den Parameter "--cmd-owner" irgendwie aktiviere - nur wie???
Ist der bei dir aktiviert?

HangLoose
01.03.03, 21:50
hi

ich hab mir das mit dem "--cmd-owner" mal angesehen und es funktioniert bei mir auch nicht. in der kernelconfig ist speziell zu --cmd auch nichts weiter zu finden. laut manpage gehört es ja auch zum owner modul und das bei mir eincompiliert.

meine vermutung => cmd-owner ist in der aktuellen iptablesversion noch nicht implementiert.


Gruß HL

cytrox
01.03.03, 22:02
Original geschrieben von Muhnwalker
Hat vielleicht jemand eine Idee, wie ich --cmd-owner zum laufen bekomme?
Hier ein Auszug aus der iptables-manpage:



--cmd-owner name
Matches if the packet was created by a process with the given command name. (this option is present only if iptables was compiled under a kernel supporting this feature)


..is present only if iptables was compiled under a kernel supporting this feature - vielleciht liegts ja daran, dass es nicht geht? Dann musst du eventuell einen neuen Kernel mit den benötigten Optionen kompilieren, und iptables unter diesem Kernel auch neu kompilieren.

Aber das Problem mit dem Script ist, dass iptables root rechte braucht - also musst du entweder das Script immer als root aufrufen und dann im Script das Programm mit "su username -c programm" starten, das Script bzw. den iptables-Aufruf mit sudo für einen normalen User mit root-Rechten ausführbar machen (Bad Thing(tm)), oder iptables SUID root machen (very Bad Thing(tm)).

Die Idee von HangLoose mit einer eigenen UID für Inet-Programme finde ich da sauberer. Kannst ja für diese UID iptables-Regeln erstellen (-m owner --uid-owner), und dann die Programme per Script und sudo unter dieser UID laufen lassen.

Gruss, cytrox



Gruss, cytrox

Muhnwalker
01.03.03, 23:27
Ja, mit den Scripts bin ich auch genau an der Stelle hängen geblieben, ich hatte das Problem schonmal (Samba-Scripts).
Im Moment bin ich am Kernel-neu-compilieren, 2.4.20, ist mein erstes Mal, ich hoffe es haut hin :D
Ein Script bräuchte ich ja dann nicht mehr, weil die Anwendungen die ich freigeben will ja gleich bleiben...

HangLoose
01.03.03, 23:45
wenn du dir den alten *aufhebst*, kann ja nichts passieren ;)

bin ja mal gespannt ob es mit dem 2.4.20 er geht. ich hab noch den 19 er und damit scheint es definitiv nicht zu gehen.


Gruß HL

cytrox
02.03.03, 00:24
Also bei mir geht es, gerade ausprobiert - Kernel 2.4.20, Gentoo, iptables 1.2.7a:



[root@marvin][root][0] # iptables -L -n | grep OWNER
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 OWNER CMD match galeon


Es reicht nicht, wenn der Kernel die Option unterstützt (die explitzit gar nicht in der Kernel Config angegeben ist), sonder iptables muss auch unter einem solchen Kernel kompiliert worden sein, und bei manchen Binary-Distributionen scheint das wohl nicht der Fall zu sein, also eventuell musst du noch iptables neu kompilieren.

Gruss, cytrox

HangLoose
02.03.03, 00:36
sauerei ;)


(die explitzit gar nicht in der Kernel Config angegeben ist)

ich weiß, es gibt dort nur das owner modul.


sonder iptables muss auch unter einem solchen Kernel kompiliert worden sein

ich nutze auch gentoo, daran dürfte es dann nicht liegen. an der iptables-version auch nicht, hab die selbe.

root@linux-server linux # iptables -I OUTPUT -p tcp -m owner --cmd-owner ssh -j ACCEPT
iptables v1.2.7a: Unknown arg `--cmd-owner'
Try `iptables -h' or 'iptables --help' for more information.


syntaxfehler oder doch die kernelversion?

naja ich geh erstmal pennen.


Gruß HL

Muhnwalker
02.03.03, 02:42
Nach 3 Stunden Arbeit (40 min reines Kompilieren) war mein Kernel endlich fertig.
Bootmanager eingerichtet, die Ramdisk erstellt usw. Gestartet - bootet - schwarzer Bildschirm. Genau an der Stelle wo der KDE kommen müsste. Runlevel auf 3 gestellt - klappt. startx eingegeben - wieder schwarzer Bildschirm. Eine halbe Stunde mit sax2 rumprobiert - geht immernoch net.
Hab dann mal wieder ins Forum geguckt und mich entschieden, iptables mal neu zu kompilieren. Dazu musste ich aber erstmal das rpm-Paket von SuSE deinstallieren. Daran hing noch SuSEfirewall2 und yast2-firewall. OK - alle 3 Sachen deinstalliert. Dann iptables neu compiliert. Der Parameter geht immernoch net (ich hab allerdings als KERNAL_DIR den alten Kernel angegeben, der neue funzt ja net...)
KA was ich jetzt machen soll, oder woran das liegt, dass der neue Kernal nicht in die grafische Oberfläche will.
Ich würd allerdings gerne iptables wieder "deinstallieren", damit ich das rpm von SuSE wieder draufbekomme, zumindest bis ich den Kernel zum laufen kriege... kann mir da bitte jemand helfen, es gibt da nämlich nur ein INSTALL-Readme!!!

Newbie2001
02.03.03, 10:33
hast du villeicht n paar graka-treiber vergessen wenn dein neuer kernel nich funzt ???

Muhnwalker
02.03.03, 11:35
Ja ich glaube es liegt an den NVIDIA-Treibern... ich habe ein RPM-Paket installiert, dass wohl mit dem neuen Kernel nicht klappt... Laut dem Boot-log gibts aber auch mehrere Probleme ("failed"), z.B. beim Sound... was muss ich denn alles neu compilieren??

Newbie2001
02.03.03, 11:38
naja sound-unterstützung musst du natürlich auch in den kernel stecken. und deine alsa-module musst du wahrscheinlich auch neu kompilieren.

Muhnwalker
02.03.03, 11:43
Hab ich ne Chance, mir anzeigen zu lassen, was nicht geht? Die Boot-Messages scrollen zu schnell um sie lesen zu können (******* GHz-CPUs :D )...
Und meine zweite Frage: Kann ich das compilierte Programm iptables irgendwie wieder entfernen? Aaah!

Newbie2001
02.03.03, 12:21
naja schau halt mal in die logs.
/var/log/daemon, /var/log/messages, /var/log/kernel, /var/log/dmesg

HangLoose
02.03.03, 12:39
moin


Und meine zweite Frage: Kann ich das compilierte Programm iptables irgendwie wieder entfernen? Aaah!

warum willst du dein selbstcompiliertes iptables paket denn wieder entfernen?


Gruß HL

Muhnwalker
02.03.03, 14:23
Naja, weil z.B. Abhängigkeiten zur RPM-Version existieren. Ist auch mehr eine generelle Frage. Muss ich mich da immer per Hand durchwühlen und die Dateien einzeln raussuchen und löschen?
Ich hab die iptables jetzt mal von Hand gelöscht und unter dem neuen Kernel, ohne grafische Oberfläche, neu compiliert - und siehe da: der Parameter "--cmd-owner" funzt!!! Nur leider geht der Kernel noch nicht wirklich (Grafik, Sound usw)... muss noch dran arbeiten. Ich finde das ist alles sehr sehr zeitaufwendig :-/