Ausländische (Sonder-)Rufnummern sperren klappt nicht

peterohms

Neuer User
Mitglied seit
18 Mai 2008
Beiträge
13
Punkte für Reaktionen
0
Punkte
0
in meiner angefügten extensions.conf (auszug) habe ich meinen sipgate account konfiguriert.
dabei habe ich das ZIEL teure rufnummern in SPERRLISTEN aufzunehmen und somit auszusperren. mit deutschen
rufnummern z.b. 0900 gelingt mir dieses in meiner konstruktion, man bekommt bei anwahl die ansage "access denied".

anders verhält es sich bei ausländischen rufnummern, hier lassen sich diese nummern trotz SPERRLISTE problemos
wählen. leider finde ich den fehler nicht, die angewählten rufnummern aus der 0043-sperrliste sollten auch zu
"access denied" führen.

kann mir jemand helfen und meine konstruktion verbessern (reparieren)?
danke peter

..................................................................................................
Code:
[sipgate] 

;# gesperrt:                                                                             ; teure nummern werden auf die sperrliste gesetzt

;# Sperrliste Beispiel Deutschland, diese nummern werden wirkungsvoll gesperrt 

   exten => _9998118.,1,GoTo(120)                        ; hier wird die nummer 118 gesperrt  
   exten => _9998090.,1,GoTo(120)                        ; hier wird die nummer 090 gesperrt 
   exten => _99980700.,1,GoTo(120)                       ; hier wird die nummer 070 gesperrt
   exten => _99980701.,1,GoTo(120)                       ; hier wird die nummer 0701 gesperrt
   exten => _9998032.,1,GoTo(120)                        ; hier wird die nummer 032 gesperrt
   exten => _999801.,1,GoTo(120)                         ; hier telefonieren ueber 01.. gesperrt (handy etc.)


;# oe 0043.. Sperrliste Beispiel oesterreich, diese nummern werden leider NICHT gesperrt!!! 
 
   exten => _9998004306.,1,GoTo(120)                     ; hier wird die nummer 004306 gesperrt
   exten => _9998004309.,1,GoTo(120)                     ; hier wird die nummer 004309 gesperrt 
   exten => _99980043081.,1,GoTo(120)                    ; hier wird die nummer 0043081 gesperrt
   exten => _99980043082.,1,GoTo(120)                    ; hier wird die nummer 0043082 gesperrt
   exten => _999800436.,1,GoTo(120)                      ; hier wird die nummer 00436 gesperrt  
   exten => _999800439.,1,GoTo(120)                      ; hier wird die nummer 00439 gesperrt 
   exten => _9998004381.,1,GoTo(120)                     ; hier wird die nummer 004381 gesperrt
   exten => _9998004382.,1,GoTo(120)                     ; hier wird die nummer 004382 gesperrt   
   exten => _9998004380.,1,GoTo(120)                     ; hier wird die nummer 004380 gesperrt 

;# ..................................................................................................

;# liste der länder über die telefoniert werden darf, beispiel oesterreich:

  exten => _99980043.,1,GoTo(10)                         ; oesterreich
; exten .....
; exten .....
 
;# ..................................................................................................

