ports sperren
Christian
- perl
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
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
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
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
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
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
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.
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.
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
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
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.