PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Internet sperren



Rootkilla
21.06.04, 08:34
Hi Leute,

ich bräuchte dringend mal Rat von euch. Ich bräuchte etwas, womit ich das Internet (Linux-Proxy) mittels 1-2 Mausklicks sperren kann.
Folgendes Szenario:
9 Schülerplätze (192.168.10.11-192.168.10.20)
1 Lehrerplatz (192.168.10.10)
1 Win2k-PDC (192.168.10.1)
1 Linux-Proxy (192.168.10.254)
Wie könnte man das Lösen, dass der Lehrer und die Server immer im Internet sind, der Lehrer aber die 9 Schülerplätze aussperren kann.
Weiß jemand wie das geht, bin da nämlich ein ziemlicher Anfänger was Firewall/Proxy betrifft.

Danke im Voraus schonmal für eure Hilfe.

Gruß
Rootkilla

Multe
21.06.04, 10:27
Hallo,

ich würde es so lösen, das ich ich 2 Skripte auf dem Router/Gateway laufen lassen würde.

1. Skript
Iptables sperrt entweder alle Anfragen von den Schüler PCs oder nur gewünschte Ports, z.B. Port 80 oder 8080 wenns ein Proxy ist und der darauf läuft.

2. Skript, das diese Sperre wieder aufhebt.

Fertig.

Aufwand ist sehr gering und effektiv.
Falls Du mit iptables nichts anfangen kannst, nutze die Suchfunktion dieses Forums und/oder befrage google.

Ich persönlich habe mir damals "Das Firewallbuch" von Suse Press gekauft. Dort ist recht anschaulich erklärt wie alles geht und was man beachten muss.
Das Buch ist Suse unabhängig, nur zur Info.

Gruß Malte

*EDIT*
PS: Mit IPTables setzt Du einen Paketfilter um, Firewall ungleich Paketfilter.
Als Firewall bezeichnet man das gesamte Sicherheitskonzept, der Paketfilter ist dann ein Teil der Firewall, sprich das Konzepts.
Jaja, ich weiss Klugsch***r ;)

Rootkilla
21.06.04, 12:11
Erstmal danke für die Antwort.
Wollte mir jetzt nicht extra ein Buch dafür kaufen.

