Christian: ports sperren

hi, ich bin grad dabei ein script zu schreiben, dass mi meine Ports oberhalb von Port 1024 blockieren soll.
ich habe das versucht so zu realisieren:

#!/usr/bin/perl -w

print "Option: ";
my $VALUE;
$VALUE = <>;
chomp $VALUE;

system("/usr/sbin/iptables $VALUE OUTPUT -p tcp --sport 1025:65535 -j DROP");
system("/usr/sbin/iptables $VALUE OUTPUT -p tcp --dport 1025:65535 -j DROP");
system("/usr/sbin/iptables $VALUE OUTPUT -p udp --sport 1025:65535 -j DROP");
system("/usr/sbin/iptables $VALUE OUTPUT -p udp --dport 1025:65535 -j DROP");

leider funktioniert bei mir danach nix mehr.
der rechner auf dem das script läuft dient mir als router ins internet. ausserdem läuft da noch samba, nen webserver, nen ftp server und über putty will ich nätürlich auch auf ihn zugreifen können.
zu sagen ist vielleicht noch, dass ich heite erst angefangen habe mich mit iptables und perl zu beschäftigen.

kann mir da jemand weiterhelfen?

grüße
 christian

  1. Hi,

    [...]

    system("/usr/sbin/iptables $VALUE OUTPUT -p udp --dport 1025:65535 -j DROP");
    leider funktioniert bei mir danach nix mehr.

    s/system/print/g && schaueWasDabeiRauskommt();

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. hi Cheatah,

      [...]

      system("/usr/sbin/iptables $VALUE OUTPUT -p udp --dport 1025:65535 -j DROP");
      leider funktioniert bei mir danach nix mehr.

      s/system/print/g && schaueWasDabeiRauskommt();

      was meinst du damit? ob eine fehlermeldung erscheint? wenn ja: nein, das sieht zumindest so aus als ob iptables das frisst.

      als $VALUE geb ich -A bzw. -D an.

      cu christian

      1. Hi,

        s/system/print/g && schaueWasDabeiRauskommt();
        was meinst du damit? ob eine fehlermeldung erscheint?

        nein; ich meine, dass Du die auszuführende Zeile mal auf dem Bildschirm ausgeben lassen sollst, um zu sehen, ob sie wirklich _exakt_ dem entspricht, was Du brauchst.

        als $VALUE geb ich -A bzw. -D an.

        Die Frage ist, was am Ende rauskommt.

        Cheatah

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hi Cheatah,

          Die Frage ist, was am Ende rauskommt.

          bei: print "/usr/sbin/iptables $VALUE OUTPUT -p udp --dport 1025:65535 -j DROP";

          und -A als $VALUE wert kommt das raus:

          /usr/sbin/iptables -A OUTPUT -p udp --dport 1025:65535 -j DROP

          sollte doch funktionieren oder? und ssh und samba liegen doch auf ports unter 1025. oder brauch ich noch ein paar über 1024?

          cu christian

          1. Hi,

            bei: [...] kommt das raus:
            /usr/sbin/iptables -A OUTPUT -p udp --dport 1025:65535 -j DROP
            sollte doch funktionieren oder?

            keine Ahnung, hast Du es getestet?

            und ssh und samba liegen doch auf ports unter 1025. oder brauch ich noch ein paar über 1024?

            Finde es manuell heraus. Auf diese Weise kannst Du entscheiden, ob sich das Problem auf Perl oder auf die Bedienung der Software zurückführen lässt.

            Cheatah

            --
            X-Will-Answer-Email: No
            X-Please-Search-Archive-First: Absolutely Yes
            1. Hi,

              keine Ahnung, hast Du es getestet?

              Ja, geht.

              Finde es manuell heraus. Auf diese Weise kannst Du entscheiden, ob sich das Problem auf Perl oder auf die Bedienung der Software zurückführen lässt.

              netstat gibt folgendes aus:
              Active Internet connections (w/o servers)
              Proto Recv-Q Send-Q Local Address           Foreign Address         State
              tcp        0      1 p50816821.dip0.t-:54065 checkip.orh.dy:www-http SYN_SENT <- naaaaaaaaaah was soll'n das
              tcp        0      0 localnetbox:netbios-ssn localnetbox1:3165       ESTABLISHED
              tcp        0      0 192.168.0.100:ssh       192.168.0.1:3171        ESTABLISHED
              tcp        0      0 192.168.0.100:ssh       192.168.0:ms-wbt-server ESTABLISHED
              Active UNIX domain sockets (w/o servers)
              Proto RefCnt Flags       Type       State         I-Node Path
              unix  11     [ ]         DGRAM                    1590   /dev/log
              unix  2      [ ]         DGRAM                    169390
              unix  2      [ ]         DGRAM                    7094
              unix  2      [ ]         DGRAM                    6870
              unix  2      [ ]         DGRAM                    6445
              unix  2      [ ]         DGRAM                    6240
              unix  2      [ ]         DGRAM                    4349
              unix  2      [ ]         DGRAM                    2582
              unix  2      [ ]         DGRAM                    2192
              unix  2      [ ]         DGRAM                    1598

              und in der /etc/services steht:

              ssh              22/tcp                 # SSH Remote Login Protocol
              ssh              22/udp                 # SSH Remote Login Protocol
              netbios-ssn     139/tcp                 # NETBIOS Session Service
              netbios-ssn     139/udp                 # NETBIOS Session Service

              also alle unter 1024. trotzdem wird die ssh verbindung sofort blockiert wenn ich das script aufrufe.

              1. netstat gibt folgendes aus:
                Active Internet connections (w/o servers)

                [snip]

                tcp        0      0 192.168.0.100:ssh       192.168.0.1:3171        ESTABLISHED
                tcp        0      0 192.168.0.100:ssh       192.168.0:ms-wbt-server ESTABLISHED

                Da liegt der Hase im Pfeffer:
                mit
                /usr/sbin/iptables $VALUE OUTPUT -p tcp --dport 1025:65535 -j DROP

                hast du ausgehende TCP-Pakete, die an(!) einen Port > 1024 gehen blockiert

                Die ssh-Verbindung geht vom Port 22 auf dem Router an den Port 3171 auf
                192.168.0.1, was du aber verboten hast...

                Es ist weniger ein Perl-Problem, als vielmehr eines mit deinen
                Filterregeln.

          2. Hi,

            Die Frage ist, was am Ende rauskommt.

            bei: print "/usr/sbin/iptables $VALUE OUTPUT -p udp --dport 1025:65535 -j DROP";

            und -A als $VALUE wert kommt das raus:

            /usr/sbin/iptables -A OUTPUT -p udp --dport 1025:65535 -j DROP

            sollte doch funktionieren oder? und ssh und samba liegen doch auf ports unter 1025. oder brauch ich noch ein paar über 1024?

            hast Du nmap installiert?
            Wenn ja, lass es mal vorher laufen, um zu sehen, ob Ports oberhalb von 1024 offen sind.

            Gruß
            Reiner

            1. hi Reiner,

              hast Du nmap installiert?
              Wenn ja, lass es mal vorher laufen, um zu sehen, ob Ports oberhalb von 1024 offen sind.

              leider nicht.

              cu christian

  2. hi, ich bin grad dabei ein script zu schreiben, dass mi meine Ports oberhalb von Port 1024 blockieren soll.
    ich habe das versucht so zu realisieren:

    [snip]

    system("/usr/sbin/iptables $VALUE OUTPUT -p tcp --sport 1025:65535 -j DROP");
    system("/usr/sbin/iptables $VALUE OUTPUT -p tcp --dport 1025:65535 -j DROP");
    system("/usr/sbin/iptables $VALUE OUTPUT -p udp --sport 1025:65535 -j DROP");
    system("/usr/sbin/iptables $VALUE OUTPUT -p udp --dport 1025:65535 -j DROP");

    [snip]

    kann mir da jemand weiterhelfen?

    grüße
    christian

    Du solltest noch genauer spezifizieren, welches Interface du blockieren
    willst. Da dein Rechner ein Router ist, wird er wohl wahrscheinlich
    mehrere Netzwerkinterfaces haben.

    Falls eth0 dein externes Interface ist, sollte es heissen
    "/usr/sbin/iptables $VALUE OUTPUT -o eth0 -p ..."
    Mit der "-o"-Option bestimmst du das Interface, für welches die Regeln
    gelten sollen. Wenn du sie weglässt, gilt die Regel für alle Interfaces,
    was für die lokalte Kommunikation ziemlich hinderlich ist :)

    Ob das perl richtig ist, weiss ich nicht weil kann ich nicht:)

    gnu

    P.S.: Falls du PPP benutzt, um ins Inet zu gehen, darfst du die Regel
    nicht auf das physische (eth0) sondern das logische (ppp0 bei SuSE)
    benutzen.