Archiv verlassen und diese Seite im Standarddesign anzeigen : [iptables] pakete auf geschlossene ports blockiern
hallo!
wie kann ich mit iptables packete die auf einen port gehen der geschlossen ist protokollieren?
(ohne alle offenen ports freizugeben und dann alles andre zu loggen)
ich hab leider nix gefunden wie das geht :-/
vllt noch anders erklärt:
ich geb das ein:
14:34:13 [root@mac] /home/matze> telnet localhost 1234
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
und will dann im protokoll mehr oder weniger stehen haben:
da hat einer versucht auf port 1234 zuzugreifen, das ging aber leider nicht da der port geschlossen ist.
ich hoff das is verständlich :-)
grüssle,
maconey
derRichard
10.09.03, 14:10
hallo!
einfach ein -j LOG machen.
zb:
iptables -A INPUT -i eth0 -p tcp --dport 1234 -j LOG
//richard
iptables -A <chain> -p <proto> --dport <port> -j LOG --log-prefix "closed port accessed : "
-j
verflixt, ich hab mich doch falsch ausgedrückt (bzw. was vergessen)
ich will alle ports geloggt haben die nicht geöffnet sind... wie man einen einzelnen port loggt ist klar, ich will nur die ports geloggt haben die nicht geöffnet sind...
also alle ports sollen geloggt werden, nur eben die nicht die geöffnet sind...
trotzdem danke...
gruss,
maconey
Thomas Engelke
10.09.03, 14:32
Fällt die Entscheidung, ob ein Port "geschlossen" ist, nicht zu exakt dem Zeitpunkt, an dem du das Paket "-j DROP"st? Dann geht dies nicht, da genau dies ja das Paket verwirft.
AD!
es muss aber doch ne möglichkeit geben alle pakete die reinkommen und nicht mehr rausgehen (also verworfen werden) zu protokollieren?!
(ich meine nicht die pakete die von meinen eigenen regeln verworfen werden, sondern die auf "ungültige" ports gehen)
penguin007
10.09.03, 14:47
Hi
Kennst du Portsentry wenn nicht probier mal das vielleicht hilft es dir weiter.
Dann schaut ein log so aus:
TCP Blocked
1061975605 - 08/27/2003 11:13:25 Host: 212.42.75.59/212.42.75.59 Port: 1080 TCP Blocked
Wenn du sowas meinst wenn nicht dann eben nicht
:ugly:
Cu
das kommt dem ganzen schon relativ nah... ich will aber alle ports geloggt haben und nicht nur ein paar...
danke...
penguin007
10.09.03, 14:56
Du kannst bei diesem Prog. einstellen welche also wenn du alle haben willst dann schreib alle auf in die conf viel spass ;)
baba
genau das will ich vermeiden...
und wenn ich irgendein programm starte das nen port öffnen will hab ich auch pech gehabt...
penguin007
10.09.03, 15:07
Tja dann viel spass noch bei der suche wenn du was neues weisst dann post it
:D
Thomas Engelke
10.09.03, 15:08
Dann läßt sich natürlich auch dasselbe per iptables machen. Ich dachte, es geht darum, keine statische Liste der gesperrten Ports irgendwo hinterlegen zu müssen, da sich diese nach maconeys Verständnis aus der Verarbeitung ergibt? Oder habe ich das falsch verstanden?
AD!
P.S.: Vielleicht gibt es doch eine Möglichkeit. Du könntest dir eine eigene Rules chain eröffnen (man iptables für die Details), die
1. Loggt
2. DROPt
und diese als Standardtarget hinterlegen. Normalerweise ist das ja DROP (oder, in seltenen Fällen) ACCEPT.
und das da geht leider auch ned:
iptables -A INPUT -m state --state INVALID -j LOG
(auch wenns linux schluckt)
och menno, des kann doch ned so schwer sein :-/
@thomas, du hast mich richtig verstanden...
ne statische liste bringt mir nix... und der linuxkernel muss doch wissen was gedroppt wird und was ned? :ugly:
Thomas Engelke
10.09.03, 15:13
Original geschrieben von maconey
... und der linuxkernel muss doch wissen was gedroppt wird und was ned?
Schon. Aber ein Paket wird für ihn auch erst zu einem DROP-Paket, wenn er innerhalb der Verarbeitungskette auf eine Regel stößt, die als Target DROP angibt. Es gibt keine Möglichkeit, eine Verarbeitung an genau diesem Punkt anzusetzen. Warum geht meine vorherige Methode nicht?
AD!
hehe, vielleicht noch ein böses kommentar zur motivation... unter windows mit fast jeder beliebigen firewall gehts... :-)
Thomas Engelke
10.09.03, 15:23
Ich klink' mich dann hier aus. Viel Spaß noch.
AD!
ich habs mal probiert wie thomas gemeint hat, aber so ganz funzt das leider nicht... :-/
#!/bin/sh
ipt=/sbin/iptables
#alle alten regeln löschen
$ipt --flush
$ipt -X
$ipt -N DEFAULT
$ipt -N LOGGER
#alles wird in der chain default bearbeitet
$ipt -A INPUT -j DEFAULT
#für localhost alles erlauben
$ipt -A DEFAULT -i lo -j ACCEPT
#bestehende verbindungen sind erlaubt
$ipt -A DEFAULT -m state --state RELATED,ESTABLISHED -j ACCEPT
#der rest geht zum logger
$ipt -A DEFAULT -j LOGGER
# in "LOGGER" wird alles protokolliert und gedropt
$ipt -A LOGGER -p tcp -m tcp -j LOG
$ipt -A LOGGER -p udp -m udp -j LOG
$ipt -A LOGGER -p icmp -m icmp --icmp-type ping -j LOG
$ipt -A LOGGER -p tcp -m tcp -j DROP
$ipt -A LOGGER -p udp -m udp -j DROP
$ipt -A LOGGER -p icmp -m icmp --icmp-type ping -j DROP
das sieht dann so aus:
17:05:14 [root@mac] /home/matze> iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DEFAULT all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DEFAULT (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
LOGGER all -- anywhere anywhere
Chain LOGGER (1 references)
target prot opt source destination
LOG tcp -- anywhere anywhere tcp LOG level warning
LOG udp -- anywhere anywhere udp LOG level warning
LOG icmp -- anywhere anywhere icmp echo-request LOG level warning
DROP tcp -- anywhere anywhere tcp
DROP udp -- anywhere anywhere udp
DROP icmp -- anywhere anywhere icmp echo-request
Original geschrieben von maconey
@thomas, du hast mich richtig verstanden...
ne statische liste bringt mir nix... und der linuxkernel muss doch wissen was gedroppt wird und was ned? :ugly:
nein, das weiss er eben nicht, weil der kernel nix droppt. droppen ist so ziemlich das schlechteste, was man bei einem paketfilter falsch machen kann. es gibt ein, zwei ausnahmen, zugegeben.
der ip-stack antwortet auf ein syn-paket an einen geschlossenen port entweder mit TCP-RST (tcp) oder icmp-dest-unreach (tcp,udp). du müsstest solche _ausgehenden_ pakete mitloggen. dann bekommst du das was du willst.
-j
dann werden die pakete aber doch verworfen, da sie nicht an irgendwelchen anwendungsprogramme bzw. ans betriebsystem weitergegeben werden... ;-)
hm, das probier ich glaub glatt mal...
danke!
hm, mit verbindungen die von ausserhalb kommen funktionierts bei tcp, udp weiss ich leider nicht sicher...
die regeln hab ich verwendet:
iptables -A OUTPUT -p icmp -j LOG
iptables -A OUTPUT -p tcp --tcp-flags ALL RST -j LOG
(bei icmp weiss ich leider nicht welchen typ ich verwenden muss)
und lokale verbindungen auf ungültige ports erwisch ich so auch ned... :-(
gibts da keine "saubere" lösung??
09:16:27 [root@mac] /home/matze/mldonkey/incoming> iptables -L -v
Chain INPUT (policy ACCEPT 87938 packets, 37M bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 106K packets, 18M bytes)
pkts bytes target prot opt in out source destination
14 1230 LOG icmp -- any any anywhere anywhere LOG level warning
71 2840 LOG tcp -- any any anywhere anywhere tcp flags:FIN,SYN,RST,PSH,ACK,URG/RST LOG level warning
also entweder versteh ich mein problem falsch oder ich hab die lösung: (ist ja auch ein weilchen her... :D)
...
[regeln die bestimmte verbindungen/ports/protokolle zulassen]
...
iptables -P INPUT DROP 1>&2
iptables -A INPUT -j LOG 1>&2
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.