Hab mir schon gedacht, dass man das Scripten muss.
Wie sollte man das Ausführen handhaben, bzw. was ist am einfachsten?
Via Apache/PHP oder gibts da andere Möglichkeiten dies von einem Windows-Rechner aus zu starten?
Kannst du mir evtl. die 2 Scripte erstellen? Hab von Iptables leider recht wenig Ahnung und habe bei den Tuts die ich derzeit habe keinen Durchblick.
(jaja ich weiß. wer's net rafft, sollte es auch nicht benutzen)

Gruß
Rootkilla

D_O_Z_E_R
21.06.04, 12:19
hallo,

also zum starten der skripte wuerde ich nen ssh server aufsetzen. per putty connecten und skripte starten / stoppen .

wenn die pc's jedoch immer zur gleichen zeit online/offline gehen sollen kann man das auch über einen cron job machen.

Multe
21.06.04, 12:34
Ähm,

erstellen werd ich Dir das nicht, aber helfen kann man Dir.

Also ich gehe davon aus, das der Router ein Linuxrechner ist?

Wenn das so ist, dann machst Du einfach ein Script das ungefähr so aussieht:
Sperren:


#!/bin/bash
...
/usr/sbin/iptables -A FORWARD --proto tcp --src 192.168.10.11 --dport 80 -j REJECT
/usr/sbin/iptables -A FORWARD --proto udp --src 192.168.10.11 --dport 80 -j REJECT
...


Freigeben:


#!/bin/bash
...
/usr/sbin/iptables -A FORWARD --proto tcp --src 192.168.10.11 --dport 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD --proto udp --src 192.168.10.11 --dport 80 -j ACCEPT
...

Das ist ingefähr so wie es gehen sollte. Der Rechner aufdem das Routing läuft, dort lässt Du die Skripte laufen (z.B. ./sperren.sh)

Der Code oben bewirkt nun folgendes. Wenn ein Paket des Rechners 192.168.10.11 kommt und auf eine beliebige IP zugreifen will mit Port achtzig wird das mit REJECT abgelehnt, mit ACCEPT wird das zugelassen. --proto gibt das Protokoll an, also tcp oder udp.
Das musst Du für alle IPs machen die Du sperren willst.

Das zum Prinzip, mehr möchte ich Dir nicht machen, Du musst ja verstehen was dort läuft.
Lies mal hier: Lies mich! (http://www.linuxguruz.com/iptables/), da gibt es einige Beispielskripte.
Versuchs einfach mal.

Gruß Malte

Columbo0815
21.06.04, 12:45
Hallo,

was für einen Proxy setzt ihr ein? zB Squid kann das sehr gut von Haus aus ohne das du etwas scripten musst. Anleitungen dazu findest du hier im Forum.

Sollte es Squid sein, kann ich dir evtl. helfen.

Gruß Columbo

Rootkilla
21.06.04, 13:43
Also ich gehe davon aus, das der Router ein Linuxrechner ist?

Wenn das so ist, dann machst Du einfach ein Script das ungefähr so aussieht:
Sperren:


#!/bin/bash
...
/usr/sbin/iptables -A FORWARD --proto tcp --src 192.168.10.11 --dport 80 -j REJECT
/usr/sbin/iptables -A FORWARD --proto udp --src 192.168.10.11 --dport 80 -j REJECT
...


Freigeben:


#!/bin/bash
...
/usr/sbin/iptables -A FORWARD --proto tcp --src 192.168.10.11 --dport 80 -j ACCEPT
/usr/sbin/iptables -A FORWARD --proto udp --src 192.168.10.11 --dport 80 -j ACCEPT
...

Das zum Prinzip, mehr möchte ich Dir nicht machen, Du musst ja verstehen was dort läuft.
Lies mal hier: Lies mich! (http://www.linuxguruz.com/iptables/), da gibt es einige Beispielskripte.
Versuchs einfach mal.

Gruß Malte
Ist schonmal mehr Information als ich woanders herbekommen habe. Kann man die Regeln nicht direkt auf einen bestimmtem Bereich festlegen?




Hallo,

was für einen Proxy setzt ihr ein? zB Squid kann das sehr gut von Haus aus ohne das du etwas scripten musst. Anleitungen dazu findest du hier im Forum.

Sollte es Squid sein, kann ich dir evtl. helfen.

Gruß Columbo

Ja ich setze Squid ein. Kannst du mal etwas genauer sagen, um welche Funktionen es sich da handelt?

Rootkilla
21.06.04, 13:48
hallo,

also zum starten der skripte wuerde ich nen ssh server aufsetzen. per putty connecten und skripte starten / stoppen .

wenn die pc's jedoch immer zur gleichen zeit online/offline gehen sollen kann man das auch über einen cron job machen.

Dies wäre eine Lösung. die ich für mich einsetzen könnte. Doch leider kann ich dies von einem Lehrer nicht erwarten. Hier wäre eine Lösung sinnvoller, bei der man max. 2 Klicks machen muss.

pibi
21.06.04, 13:57
Ja ich setze Squid ein. Kannst du mal etwas genauer sagen, um welche Funktionen es sich da handelt?Fuer Squid kannst Du sog. "Access Lists" (kurz ACL) definieren. Diese definieren unter anderem, wer (welche IP-Adresse) an Squid Anfragen richten darf. Etwa so, stark vereinfacht:

acl myserver src 192.168.10.0/255.255.255.0
http_access allow myserver
http_access deny allWenn Du nun diese Berechtigungen veraenderst und Squid neu startest (via Script und Mausclick), hast Du die gewuenschte Funktion. Dies setzt natuerlich voraus, dass der Zugang ins IN ueber Squid gehen muss.

Gruss Pit.

Rootkilla
21.06.04, 14:06
acl myserver src 192.168.10.0/255.255.255.0
http_access allow myserver
http_access deny all
Gruss Pit.

Ok. Ich gehe jetzt mal davon aus, dass die acl in der squid.conf definiert werden muss und das http_access als Befehl in einem Script oder über Console ausgeführt werden muss. Bin ich da auf dem richtigen weg.


Ok. Fehler von mir. Habs gefunden denk ich. Ergo ich muss mit meinem Script die squid.conf ändern und "squid restart" und dann funzt des? Ok? Nur leider hab ich wenig wissen mit scripting.

pibi
21.06.04, 15:10
Ok. Fehler von mir. Habs gefunden denk ich. Ergo ich muss mit meinem Script die squid.conf ändern und "squid restart" und dann funzt des? Ok? Nur leider hab ich wenig wissen mit scripting.Ganz einfache Loesung:Wie Du richtig erkannt hast (und ich vergessen habe zu schreiben), erfolgt die Aenderung in squid.conf. Erstelle Dir zwei solche Konfigurationen, einmal mit vollem Zugang und einmal restricted (nur der Lehrer darf). Dann schreibst Du Dir zwei Scripts, die jeweils das gewuenschte File nach squid.conf kopieren und squid anschliessen reloaden. Wie letzteres genau geht, haengt von Deiner Distribution ab. Denkanstoss fuer das "restricted scenario":
#!/bin/sh
cp -av /etc/squid.restricted.conf /etc/squid.conf
/usr/sbin/squid -k reconfigureDas freie Scenario geht entsprechend. Evtl. musst Du die Pfade noch anpassen. Die Rechte muessen natuerlich auch stimmen (der Lehrer muss nach /etc schreiben duerfen etc.).

Gruss Pit.

BSM
21.06.04, 15:22
Hallo,

imo ist die Lösung mit dem Squid ein wenig zu umständlich, weil man dazu IMMER den squid neustarten muss.

Also, mein Vorschlag:

Du holst dir das putty für Windows Paket, da ist plink mit bei.
Dann richtest du das ganze mit Private Key ein, damit du dich ohne Passwort anmelden kannst, das könntest du auch für die Squid lösung benutzen.

Anleitung: http://www.linux-user.de/ausgabe/2001/07/092-zubefehl/befehl17.html

und in der Hilfe zur Putty.

Dann schreibst du auf dem Server ein kleines Script, dass die Verbindungen von den Schüler rechnern unterbindet:

schueleraus:


#!/bin/bash

/usr/sbin/iptables -A INPUT --proto tcp --src 192.168.10.11:192.168.10.20 --dport 3128 -j REJECT


Das ganze dann noch mit schueleran:


#!/bin/bash

/usr/sbin/iptables -A INPUT --proto tcp --src 192.168.10.11:192.168.10.20 --dport 3128 -j ACCEPT


dann machst du einen Link in dem plink mit allen Parametern aufgerufen wird:

(pfad zu putty)plink.exe -ssh -l USER(,wohl root... :rolleyes: ) -i keyfile KOMMANDO (hier schueleraus)

Das Script schueleraus sollte in einem der Verzeichnisse stehen die im PATH sind, in deinem Fall also erstmal ein echo $PATH, dann eins aussuchen, am besten sowas unter /usr

Wie das ganze mit dem root und dem Schlüssel ist, müssen die Sicherheitsexperten hier erklären...dadurch könnte man komplette Kontrolle gewinnen, wenn man zb nicht das schueler kommando ausführt sondern einfach passwd um das passwort von root zu ändern.....Je nachdem wie bewandert die Klasse ist.

Das ganze ist natürlich noch ein bisschen änderungsfähig, ansonsten sollte es so laufen.

Gruss Robert

Rootkilla
21.06.04, 15:26
Werd ich mal versuchen.
Wie lässt sich das Script am besten Remote starten? Wie gesagt, ich bräuchte ne Klick-Version und der Lehrer hat keinen Zugriff auf die Konsole.
Dachte da evtl. an PHP, sodass die Konfiguration über den Browser gemacht werden kann (exec("bash /restrict_squid")). NAchteil der Lösung ist, dass ein Apache rennen muss. Gibts da ne bessere Variante?

@BSM: Gute Alternative. Werd ich auch mal testen. Dass die Schüler unfug damit treiben wird weniger der Fall sein, da nur Lehrer auf das Script zugriff haben werden. Außerdem denke ich nicht, dass in einer Grundschule Leute sitzen, die groß das Netzwerk hacken könnten.

Gruß
Rootkilla

BSM
21.06.04, 15:29
Achja, und per php könnten findige Schüler den Internet an/aus Knopf finden, es sei denn du schreibst noch ne Anmeldung oder du blockst die ganzen Schüler IPs auf dem Apachen.
Solange das nur fürs Interne Netz ist, muss der Apache auch nicht unbedingt immer up-to-date sein, also relativ pflegeleicht.

Rootkilla
21.06.04, 15:44
oder du blockst die ganzen Schüler IPs auf dem Apachen.


Naja. Ein einfaches

if ($_SERVER['REMOTE_ADDR'] == "192.168.10.10")
{
...;
}
else die(":-P");
reicht da wohl schon.

Denke ich werds auch so in der Richtung machen. Wird wohl am einfachsten für mich sein.

Danke

Rootkilla
22.06.04, 07:57
Hallo,

schueleraus:


#!/bin/bash

/usr/sbin/iptables -A INPUT --proto tcp --src 192.168.10.11:192.168.10.20 --dport 3128 -j REJECT


schueleran:


#!/bin/bash

/usr/sbin/iptables -A INPUT --proto tcp --src 192.168.10.11:192.168.10.20 --dport 3128 -j ACCEPT



Ich bin es nochmal. Also das 192.168.10.11:192.168.10.20 funzt so net.
"host/network '192.168.10.11:192.168.10.20' not found"
evtl. zu alte iptables oder so? (v1.2.7a)
hab jetzt alle ips einzeln ins script geknallt
schuelerein


#!/bin/bash

/sbin/iptables -A INPUT --proto tcp --src 192.168.10.11 --dport 3128 -j ACCEPT
...
/sbin/iptables -A INPUT --proto tcp --src 192.168.10.20 --dport 3128 -j ACCEPT
bash /etc/init.d/iptables restart

analog dazu schueleraus mit REJECT.


gruß

rootkilla