Gerhard Neugebauer: Steuern einer Firewall ueber HTML

Ich suche eine Lösung:
ein Benutzer soll sich von einer Win98 Station über einen Linux 6.2  Server
(SQUID) im Internet serven können. Allerding soll die Freischaltung des Internets
abhängig vom Benutzer sein und automatisch erfolgen.Wenn das Internet
freigeschalten ist sollen nur berechtigte Benutzer Daten aus dem Internet
bekommen.
Dabei soll egal sein an welchem Client der Benutzer angemeldet ist.
Die Clients haben eine feste IP-Adresser.
Wenn es nicht Benutzer bezogen geht dann sollte es nur IP bezogen sein.

Das freischalten des Benutzers oder der IP  soll ueber einen Browser funktionieren.
z.B. wenn ein cgi skript folgendes ausfuerhren soll

ipchains -D input -j DENY -p tcp -s 192.168.0.2 -d 192.168.0.3 3128
sleep 300 &
ipchains -A -j input -j DENY -p tcp -s 192.168.0.2 -d 192.168.0.3 3128

zweite Problem: Der Browser wartet bis der sleep ausgefuehrt ist, trotz &.
wie kann ich das umgehen.

  1. Ich suche eine Lösung:
    ein Benutzer soll sich von einer Win98 Station über einen Linux 6.2  Server
    (SQUID) im Internet serven können. Allerding soll die Freischaltung des Internets
    abhängig vom Benutzer sein und automatisch erfolgen.Wenn das Internet
    freigeschalten ist sollen nur berechtigte Benutzer Daten aus dem Internet
    bekommen.
    Dabei soll egal sein an welchem Client der Benutzer angemeldet ist.
    Die Clients haben eine feste IP-Adresser.
    Wenn es nicht Benutzer bezogen geht dann sollte es nur IP bezogen sein.

    Das freischalten des Benutzers oder der IP  soll ueber einen Browser funktionieren.
    z.B. wenn ein cgi skript folgendes ausfuerhren soll

    ipchains -D input -j DENY -p tcp -s 192.168.0.2 -d 192.168.0.3 3128
    sleep 300 &
    ipchains -A -j input -j DENY -p tcp -s 192.168.0.2 -d 192.168.0.3 3128

    zweite Problem: Der Browser wartet bis der sleep ausgefuehrt ist, trotz &.
    wie kann ich das umgehen.

    Hm, erklär das nochmal. Wie genau soll das gehen. Zu deinem Script, dass musst du erst mal als Root ausführen. Dazu brauchst du z. B. nen gepatchtes suexec.

    Versuch doch mal folgendes Sub aufzurufen:

    sub daemonize {
                   chdir '/'               or die "Can't chdir to /: $!";
                   open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
                   open STDOUT, '>/dev/null'
                                           or die "Can't write to /dev/null: $!";
                   defined(my $pid = fork) or die "Can't fork: $!";
                   exit if $pid;
                   setsid                  or die "Can't start a new session: $!";
                   open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
               }

    Dann koppelt sich das CGI vom Browser ab.

    1. Versuch doch mal folgendes Sub aufzurufen:

      sub daemonize {
                     chdir '/'               or die "Can't chdir to /: $!";
                     open STDIN, '/dev/null' or die "Can't read /dev/null: $!";
                     open STDOUT, '>/dev/null'
                                             or die "Can't write to /dev/null: $!";
                     defined(my $pid = fork) or die "Can't fork: $!";
                     exit if $pid;
                     setsid                  or die "Can't start a new session: $!";
                     open STDERR, '>&STDOUT' or die "Can't dup stdout: $!";
                 }

      leider habe ich noch nicht soviel ahnung, wo soll ich dieses eintragen. in der indexhtml oder im CGI Skript
      index:html:
      <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
      <html>
      <form method=POST action="/usr/local/webmin-0.74/ip.cgi">
      <table border="0" width="80%">
      <tr>
      <td><input type="submit"
        name="B1" value="      OK      ">
      </form>
      </td>
      </tr>
      </table>
      </html>

      ip.sh:
      #!/bin/sh
      ipchains -A input -j DENY -p tcp -s 192.168.0.2 -d 192.168.0.3 3128
      sleep 10 &  # Das & macht aerger
      ipchains -D input -j DENY -p tcp -s 192.168.0.2 -d 192.168.0.3 3128

      Dann koppelt sich das CGI vom Browser ab.