Hallo Liste, Ich muss den Netzwerktraffic an einem Server messen. Das sollte täglich geschehen und zwar sollte es mir anzeigen, wieviel Traffic es heute gab. Zudem muss es über die Konsole laufen, da es weiterverarbeitet wird (Bei einer gewissen Grenze --> Warnmail). Kennt jemand ein solches Tool? Ich habe bereits an MRTG gedacht, aber das bringt mich nicht weiter. Grüsse Raffael
am Mittwoch, 19. Oktober 2005 12:35 schrieb Raffael Schmid:
Kennt jemand ein solches Tool? Ich habe bereits an MRTG gedacht, aber das bringt mich nicht weiter.
Schau mal auf http://www.intevation.de/iam nach. Vielleicht ist da ja was passendes dabei. Bye Michael -- Boykottiert Microsoft! Fenster gibt's auch bei OBI! ________________________________________________________________________ http://macbyte.info/ ICQ #151172379 http://dattuxi.de/
Hallo Raffael,
-----Ursprüngliche Nachricht----- Von: Raffael Schmid [mailto:raffael.schmid@yup.ch] Gesendet: Mittwoch, 19. Oktober 2005 12:36 An: SuSE Linux ML Betreff: Netzwerktraffic messen
Hallo Liste,
Ich muss den Netzwerktraffic an einem Server messen. Das sollte täglich geschehen und zwar sollte es mir anzeigen, wieviel Traffic es heute gab. Zudem muss es über die Konsole laufen, da es weiterverarbeitet wird (Bei einer gewissen Grenze --> Warnmail).
Kennt jemand ein solches Tool? Ich habe bereits an MRTG gedacht, aber das bringt mich nicht weiter.
ich denke da an vnstat. Für die Warnungsmail mußt Du Dir halt noch ein script schreiben und das Ganze mit einem Cronjob regelmäßig laufen lassen... -Peter
Moin, On Wed, 19 Oct 2005 12:35:53 +0200 Raffael Schmid <raffael.schmid@yup.ch> wrote:
Ich muss den Netzwerktraffic an einem Server messen. Das sollte täglich geschehen und zwar sollte es mir anzeigen, wieviel Traffic es heute gab. Zudem muss es über die Konsole laufen, da es weiterverarbeitet wird (Bei einer gewissen Grenze --> Warnmail).
Ganz simple Lösung: iptables. Einfach rules einrichten, die den zu messenden Traffic matchen und dann die Zähler (Byte und Pakete) auslesen. Also z.B.: # iptables -A INPUT -d 192.168.0.1 -j ACCEPT (match für Traffic an die lokale IP) # iptables -vxnZL INPUT (Anzeigen der Byte-Counter und Rückstellen auf 0) Gruß, -hwh
Hallo, Hans-Werner Hilse wrote:
Ganz simple Lösung: iptables. Einfach rules einrichten, die den zu messenden Traffic matchen und dann die Zähler (Byte und Pakete) auslesen.
Also z.B.:
# iptables -A INPUT -d 192.168.0.1 -j ACCEPT (match für Traffic an die lokale IP) # iptables -vxnZL INPUT (Anzeigen der Byte-Counter und Rückstellen auf 0)
tönt gut... aber: dn1:~ # iptables -vxnZL INPUT Bad argument `INPUT' Try `iptables -h' or 'iptables --help' for more information. ähm... was jetzt? Wenn ich es ohne Z (steht für rücksetzen...?) ausführe, funktioniert es irgendwie... komme aber da nicht draus...! dn1:~ # iptables -vxnL INPUT Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 9232 723003 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 90 12678 ACCEPT udp -- eth1 * 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED udp dpts:137:138 3 984 DROP all -- eth0 * 0.0.0.0/0 255.255.255.255 0 0 DROP all -- eth0 * 0.0.0.0/0 213.196.133.255 0 0 DROP all -- eth2 * 0.0.0.0/0 255.255.255.255 71 8455 DROP all -- eth2 * 0.0.0.0/0 192.168.7.255 7868 638867 input_ext all -- eth0 * 0.0.0.0/0 0.0.0.0/0 0 0 input_dmz all -- eth2 * 0.0.0.0/0 0.0.0.0/0 0 0 input_int all -- eth1 * 0.0.0.0/0 0.0.0.0/0 0 0 LOG all -- eth1 * 0.0.0.0/0 213.196.133.5 LOG flags 6 level 4 prefix `SFW2-IN-ACC_DENIED_INT ' 0 0 DROP all -- eth1 * 0.0.0.0/0 213.196.133.5 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- * * 0.0.0.0/0 213.196.133.5 hoffentlich könnt Ihr das so lesen... Was mache ich falsch? Danke für die Antworten! Grüsse rs
Hi, On Wed, 19 Oct 2005 13:17:04 +0200 Raffael Schmid <raffael.schmid@yup.ch> wrote:
# iptables -vxnZL INPUT (Anzeigen der Byte-Counter und Rückstellen auf 0) tönt gut... aber:
dn1:~ # iptables -vxnZL INPUT Bad argument `INPUT' Try `iptables -h' or 'iptables --help' for more information.
Mist bei mir auch, ich hatte mich da auf die Manpage verlassen. Dann musst du -Z und -L hintereinander machen (wobei du natürlich möglicherweise ein paar Byte verlierst, da die beiden Aktionen nicht in eins ausgeführt werden): # iptables -vxnL INPUT # iptables -Z INPUT
dn1:~ # iptables -vxnL INPUT Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 9232 723003 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 90 12678 ACCEPT udp -- eth1 * 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED udp dpts:137:138 3 984 DROP all -- eth0 * 0.0.0.0/0 255.255.255.255 0 0 DROP all -- eth0 * 0.0.0.0/0 213.196.133.255 0 0 DROP all -- eth2 * 0.0.0.0/0 255.255.255.255 71 8455 DROP all -- eth2 * 0.0.0.0/0 192.168.7.255 7868 638867 input_ext all -- eth0 * 0.0.0.0/0 0.0.0.0/0 0 0 input_dmz all -- eth2 * 0.0.0.0/0 0.0.0.0/0 0 0 input_int all -- eth1 * 0.0.0.0/0 0.0.0.0/0 0 0 LOG all -- eth1 * 0.0.0.0/0 213.196.133.5 LOG flags 6 level 4 prefix `SFW2-IN-ACC_DENIED_INT ' 0 0 DROP all -- eth1 * 0.0.0.0/0 213.196.133.5 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- * * 0.0.0.0/0 213.196.133.5
hoffentlich könnt Ihr das so lesen... Was mache ich falsch?
Hm, nix? Da steht doch schon alles drin?!? Allerdings recht verteilt, das kann aber schon sein, wenn man sich seine iptables nicht explizit zum "Traffic-Messen" eingerichtet hat (dann würde man wohl mit "iptables -N ACCEPT-count", "iptables -A ACCEPT-count -j ACCEPT" eine neue Table aufmachen und nur die auswerten. Statt "-j ACCEPT" kann man dann in allen anderen Regeln eben "-j ACCEPT-count" schreiben. Alternativ kannst du auch einfach die wichtigen Zeilen aus dem Ergebnis oben herausschneiden und summieren. Deine zweite Regel oben fängt ja den Samba-Traffic auf, wenn du also den analysieren willst, reicht dir ja diese Zeile. Ein warnendes cron-Skript sähe dann so aus: ---snip--- #!/bin/sh ADMINEMAIL=root@localhost TRAFFICMAX=5000000000 BYTECOUNT=$(iptables -vnxL INPUT | awk 'FNR==4 { print $2 }') iptables -Z INPUT if [ $BYTECOUNT -ge $TRAFFICMAX ]; then sendmail $ADMINEMAIL <<EOT Subject: Traffic Warning! Hi, wir haben mehr als $TRAFFICMAX bytes empfangen! . EOT fi ---snip--- kann man natürlich noch gut erweitern, aber so für die Idee schonmal... Gruß, -hwh
Hi, Hans-Werner Hilse wrote:
Mist bei mir auch, ich hatte mich da auf die Manpage verlassen. Dann musst du -Z und -L hintereinander machen (wobei du natürlich möglicherweise ein paar Byte verlierst, da die beiden Aktionen nicht in eins ausgeführt werden):
# iptables -vxnL INPUT # iptables -Z INPUT
[...]
Hm, nix? Da steht doch schon alles drin?!? Allerdings recht verteilt, das kann aber schon sein, wenn man sich seine iptables nicht explizit zum "Traffic-Messen" eingerichtet hat (dann würde man wohl mit "iptables -N ACCEPT-count", "iptables -A ACCEPT-count -j ACCEPT" eine neue Table aufmachen und nur die auswerten. Statt "-j ACCEPT" kann man dann in allen anderen Regeln eben "-j ACCEPT-count" schreiben.
Wenn ich das mache... was muss ich da genau an den tables ändern? Ich meine damit, muss ich die anderen Regeln auch ändern, damit die den Traffic noch durch ACCEPT-count leiten? Die Tables werden von SuSEfirewall2 erstellt...
Alternativ kannst du auch einfach die wichtigen Zeilen aus dem Ergebnis oben herausschneiden und summieren. Deine zweite Regel oben fängt ja den Samba-Traffic auf, wenn du also den analysieren willst, reicht dir ja diese Zeile.
ähm, es geht nicht um den Samba-Traffic.... sondern um den Gateway-Traffic. Der Server ist GW für ein Privates Netz, dass nur begrenzten Traffic ins Internet hat.
Ein warnendes cron-Skript sähe dann so aus: [...] Dieses Script werde ich sicher benützen:-D Danke! Aber das nimmt jetzt nur den Samba-Traffic, oder?
So long Danke! raffael
Moin, On Wed, 19 Oct 2005 14:16:54 +0200 Raffael Schmid <raffael.schmid@yup.ch> wrote:
Hm, nix? Da steht doch schon alles drin?!? Allerdings recht verteilt, das kann aber schon sein, wenn man sich seine iptables nicht explizit zum "Traffic-Messen" eingerichtet hat (dann würde man wohl mit "iptables -N ACCEPT-count", "iptables -A ACCEPT-count -j ACCEPT" eine neue Table aufmachen und nur die auswerten. Statt "-j ACCEPT" kann man dann in allen anderen Regeln eben "-j ACCEPT-count" schreiben.
Wenn ich das mache... was muss ich da genau an den tables ändern? Ich meine damit, muss ich die anderen Regeln auch ändern, damit die den Traffic noch durch ACCEPT-count leiten? Die Tables werden von SuSEfirewall2 erstellt...
Puh, keine Ahnung, ich bau meine iptables für gewöhnlich selbst. Ich würd's dann, wenn es so geht, einfach so lassen. Aber lies weiter unten...
Alternativ kannst du auch einfach die wichtigen Zeilen aus dem Ergebnis oben herausschneiden und summieren. Deine zweite Regel oben fängt ja den Samba-Traffic auf, wenn du also den analysieren willst, reicht dir ja diese Zeile.
ähm, es geht nicht um den Samba-Traffic.... sondern um den Gateway-Traffic. Der Server ist GW für ein Privates Netz, dass nur begrenzten Traffic ins Internet hat.
Hm, dann sind wir mit INPUT eh in der falschen Tabelle. Dann müssten wir uns FORWARD angucken. Und ich hab mich schon über den seltsamen Regelsatz in INPUT gewundert...
Ein warnendes cron-Skript sähe dann so aus: [...] Dieses Script werde ich sicher benützen:-D Danke! Aber das nimmt jetzt nur den Samba-Traffic, oder?
Genau, es macht folgendes (und du müsstest das für dich dann anpassen): in einer Variable (BYTECOUNT) wird der Traffic gespeichert. Das geht so: iptables gibt die Liste der Regeln in INPUT (bald FORWARD...) aus (-L, und zwar nur numerisch, -n, und in vollen Zahlen, -x, mit ausführlicher Anzeige, -v). Das kleine awk-script prüft, ob es in der 4. Zeile ist und falls dem so ist, gibt es das zweite "Feld" aus. Das ist bei iptables der Byte-Zähler. [ ... -ge ... ] checkt, ob der Wert links größer oder gleich (greater/equal) als der rechte ist - es ist also ein ">=". Der Rest macht nicht mehr, als einen heredoc-String in "sendmail" zu pipen. Insgesamt ein lustiger Bastelkasten, der mir mal wieder den Spaß am Skriptbasteln und man-Page lesen zurückgebracht hat... Gruß, -hwh
Hallo,
ähm, es geht nicht um den Samba-Traffic.... sondern um den Gateway-Traffic. Der Server ist GW für ein Privates Netz, dass nur begrenzten Traffic ins Internet hat.
Hm, dann sind wir mit INPUT eh in der falschen Tabelle. Dann müssten wir uns FORWARD angucken. Und ich hab mich schon über den seltsamen Regelsatz in INPUT gewundert.. :-) dann vergessen wir mein zur gleichen Zeit erstelltes Mail:-P
Ich hab mir jetzt mal FORWARD ausgeben lassen: dn1:~ # iptables -vnxL FORWARD Chain FORWARD (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 382 22580 TCPMSS tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp flags:0x06/0x02 TCPMSS clamp to PMTU 0 0 ACCEPT all -- eth1 eth1 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- eth0 eth0 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- eth2 eth2 0.0.0.0/0 0.0.0.0/0 2073 1328061 forward_ext all -- eth0 * 0.0.0.0/0 0.0.0.0/0 2124 459695 forward_dmz all -- eth2 * 0.0.0.0/0 0.0.0.0/0 0 0 forward_int all -- eth1 * 0.0.0.0/0 0.0.0.0/0 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 6 level 4 prefix `SFW2-FORWARD-ERROR ' Wenn wir mein Mail doch nicht ganz vergessen, müsste ich hier die "forward_ext", "forward_dmz" und "forward_int" zusammenzählen? Grüsse Raffael
Hallo nochmals, da ich ja so mitteilungsfreudig bin... teile ich euch noch ein paar Gedanken mit: Ich habe jetzt FORWARD und INPUT zurückgesetzt: $ iptables -Z INPUT && iptables -Z FORWARD Danach habe ich mir beide ausgeben lassen: $ iptables -vnxL FORWARD && iptables -vnxL INPUT Da ich per SSH auf dem Server arbeite zeigt nun INPUT einen Traffic an aber FORWARD nicht. Also muss ich an INPUT messen, da ich ja den Upstream auch zahlen muss. Aber, wenn ich nun INPUT messe, dann messe ich den ganzen LAN-Traffic (samba, ping, dhcp) auch. Das erhöht aber das Ergebnis um Bytes die ich gar nicht zahlen muss. --> Es muss eine Regel her, die wirklich nur das misst, was von eth0 <--> eth1, eth0 <--> eth2 läuft. Stimmt diese Überlegung? - Ich hoffe es...! Ich werde jetzt mal in dieser Richtung weiterprobieren:-P Ausser es kann mir gleich jemand sagen wie diese Regel aussieht:-D? Grüsse Raffael
Hallo, On Wed, 19 Oct 2005 17:16:20 +0200 Raffael Schmid <raffael.schmid@yup.ch> wrote:
Ich habe jetzt FORWARD und INPUT zurückgesetzt:[...] Danach habe ich mir beide ausgeben lassen:[...]
Da ich per SSH auf dem Server arbeite zeigt nun INPUT einen Traffic an aber FORWARD nicht.
Naja, dann hast du auch keine Routing-Situation: Du machst SSH nur im lokalen Netz und vom Server eine neue Verbindung nach außen. Da ist "FORWARD" nicht im Spiel, das wird nur bei Sprüngen von einem Interface zum anderen benutzt - also, wenn ein Paket durchgereicht wird. Mit "FORWARD" bist du also richtig. Dort schlagen sowohl ein- wie ausgehende Pakete auf, die geroutet werden. Nach der Tabelle, die du schon in der Mail hattest, wird da aber eh erstmal interface-abhängig auf nochmal andere Tabellen weitergeleitet. Schau dir mal $ iptables -vnL an, dort wohl am ehesten die forward_*-Tabellen. Gruß, Hans-Werner
Hi, Hans-Werner Hilse wrote:
Ich habe jetzt FORWARD und INPUT zurückgesetzt:[...] Danach habe ich mir beide ausgeben lassen:[...]
Da ich per SSH auf dem Server arbeite zeigt nun INPUT einen Traffic an aber FORWARD nicht.
Naja, dann hast du auch keine Routing-Situation: Du machst SSH nur im lokalen Netz und vom Server eine neue Verbindung nach außen. Da ist "FORWARD" nicht im Spiel, das wird nur bei Sprüngen von einem Interface zum anderen benutzt - also, wenn ein Paket durchgereicht wird.
ok, stimmt:-)
Mit "FORWARD" bist du also richtig. Dort schlagen sowohl ein- wie ausgehende Pakete auf, die geroutet werden. Nach der Tabelle, die du schon in der Mail hattest, wird da aber eh erstmal interface-abhängig auf nochmal andere Tabellen weitergeleitet.
Schau dir mal $ iptables -vnL an, dort wohl am ehesten die forward_*-Tabellen. Hab ich getan. Es gibt verschiedene Regeln für die Portforwardings (da könnte ich ja auch noch den Traffic an den verschiedenen Ports messen:-P).
aber es gibt bei jeder Tabelle folgendes: 0 0 ACCEPT all -- * eth0 0.0.0.0/0 0.0.0.0/0 state NEW,RELATED,ESTABLISHED 0 0 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED Also messe ich nun bei jeder Tabelle diese zwei Regeln mit meinem Script. Ich mache das per awk, das ist aber nicht sehr variabel, da ich bei einem neuen PF mein Script ändern muss.... Gibt es einen Befehl um mir nur gerade diese zwei Regeln anzeigen zu lassen? Folgender Befehl ist wohl nicht ganz das Gelbe vom Ei....? $ iptables -vnxL forward_int | grep ACCEPT | grep all | awk '{print $2}' && iptables -vnxL forward_ext | grep ACCEPT | grep all | awk '{print $2}' && iptables -vnxL forward_dmz | grep ACCEPT | grep all | awk '{print $2}' Grüsse Raffael --------------------------------------------------- #!/bin/sh ADMINEMAIL=raffael.schmid@yup.ch TRAFFICMAX=50000000000000 INPUT=(`iptables -vnxL forward_ext | awk 'FNR==8 { print $2 }'` `iptables -vnxL forward_ext | awk 'FNR==9 { print $2 }'` `iptables -vnxL forward _dmz | awk 'FNR==7 { print $2 }'` `iptables -vnxL forward_dmz | awk 'FNR==8 { print $2 }'` `iptables -vnxL forward_int | awk 'FNR==7 { print $2 }'` `iptables -vnxL forward_int | awk 'FNR==8 { print $2 }'`) BYTECOUNT=$((${INPUT[0]}+${INPUT[1]}+${INPUT[2]}+${INPUT[3]}+${INPUT[4]}+${INPUT[5]})) iptables -Z forward_ext iptables -Z forward_int iptables -Z forward_dmz echo "Total:" $((BYTECOUNT/1024/1024)) "MByte/s" if [ $BYTECOUNT -ge $TRAFFICMAX ] then `whereis mail | cut -d " " -f2` $ADMINEMAIL -s "Traffic Warning!" << EOT Achtung! Der aktuelle Datendurchsatz von heute betraegt $BYTECOUNT Bytes ($(($BYTECOUNT/1024)) KByte)! Damit wurde die erste Warnstufe von $TRAFFICMAX Bytes erreicht! EOT fi exit
Hallo, On Thu, 20 Oct 2005 09:22:51 +0200 Raffael Schmid <raffael.schmid@yup.ch> wrote:
Ich mache das per awk, das ist aber nicht sehr variabel, da ich bei einem neuen PF mein Script ändern muss.... Gibt es einen Befehl um mir nur gerade diese zwei Regeln anzeigen zu lassen? Folgender Befehl ist wohl nicht ganz das Gelbe vom Ei....? $ iptables -vnxL forward_int | grep ACCEPT | grep all | awk '{print $2}' && iptables -vnxL forward_ext | grep ACCEPT | grep all | awk '{print $2}' && iptables -vnxL forward_dmz | grep ACCEPT | grep all | awk '{print $2}'
Och, naja, das grep ist eigentlich recht überflüssig: Awk ist ja eine pattern-matching-Sprache, hat daher die entsprechende Funktionalität schon eingebaut. Im Prinzip könnte man auch das Addieren und Mailverschicken mit awk machen. Z.B. (ungetestet): (iptables -vnxL forward_int; iptables -vnxL forward_ext; iptables -vnxL forward_dmz) | awk ' BEGIN { BYTES=0 } /\<ACCEPT\>/ { if ( $6 == "eth0" || $7 == "eth0" ) BYTES+=$2 } END { if ( BYTES["eth0"] > 5000000000 ) { print "Subject: Traffic-Warnung\n\nAchtung, auf Interface eth0 haben wir mehr als " BYTES["eth0"] " Traffic!" | sendmail root@localhost } }' erledigt das meiste gleich in awk (hier noch mit Check auf das richtige Interface in den Feldern 6 oder 7). Sogar das Auslesen der iptables ließe sich in awk machen (naja, also das Aufrufen von iptables, meine ich). Aber das geht dann langsam zu weit. Aufgrund solcher Basteleien lernt man aber ganz schnell awk. Es gibt kaum besseres, um in Textform vorliegende gleichartige Daten zu verarbeiten. Die man-Page von awk ist übrigens kurz und knapp, enthält aber alles wichtige. Ein Ausdruck derselben schadet also nie was. Gruß, -hwh
Hallo, ich habe nun ein bischen herumprobiert und mittlerweile herausgefunden, dass "input_dmz","input_int" und "input_ext" den hereinkommenden Traffic an den einzelnen Netzwerkkarten messen. Wenn man diese Angaben zusammenzählt ergibt das das Ganze, oder? Also zählt nun mein Script die bytes von diesen Karten zusammen und je nach dem gibt es eine Mail. Wenn ich einen Denkfehler gemacht habe, schreibt mir doch das bitte:-P Die Rechnerei stimmt leider nicht ganz auf die Bytes genau, da zwischen den Abfragen immer Traffic entsteht... Danke für die Antworten! Grüsse Raffael ------------------------------------------------------- der Script, "leicht" abgeändert: dn1:~ # more traffic.sh #!/bin/sh ADMINEMAIL=raffi@yup.ch TRAFFICMAX=50000000 BYTECOUNT=$(($(iptables -vnxL INPUT | awk 'FNR==9 { print $2 }')+$(iptables -vnxL INPUT | awk 'FNR==10 { print $2 }')+$(iptables -vnxL INPUT | a wk 'FNR==11 { print $2 }'))) echo "input_ext:" `iptables -vnxL INPUT | awk 'FNR==9 { print $2 }'` echo "input_dmz:" `iptables -vnxL INPUT | awk 'FNR==10 { print $2 }'` echo "input_int:" `iptables -vnxL INPUT | awk 'FNR==11 { print $2 }'` iptables -Z INPUT echo "Total:" $BYTECOUNT if [ $BYTECOUNT -ge $TRAFFICMAX ] then `whereis mail | cut -d " " -f2` $ADMINEMAIL -s "Traffic Warning!" << EOT Achtung! Der aktuelle Datendurchsatz von heute betraegt $BYTECOUNT Bytes ($(($BYTECOUNT/1024)) KByte)! Damit wurde die erste Warnstufe von $TRAFFICMAX Bytes erreicht! EOT fi exit
participants (4)
-
Hans-Werner Hilse
-
Michael Raab
-
peter grotz
-
Raffael Schmid