;# Der Waehlvorgang:

   exten => _9998X.,1,GoTo(120)                           ; verbietet alles, was nicht erwaehnt wurde
   exten => _99980[2-9].,1,GoTo(10)                       ; telefonieren ueber 02..- 09.. wird erlaubt
  
   exten => _9998.,10,Set(CALLERID(name)=anonymous)
   exten => _9998.,11,Set(LANGUAGE()=de)                  ; hier wird nur die deutsche Sprache aktiviert (nicht fuer's Telefonat) 
   exten => _9998.,12,Set(GROUP()=sipgate_anrufe)         ; der Anruf wird der Gruppe sipgate_anrufe zugeordnet
   exten => _9998.,13,NoOp(${GROUP_COUNT()})              ; hier wird nur angezeigt, wie viele Teilnehmer z.Zt.
                                                          ; in der Gruppe sipgate_anrufe sind
   exten => _9998.,14,GoToIf($[${GROUP_COUNT()} > 2]?120) ; falls vorher schon jemand mit sipgate telefonierte sind nun zwei ;1
                                                          ; Teilnehmer in der Gruppe sipgate_anrufe
                                                          ; da 2 > 1, springen wir nicht zur naechsten Extensions sondern zu 120
   exten => _9998.,15,NoOp                                ; hier passiert nichts (frei fuer Veraenderungen)
   exten => _9998.,16,Dial(SIP/${EXTEN:4}@sipgate,180,)   ; ueber sipgate wird raustelefoniert
   exten => _9998.,17,Hangup                              ; ordentliches Gespraechsende
   exten => _9998.,117,Busy()                             ; falls zu 100+n gesprungen wird
   exten => _9998.,120,Playback(accessdenied)             ; dieser text wird angesagt, wenn ueber sipgate schon telefoniert wird
   exten => _9998.,121,Busy()                             ; dann wird ein Besetzt ausgegeben
   
;# ..................................................................................................
 
Das Problem dürfte sein, das Asterisk die Extensions in einer anderen Reihenfolge Verarbeitet, als der, die Du erwartest (_99980043. zieht vor _9998004306, etc). Lösen kann man das, indem man den Kontext aufteilt und die Extensions, die zuerst geprüft werden sollen, in einen include-Kontext packt, z.B. so:

Code:
[denied]
; Hier wird ein unerlaubtes Rufziel gehandelt
   exten => s,1,Playback(accessdenied)             ; dieser text wird angesagt, wenn ueber sipgate schon telefoniert wird
   exten => s,2,Busy()                             ; dann wird ein Besetzt ausgegeben

[sperrnummern]
; Hier werden alle Pattern aufgeführt, die (für ein einzelnes, an sich erreichbares Land) verboten werrden sollen
;# gesperrt:                                                                             ; teure nummern werden auf die sperrliste gesetzt

;# Sperrliste Beispiel Deutschland, diese nummern werden wirkungsvoll gesperrt 

   exten => _9998118.,1,GoTo(denied,s,1)                        ; hier wird die nummer 118 gesperrt  
   exten => _9998090.,1,GoTo(denied,s,1)                         ; hier wird die nummer 090 gesperrt 
   exten => _99980700.,1,GoTo(denied,s,1)                        ; hier wird die nummer 070 gesperrt
   exten => _99980701.,1,GoTo(denied,s,1)                       ; hier wird die nummer 0701 gesperrt
   exten => _9998032.,1,GoTo(denied,s,1)                        ; hier wird die nummer 032 gesperrt
   exten => _999801.,1,GoTo(denied,s,1)                         ; hier telefonieren ueber 01.. gesperrt (handy etc.)


;# oe 0043.. Sperrliste Beispiel oesterreich, diese nummern werden leider NICHT gesperrt!!! 
 
   exten => _9998004306.,1,GoTo(denied,s,1)                      ; hier wird die nummer 004306 gesperrt
   exten => _9998004309.,1,GoTo(denied,s,1)                      ; hier wird die nummer 004309 gesperrt 
   exten => _99980043081.,1,GoTo(denied,s,1)                     ; hier wird die nummer 0043081 gesperrt
   exten => _99980043082.,1,GoTo(denied,s,1)                    ; hier wird die nummer 0043082 gesperrt
   exten => _999800436.,1,GoTo(denied,s,1)                      ; hier wird die nummer 00436 gesperrt  
   exten => _999800439.,1,GoTo(denied,s,1)                      ; hier wird die nummer 00439 gesperrt 
   exten => _9998004381.,1,GoTo(denied,s,1)                      ; hier wird die nummer 004381 gesperrt
   exten => _9998004382.,1,GoTo(denied,s,1)                      ; hier wird die nummer 004382 gesperrt   
   exten => _9998004380.,1,GoTo(denied,s,1)                      ; hier wird die nummer 004380 gesperrt 

[sipgate] 
include sperrrnummern;
;# ..................................................................................................

;# liste der länder über die telefoniert werden darf, beispiel oesterreich:

   exten => _99980[2-9].,1,GoTo(10)                       ; telefonieren ueber 02..- 09.. wird erlaubt
  exten => _99980043.,1,GoTo(10)                         ; oesterreich
; exten .....
; exten .....
 
;# ..................................................................................................

;# Der Waehlvorgang:

   exten => _9998X.,1,GoTo(denied,s,1)                            ; verbietet alles, was nicht erwaehnt wurde und in [sperrnummern] noch nicht abgefangen war
  
   exten => _9998.,10,Set(CALLERID(name)=anonymous)
   exten => _9998.,11,Set(LANGUAGE()=de)                  ; hier wird nur die deutsche Sprache aktiviert (nicht fuer's Telefonat) 
   exten => _9998.,12,Set(GROUP()=sipgate_anrufe)         ; der Anruf wird der Gruppe sipgate_anrufe zugeordnet
   exten => _9998.,13,NoOp(${GROUP_COUNT()})              ; hier wird nur angezeigt, wie viele Teilnehmer z.Zt.
                                                          ; in der Gruppe sipgate_anrufe sind
   exten => _9998.,14,GoToIf($[${GROUP_COUNT()} > 2]?120) ; falls vorher schon jemand mit sipgate telefonierte sind nun zwei ;1
                                                          ; Teilnehmer in der Gruppe sipgate_anrufe
                                                          ; da 2 > 1, springen wir nicht zur naechsten Extensions sondern zu 120
   exten => _9998.,15,NoOp                                ; hier passiert nichts (frei fuer Veraenderungen)
   exten => _9998.,16,Dial(SIP/${EXTEN:4}@sipgate,180,)   ; ueber sipgate wird raustelefoniert
   exten => _9998.,17,Hangup                              ; ordentliches Gespraechsende
   exten => _9998.,117,Busy()                             ; falls zu 100+n gesprungen wird

   
;# ..................................................................................................

Probiers mal, Österreich sollte jetzt nur noch in den Nummernbereichen anwählbar sein, die Du nicht in [sperrnummern] drin hast.
 
Vielen Dank für die Mühe und den Einsatz, das war die Lösung. Manchmal sieht man den Wald voller Bäume nicht. peter
 
Kannst du vielleicht nochmal schauen? Scheint doch nicht so zu klappen wie es soll. Hier die aktuellen Auschnitte aus der extensions.conf (ist aber stark gekürzt, nur um das Beispielhaft zu zeigen):

Code:
[denied]
; Hier wird ein unerlaubtes Rufziel gehandelt
   exten => s,1,Playback(accessdenied)             ; dieser text wird angesagt, wenn ueber sipgate schon telefoniert wird
   exten => s,2,Busy()                             ; dann wird ein Besetzt ausgegebe

[sperrnummern-deu]
   exten => _9998090.,1,GoTo(denied,s,1)                         ; hier wird die nummer 090 gesperrt 

[sperrnummern-int]
   exten => _99980041090.,1,GoTo(denied,s,1)                    ; hier wird die nummer 0041090 gesperrt

[sipgate] 
include => sperrnummern-deu
include => sperrnummern-int

     exten => _99980043.,1,GoTo(10)                        ; oesterreich

;# Der Waehlvorgang:

   exten => _9998X.,1,GoTo(denied,s,1)                    ; verbietet alles, was nicht erwaehnt wurde
   exten => _99980[2-9].,1,GoTo(10)                       ; telefonieren ueber 02..- 09.. wird erlaubt
  
   exten => _9998.,10,Set(CALLERID(name)=anonymous)
   exten => _9998.,11,Set(LANGUAGE()=de)                  ; hier wird nur die deutsche Sprache aktiviert (nicht fuer's Telefonat) ;-)
   exten => _9998.,12,Set(GROUP()=sipgate_anrufe)         ; der Anruf wird der Gruppe sipgate_anrufe zugeordnet
   exten => _9998.,13,NoOp(${GROUP_COUNT()})              ; hier wird nur angezeigt, wie viele Teilnehmer z.Zt.
                                                          ; in der Gruppe sipgate_anrufe sind
   exten => _9998.,14,GoToIf($[${GROUP_COUNT()} > 2]?120) ; falls vorher schon jemand mit sipgate telefonierte sind nun zwei ;1
                                                          ; Teilnehmer in der Gruppe sipgate_anrufe
                                                          ; da 2 > 1, springen wir nicht zur naechsten Extensions sondern zu 120
   exten => _9998.,15,NoOp                                ; hier passiert nichts (frei fuer Veraenderungen)
   exten => _9998.,16,Dial(SIP/${EXTEN:4}@sipgate,180,)   ; ueber sipgate wird raustelefoniert
   exten => _9998.,17,Hangup                              ; ordentliches Gespraechsende
   exten => _9998.,117,Busy()                             ; falls zu 100+n gesprungen wird
   exten => _9998.,120,GoTo(denied,s,1)			  ; wird zu denied geleitet


Das Problem: Wenn ich z.B. 99980900123456 wähle, bekomme ich einen Fehler von Sipgate. Aber eben kein Access Denied. Gleiches gilt für Auslandsnummern..

Danke für deine Hilfe.. Peter
 
War dann doch nochmal das gleiche Problem mit der Extensions-Sortierung. Eine (nicht schöne Lösung) könnte sein

Code:
[denied]
; Hier wird ein unerlaubtes Rufziel gehandelt
   exten => s,1,Playback(accessdenied)             ; dieser text wird angesagt, wenn ueber sipgate schon telefoniert wird
   exten => s,2,Busy()                             ; dann wird ein Besetzt ausgegebe

[sperrnummern-deu]
   exten => _9998090.,1,GoTo(denied,s,1)                         ; hier wird die nummer 090 gesperrt 

[sperrnummern-int]
   exten => _99980041090.,1,GoTo(denied,s,1)                    ; hier wird die nummer 0041090 gesperrt
   exten => _999800[0-35-9].,1,GoTo(denied,s,1)                 ; alles außer 004X
   exten => _9998004[02-9].,1,GoTo(denied,s,1)                 ; alles 004 außer 0043

[erlaubt]
exten => _99980043.,1,GoTo(sipgate,${EXTEN:4},1)                        ; oesterreich
exten => _99980[2-8].,1,GoTo(sipgate,${EXTEN:4},1)
exten => _999809Z.,1,GoTo(sipgate,${EXTEN:4},1)


[sipgate]
include => sperrnummern-deu
include => sperrnummern-int
include => erlaubt


;# Der Waehlvorgang:

   exten => _0.,10,Set(CALLERID(name)=anonymous)
   exten => _0.,11,Set(LANGUAGE()=de)                  ; hier wird nur die deutsche Sprache aktiviert (nicht fuer's Telefonat) ;-)
   exten => _0.,12,Set(GROUP()=sipgate_anrufe)         ; der Anruf wird der Gruppe sipgate_anrufe zugeordnet
   exten => _0.,13,NoOp(${GROUP_COUNT()})              ; hier wird nur angezeigt, wie viele Teilnehmer z.Zt.
                                                          ; in der Gruppe sipgate_anrufe sind
   exten => _0.,14,GoToIf($[${GROUP_COUNT()} > 2]?120) ; falls vorher schon jemand mit sipgate telefonierte sind nun zwei ;1
                                                          ; Teilnehmer in der Gruppe sipgate_anrufe
                                                          ; da 2 > 1, springen wir nicht zur naechsten Extensions sondern zu 120
   exten => _0.,15,NoOp                                ; hier passiert nichts (frei fuer Veraenderungen)
   exten => _0.,16,Dial(SIP/${EXTEN}@sipgate,180,)   ; ueber sipgate wird raustelefoniert
   exten => _0.,17,Hangup                              ; ordentliches Gespraechsende
   exten => _0.,117,Busy()                             ; falls zu 100+n gesprungen wird
   exten => _0.,120,GoTo(denied,s,1)                      ; wird zu denied geleitet

BTW: Trockenübungen kannst Du in der CLI mit

Code:
dialplan show <nummer>@<context>

machen, da sieht man auchm wie sich der * bei Anwahl verhalten wird (welches Pattern matcht).
 
kann mir jemand helfen und meine konstruktion verbessern (reparieren)?

Ein allgemeiner Tip zum Aufbau:

Die allgemeine Regel muß mindestens soviele Stellen haben wie die spezielle.

Also für ein deutsches Handy:

01. allgemeine Regel
015. Handy-Regel

funktioniert meist nicht, da mit 01. die Regel erfüllt ist.

015. allgemeine Regel
01X. kann funktionieren, da gleichwertig, Reihenfolge beachten.

am besten

01XX.
015.
 
kombjuder, oh. danke. Gilt das nur für den jeweiligen Kontext, oder für die gesamte extensions.conf? Muss ich also bei allen meinen Dingen Xe ergänzen, oder reicht es, die in den jeweiligen Kontexten auf einen gemeinsamen Nenner zu bringen?

abw1oim, habe das soweit implentiert. Probleme die ich feststellen konnte sind folgende:

Die Prüfung funktiontioniert nur für Deutschland, International leider immer noch nicht. Aber: Wenn ich durchkomme bekomme ich ein besetzt, auch für deutsche Rufnummern. Wenn ich "Dial 999802xxxx@sipgate" in der Konsole eingebe, kommt gar ncihts. Ein anderes Problem ist dass ich im Kontext sipgate gerne noch meine "verbietet alles, was nicht erwaehnt wurde"-Regel nutzen würde. Kann ich den erlaubt-Kontexten sagen, dass sie hinter die Regel springen sollen, also zu 10?

Und schlussletzlich würde ich gerne, da ich mehrere Nummern besitze, die Kontexte wiederverwenden. So wie ich es sehe kann ich z.B. bei "sperrnummern" 99980900 mit 999X0900 austauschen. Jedoch weiß ich nicht was ich bei den "erlaubt" Kontexten machen soll; Schließlich ist "sipgate" hardgecodet, d.h. ich könnte den Kontext nicht wiederverwenden. Kann man dort sipgate nicht mit einer Variable austauschen, die den Kontext angibt, der das Ding jeweils included hat?


Danke!! Peter
 
Da war noch ein Prio-Fehler (gehe zu Prio 1, die es nicht gibt) Außerdem: Der fehlende Hangup führt ggf. dazu, dass dfer Channel offenbleibt, so dass ein nachfolgender Rufaufbau als DTMF interpretiert wird. Hier eine Variante, die auch mit verschiedenen Providern klarkommt, der Einstiegskontext für den Rufaufbau wäre jetzt dialout_prep, in dem Du auch weitere Provider nach dem angegebenen Muster angeben kannst.

Code:
[denied]
; Hier wird ein unerlaubtes Rufziel gehandelt
   exten => s,1,Playback(accessdenied)             ; dieser text wird angesagt, wenn ueber sipgate schon telefoniert wird
   exten => s,2,Busy(5)                             ; dann wird ein Besetzt ausgegebe
   exten => s,3,Hangup()

[sperrnummern-deu]
   exten => _090.,1,GoTo(denied,s,1)                         ; hier wird die nummer 090 gesperrt 

[sperrnummern-int]
   exten => _0041090.,1,GoTo(denied,s,1)                    ; hier wird die nummer 0041090 gesperrt
   exten => _00[0-35-9].,1,GoTo(denied,s,1)                 ; alles außer 004X
   exten => _004[02-9].,1,GoTo(denied,s,1)                 ; alles 004 außer 0041

[erlaubt]
   exten => _0.,1,Goto(dialout_do,${EXTEN},1)           ; alles was nicht verboten ist, ist erlaubt

[dialout_prep]
exten => _9998.,1,Set(prov=sipgate);
exten => _9998.,2,Goto(dialout_check,${EXTEN:4},1)



[dialout_check]
include => sperrnummern-deu
include => sperrnummern-int
include => erlaubt

[dialout_do]
;# Der Waehlvorgang:

   exten => _0.,1,Set(CALLERID(name)=anonymous)
   exten => _0.,2,Set(LANGUAGE()=de)                  ; hier wird nur die deutsche Sprache aktiviert (nicht fuer's Telefonat) ;-)
   exten => _0.,3,Set(GROUP()=${prov}_anrufe)         ; der Anruf wird der Gruppe sipgate_anrufe zugeordnet
   exten => _0.,4,NoOp(${GROUP_COUNT()})              ; hier wird nur angezeigt, wie viele Teilnehmer z.Zt.
                                                          ; in der Gruppe sipgate_anrufe sind
   exten => _0.,5,GoToIf($[${GROUP_COUNT()} > 2]?120) ; falls vorher schon jemand mit sipgate telefonierte sind nun zwei ;1
                                                          ; Teilnehmer in der Gruppe sipgate_anrufe
                                                          ; da 2 > 1, springen wir nicht zur naechsten Extensions sondern zu 120
   exten => _0.,6,NoOp                                ; hier passiert nichts (frei fuer Veraenderungen)
   exten => _0.,7,Dial(SIP/${EXTEN}@${prov},180,)   ; ueber sipgate wird raustelefoniert
   exten => _0.,8,Hangup                              ; ordentliches Gespraechsende
   exten => _0.,108,Busy(5)                             ; falls zu 100+n gesprungen wird
   exten => _0.,109,Hangup()
   exten => _0.,120,GoTo(denied,s,1)                      ; wird zu denied geleitet

Neben der Flexibilsierung der Provider und den korrekten Sprungmarken ist jetzt auch das Hangup mit drin, das Dein: "Es passiert nichts" verursacht hat.
 
kombjuder, oh. danke. Gilt das nur für den jeweiligen Kontext, oder für die gesamte extensions.conf?

Das gilt nur innerhalb des selben Kontexts. Asterisk springt in einen Kontext und sucht sich was passendes. Das erste was er findet, nimmt er.

Deswegen
015.
01X.

Wenn du das umdrehst, findet er zuerst 01X. Das passt, das nimmt er. Für 015. interessiert er sich schon gar nicht mehr.

Desswegen solltest du auch wenn dein Dialplan fertig ist, ein

dialplan show <nummer>@<context>

machen und schauen ob Asterisk so denkt wie du.
 
Kostenlos!

Statistik des Forums

Themen
248,891
Beiträge
2,304,283
Mitglieder
378,583
Neuestes Mitglied
Rubinek