Mikrotik - Limitierung d. gesamten Traffics
Guten Abend zusammen,
ich habe folgendes Problem und finde keinen Lösungsansatz im Netz.
Ich habe verschiedene externe ip adressen die zu mir connecten - (ftp server etc... ) nun meine Frage: wie kann ich jeder einzelnen IP eine Limitierung des Traffics setzen : Sprich:
User 1 soll maximal 10 MB/ Tag an Traffic verursachen. (danach soll er keine Daten mehr bekommen von mir bis zum nächsten Tag.)
User 2 soll maximal 2 MB/ Tag an Traffic verursachen. (danach soll er keine Daten mehr bekommen von mir bis zum nächsten Tag.)
Ist dies möglich ? Hatte nur was über Hotspot gelesen/gesehen aber damit habe ich noch nie was machen müssen... finde nur die Limitierung der TrafficRate... aber nicht des Volumes ...
viele Grüße
lars
ich habe folgendes Problem und finde keinen Lösungsansatz im Netz.
Ich habe verschiedene externe ip adressen die zu mir connecten - (ftp server etc... ) nun meine Frage: wie kann ich jeder einzelnen IP eine Limitierung des Traffics setzen : Sprich:
User 1 soll maximal 10 MB/ Tag an Traffic verursachen. (danach soll er keine Daten mehr bekommen von mir bis zum nächsten Tag.)
User 2 soll maximal 2 MB/ Tag an Traffic verursachen. (danach soll er keine Daten mehr bekommen von mir bis zum nächsten Tag.)
Ist dies möglich ? Hatte nur was über Hotspot gelesen/gesehen aber damit habe ich noch nie was machen müssen... finde nur die Limitierung der TrafficRate... aber nicht des Volumes ...
viele Grüße
lars
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 301395
Url: https://administrator.de/contentid/301395
Ausgedruckt am: 23.11.2024 um 04:11 Uhr
5 Kommentare
Neuester Kommentar
Moin,
das kannst du auf dem Mikrotik mit Queues und einem Skript machen.
Das Script prüft regelmässig pro Queue die aufgelaufene Menge an Bytes (lässt sich abfragen) und bei Überschreiten deines definierten Wertes setzt du im Skript einfach eine Firewall-Rule die die IP blockt. Um Mitternacht lässt du dann ein Skript laufen was die Counter der Queues zurücksetzt und die Firewall regeln wieder raus nimmt. Feddich.
http://wiki.mikrotik.com/wiki/Manual:Scripting
Gruß jodel32
das kannst du auf dem Mikrotik mit Queues und einem Skript machen.
Das Script prüft regelmässig pro Queue die aufgelaufene Menge an Bytes (lässt sich abfragen) und bei Überschreiten deines definierten Wertes setzt du im Skript einfach eine Firewall-Rule die die IP blockt. Um Mitternacht lässt du dann ein Skript laufen was die Counter der Queues zurücksetzt und die Firewall regeln wieder raus nimmt. Feddich.
http://wiki.mikrotik.com/wiki/Manual:Scripting
Gruß jodel32
Hallo Lars,
ich habe mir da mal zwei Skripte für den Mikrotik geschrieben. Das erste lässt man in regelmäßigen Intervallen laufen und es checkt dann den aufgelaufenen Traffic von einem/mehreren "Simple Queue(s)". Wenn der kumulierte Traffic von Up- und Download in diesen Queue(s) ein bestimmtes Maximum übersteigt wird die externe IP (Target-IP des Queue) in eine Firewall-Blocklist eingetragen. Eine entsprechende Firewall-Rule verweist auf diese Liste und blockt dann diese IPs.
Das zweite Skript lässt man um Mitternacht einmal laufen. Es entfernt dann die IPs von der Blockliste und setzt die Counter der Queues zurück, so dass die Hosts sich wieder verbinden können.
Für jede externe IP die du du limitieren willst erstellst du einen "Simple Queue" und stellst die maximale Geschwindigkeit auf einen definierten Wert (bitte nicht auf "Unlimited" stehen lassen). Den Queues gibst du eindeutige Namen.
Hier sind die Skripte:
Eine Firewall-Regel die den Traffic entsprechend für die IPs blockiert könnte dann so aussehen:
Die Position der Regel ist natürlich zu beachten. Wenn du Connection-Tracking auf deiner Firewall betreibst (also mit Related Regeln arbeitest) und willst das der Traffic für die IP welche Ihr Limit überschreitet, abrupt gekappt werden soll, muss die Regel natürlich vor den "related Regeln" positioniert werden. Willst du das nicht dann kann der User so lange weiter Daten übertragen bis er die Verbindung trennt. Nach dem Connection-Tracking Timeout kommt er dann aber nicht mehr rein. Diese Variante hätte den Vorteil für den Client das er eben noch die Chance bekommt seine laufenden Übertragungen zu beenden, aber natürlich wird dabei der Traffic überschritten. Da musst du also entscheiden was für dich relevant ist.
Hoffe das hilft dir weiter.
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
p.s. Es gibt hier eine Kategorie , du kannst deine Frage besser dort rein schieben, die Kategorie passt besser.
ich habe mir da mal zwei Skripte für den Mikrotik geschrieben. Das erste lässt man in regelmäßigen Intervallen laufen und es checkt dann den aufgelaufenen Traffic von einem/mehreren "Simple Queue(s)". Wenn der kumulierte Traffic von Up- und Download in diesen Queue(s) ein bestimmtes Maximum übersteigt wird die externe IP (Target-IP des Queue) in eine Firewall-Blocklist eingetragen. Eine entsprechende Firewall-Rule verweist auf diese Liste und blockt dann diese IPs.
Das zweite Skript lässt man um Mitternacht einmal laufen. Es entfernt dann die IPs von der Blockliste und setzt die Counter der Queues zurück, so dass die Hosts sich wieder verbinden können.
Für jede externe IP die du du limitieren willst erstellst du einen "Simple Queue" und stellst die maximale Geschwindigkeit auf einen definierten Wert (bitte nicht auf "Unlimited" stehen lassen). Den Queues gibst du eindeutige Namen.
Hier sind die Skripte:
Skript 1 checkt den aufgelaufenen Traffic in den Queues so lange die IP des Queues noch nicht auf der Blockliste steht (Regelmässig ausführen lassen z.B. alle 20 Sekunden je nach Genauigkeitsanforderung für die Limitierung)
# Queue Namen und deren zugehöriges Maximum an zulässigen Bytes
:local QUEUES {"queue1"=10000000;"queue2"=2000000}
# Name der Block Address-List
:local BLOCKLISTNAME "MyBlocklist"
# ------------
:foreach qname,maxbytes in=$QUEUES do={
:local qnum [/queue simple find name="$qname"]
:if ([:len $qnum] > 0) do={
:local qtarget [:pick [:tostr [/queue simple get $qnum target]] 0 [:find [:tostr [/queue simple get $qnum target]] "/" 0]]
:if ([:len [/ip firewall address-list find list="$BLOCKLISTNAME" address="$qtarget"]] = 0) do={
:local bytes [/queue simple get $qnum bytes]
:local bytesUP [:tonum [:pick $bytes 0 [:find $bytes "/" 0]]]
:local bytesDOWN [:tonum [:pick $bytes ([:find $bytes "/" 0]+1) 50]]
:local bytesTOTAL ($bytesUP + $bytesDOWN)
:if ($bytesTOTAL > $maxbytes) do={
/log info message="Queue ->$qname<- exceeded max bytes ($[($bytesTOTAL / 1024)] KB), adding target '$qtarget' to blocklist."
/ip firewall address-list add list="$BLOCKLISTNAME" address=$qtarget
}
} else={
:put "Target already in blocklist, skipping queue check."
}
} else={
/log warning message="A queue with the name '$qname' was not found!"
}
}
Skript 2 entfernt die IPs aus der Blockliste und setzt die Zähler aller angegebenen Queues zurück (z.B. immer um Mitternacht ausführen lassen)
# reset queue limits for next day
# -----------------------------------------------
# Namen der Queues im Array angeben
:local QUEUES [:toarray ("queue1","queue2")]
# Name der Block Address-List
:local BLOCKLISTNAME "MyBlocklist"
# -----------------------------------------------
# Entferne alle IPs aus der Addressliste
/ip firewall address-list remove [find list="$BLOCKLISTNAME"]
# counter reset der Queues
:foreach qname in=$QUEUES do={/queue simple reset-counters "$qname"}
Eine Firewall-Regel die den Traffic entsprechend für die IPs blockiert könnte dann so aussehen:
/ip firewall filter add chain=input action=reject reject-with=icmp-host-prohibited src-address-list="MyBlocklist"
Hoffe das hilft dir weiter.
Grüße Uwe
Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate
p.s. Es gibt hier eine Kategorie , du kannst deine Frage besser dort rein schieben, die Kategorie passt besser.
@colinardo Schön kommt sofort in meine Mikrotik-Script-Bibliothek TOP!!
@lars2015
Wenns das dann war, den Beitrag noch auf gelöst setzen, wenn keine Rückmeldung mehr kommt.
Gruß jodel32
@lars2015
Wenns das dann war, den Beitrag noch auf gelöst setzen, wenn keine Rückmeldung mehr kommt.
Gruß jodel32
Zitat von @lars2015:
Kann es sein, das im ersten Script in Zeile 17 bei "list=block" nicht "block" sondern "MyBlocklist" stehen muss in dem Beispiel ?
Sorry da gehört list="$BLOCKLISTNAME" hin, das hatte ich vergessen auszutauschen.Kann es sein, das im ersten Script in Zeile 17 bei "list=block" nicht "block" sondern "MyBlocklist" stehen muss in dem Beispiel ?
- ich habe die Scripte gestern mal schnell ausprobiert und die Bytes wurden auch schön zusammen gezählt und anschließend der User auch in die MyBlocklist eingetragen aber die Firewall-Regel (die ganz nach oben von mir geschoben wurde) hat mir den User nicht direkt gekappt (er hatte einen Video-Stream von meinem Server gestartet, der dann fleißig weiter lief.(hab auch lang genug gewartet, um auszuschliessen das der User was gepuffert hatte) Ich werde dementsprechend meine Einstellungen nochmal überprüfen müssen, da ich nicht sicher ausschließen kann, das sich vielleicht woanders ein Fehler eingeschlichen hat und mich erneut melden... bin ja mit dem Mikrotik hinter einem Telekom Router NAT etc.
Vermutlich einfach noch ein Interpretationsfehler von deiner Seite.Das festzustellen kann hier nur das posten deiner Queue und Firewall Config klären.
Das doppelte NAT stellt hier kein Hindernis dar, ist ja nur ein DST-NAT vom T-COM Router in Richtung MK, Source-Address bleibt dann ja gleich.
Grüße Uwe