• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login
Netgate Discussion Forum
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Search
  • Register
  • Login

scripting / openVPN / emailNotification /

Scheduled Pinned Locked Moved Deutsch
24 Posts 3 Posters 1.6k Views
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • N
    noplan
    last edited by noplan Apr 6, 2020, 10:18 PM Mar 26, 2020, 10:43 AM

    als die email notification
    siehe hier link zum post

    funktioniert wollte ich es etwas ausbauen und eigentlich nur mehr
    mails über die category untrusted erhalten

    idee siehe post hier

    die IP adressen in eine .txt gepackt und das script mit einer abfrage angepasst
    wenn ip adresse in txt gefunden dann notification senden sonst egal.

    am webserver funktioniert das php ding.
    aber auf der pfsense box kläglich am scheitern.
    vielleicht hat ja wer eine idee! würd mich freuen.

    source hier noch mal.

    !!!! Achtung dieser source funktioniert nicht !!!!
    !!! dient nur zur veranschaulichung wie mies mein Scripting ist !!!!

    #!/usr/local/bin/php -q
    <?php
    require_once('/etc/inc/notices.inc');
    	$name= getenv('ifconfig_pool_remote_ip');
    	$fp = fopen('contractor-list.txt','r');
         if($fp)
         {
          while (!feof($fp))
          {
             $line = fgets($fp, 100);
             if($name==str_replace('\n','','$line'))
             {
    	$local_connect_value = " \n user_name: " . getenv('common_name') . " \n vpn_client_ip: " . getenv('ifconfig_pool_remote_ip') ." connected from " . getenv('trusted_ip') . " on " . date('F j, Y, g:i a');
    	if ( strrchr (__FILE__ , 'disconnect') ) {
    	$local_connect_value .= ", \n duration : " . round(((getenv('time_duration'))/3600),2) . "  hours, or " . round(((getenv('time_duration'))/60),2) . "  minutes, or " . getenv('time_duration') . "  seconds,\n upload from vpn-client (received) : " . round(((getenv('bytes_received'))/1048576),2) . " MB, \n download to vpn-client (send) : " . round(((getenv('bytes_sent'))/1048576),2) ." MB. \n DISCONNECTED.";}
    	notify_all_remote($local_connect_value);
              }
    }
    }
         fclose($fp);
    
    ?>
    
    1 Reply Last reply Reply Quote 0
    • M
      MABINOGION
      last edited by Mar 30, 2020, 12:16 PM

      Hallo Noplan,

      ich habe es ein wenig anders gelöst. Jedoch vorab, sobald die PFS ein Update erhält, muss dieser Workaround wiederholt werden....

      Du erhältst eine Mail bei Connect & Disconnect = User+IP

      Ändern der openvpn.attributes.ssh file
      Einwahl unter Diagnostic/ Edit File /usr/local/sbin/ openvpn.attributes.ssh

      Hier ist die Original Datei. Die in Fett / Begin Edit / End Edit eingetragenen Befehle sind der Edit.

      #!/bin/sh
      #
      # openvpn.attributes.sh
      #
      # part of pfSense (https://www.pfsense.org)
      # Copyright (c) 2004-2016 Rubicon Communications, LLC 
      # (Netgate)
      # All rights reserved.
      #
      # Licensed under the Apache License, Version 2.0 (the # "License");
      # you may not use this file except in compliance 
      # with the License.
      # You may obtain a copy of the License at
      #
      # http://www.apache.org/licenses/LICENSE-2.0
      #
      # Unless required by applicable law or agreed to in 
      # writing, software
      # distributed under the License is distributed on an 
      # "AS IS" BASIS,
      # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 
      # express or implied.
      # See the License for the specific language governing permissions and
      # limitations under the License.
      
      if [ "$script_type" = "client-connect" ]; then
      ****#BEGIN EDIT
      /bin/echo "Client $common_name from $trusted_ip connected @ `date`" \
      | /usr/local/bin/mail.php -s"OpenVPN Connection Beginning"
      #END EDIT****
      
              if [ -f /tmp/$common_name ]; then
                      /bin/cat /tmp/$common_name > $1
                      /bin/rm /tmp/$common_name
              fi
      elif [ "$script_type" = "client-disconnect" ]; then
              command="/sbin/pfctl -a 'openvpn/$common_name' -F rules"
              eval $command
              /sbin/pfctl -k $ifconfig_pool_remote_ip
              /sbin/pfctl -K $ifconfig_pool_remote_ip
      ****#BEGIN EDIT
      /bin/echo "Client $common_name from $trusted_ip disconnected @`date`" \
      | /usr/local/bin/mail.php -s"OpenVPN Connection Ending"
      #END EDIT****
      fi
      
      exit 0
      
      
      1 Reply Last reply Reply Quote 0
      • N
        noplan
        last edited by Mar 31, 2020, 6:28 AM

        sehr cool sehr cool
        danke !
        ich meld mich hier wieder !

        1 Reply Last reply Reply Quote 0
        • N
          noplan
          last edited by Mar 31, 2020, 5:10 PM

          hallo,
          ich erhalte bereits eine mail wahlweise bei jedem connect (jetzt bei mir disabled) und bei jedem disconnect
          deren inhalt so aussieht.

          2187bf2d-1310-443f-bf3b-f87ab1bb6088-grafik.png

          wie gesagt das bekomme ich bei jedem disconnect eines vpn-users,
          weil ich es noch nicht hinbekommen habe aufrgund der
          IP adresse des vpn-clients (vpn_client_ip) oder des common-name d vpn-clients eine IF Abfrage hinzubauen die
          wie in diesem post link beschrieben eingebaut werden sollte.

          mein scripting auf der pfS ist einfach zu mies.

          simple said:
          wenn die IP adresse (vpn_client_ip) in einer zB txt datei auf der pfS steht dann führe das script weiter aus
          else schreibe ein log oder auch nicht.

          so würde sich der mail Versand drastisch verringern weil ich wirklich nur dann eine nachricht haben will wenn der vpn-client als untrusted oder notification-need von mir klassifiziert wurde.

          was man noch alles machen kann um ein ordentliches reporting zu erzeugen spar ich mir,
          weil wie oben gesagt mein scripting auf der pfS einfach zu mies ist.

          lgNP

          1 Reply Last reply Reply Quote 0
          • J
            JeGr LAYER 8 Moderator
            last edited by JeGr Apr 6, 2020, 1:16 PM Apr 6, 2020, 1:15 PM

            @noplan also hast du dein Skript aus dem OP hinbekommen? Oder hatte es funktioniert und etwas anderes war falsch? Wenn was im Skript falsch war, wäre es praktisch zu wissen was, sollte das einer mal nachbauen wollen :)

            Oder vielleicht auch damit jemand anderes vielleicht mal reinschauen kann, wie man IP mäßig Dinge rausnehmen kann ;)

            Grüße

            Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

            If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

            N 1 Reply Last reply Apr 6, 2020, 10:15 PM Reply Quote 0
            • N
              noplan @JeGr
              last edited by noplan Apr 6, 2020, 10:20 PM Apr 6, 2020, 10:15 PM

              @JeGr

              hallo,
              der oben gezeigte source funktioniert nicht.
              habs bereits editiert das sich hier keiner mehr wundert.

              das script aus diesem Beitrag funktioniert ---> link

              hier der code:

              #!/usr/local/bin/php -q
              <?php
              	require_once("/etc/inc/notices.inc");
              	$local_connect_value = " \n user_name: " . getenv('common_name') . " \n vpn_client_ip: " . getenv('ifconfig_pool_remote_ip') ." connected from " . getenv('trusted_ip') . " on " . date('F j, Y, g:i a');
              	if ( strrchr (__FILE__ , 'disconnect') ) {
              	$local_connect_value .= ", \n duration : " . round(((getenv('time_duration'))/3600),2) . "  hours, or " . round(((getenv('time_duration'))/60),2) . "  minutes, or " . getenv('time_duration') . "  seconds,\n upload from vpn-client (received) : " . round(((getenv('bytes_received'))/1048576),2) . " MB, \n download to vpn-client (send) : " . round(((getenv('bytes_sent'))/1048576),2) ." MB. \n DISCONNECTED.";
              	}
              	notify_all_remote($local_connect_value);
              ?>
              

              aktiviert in openVPN Server unter

              7fdb1ad9-9bb4-4e75-8ad9-dde80cce204f-grafik.png

              Das liefert exakt die Ausgabe (wie oben von mir beschrieben per e-mail), einzig was noch einzubauen wäre (was ich noch immer nicht gemacht habe) als Input aus der Diskussion aus diesem Beitrag ---> link
              ist das

              exit 0;
              

              und die Eintragung in die logFiles mittels

              logger
              
              

              Aber hiezu fehlt mir der zündende Gedanke (was da rein / rübergeschrieben werden soll)

              Da das Script bei jedem disconnect eines users ausgeführt wird, geht das ziemlich schnell auf die Nerven, darum sollte (Wunschkonzert) mit einer Abfrage auf zB eine txt Datei die auf der pfS liegt (weil ich glaube das ist einfacher) als die Abfrage gegen einen oder mehrere Alias Gruppen (was den Wartngsaufwand erheblich reduzieren würde) auf der pfS zu richten, festlegen ob eine Nachricht gesendet werden soll oder nicht.

              Wieso ich auf IPs gehe ist auch schnell erklärt,
              jeder vpn-client erhält mittels Client Specific Overrides eine eigene IP und nur diese IPs können im VPN was anfangen.
              funktioniert die CSO nicht (kann ja auch mal vorkommen) kann der vpn-client nichts im VPN anfangen, in der Regel hilft abmelden und neue Verbindung (kommt so ca alle 100x 2x vor wieso hab ich mir noch nicht angeschaut)

              Also das fehlt jetzt noch zur fertigen "super Lösung"

              BSP:

              vpn-user noPlan logt sich aus ----> script checkt ob (IP oder Name aber besser IP) in Alias untrusted oder notification-needed vorhanden ist und entscheidet da nicht vorhanden (weil in gruppe trusted) keine e-mail sondern nur ausgabe an logger

              vpn-user Contractor logt sich aus ---> script entscheidet da er in gruppe notification-needed ist email wird gesendet sowie ausgabe an logger

              vpn-user Employee logt sich aus ----> script enscheidet da er in gruppe untrusted ist email wird gesendet

              Was man damit machen könnte:
              man sich diese e-mails wenn man ein paar marker (trennzeichen) einbaut dann
              vom mail weg automatisiert in ein reporting schieben kann das ich
              mir an tag x automatisch generieren lasse kann ist ein anderes Thema.
              zB Reporting pro vpn-client pro woche / pro Monat (es sind ja alle wichtigen Daten vorhanden)

              hoffe das konnte helfen oder irgendwer versteht was ich machen möchte.

              eine if machen die abfragt ob eine IP in einer txt ist, wenn ja dann mach das wenn nein dann mach das
              in diesem genannten script das mir das mail schickt.

              lgNP

              1 Reply Last reply Reply Quote 0
              • J
                JeGr LAYER 8 Moderator
                last edited by Apr 16, 2020, 11:09 AM

                Also eine Textdatei erzeugen, die du auslesen kannst im Skript ist ja mit dem "Filer" Package kein Problem und durch das Paket bleibt die Datei auch nach einem Update da und hat den gewünschten Inhalt. Auch das Skript kannst du so auf der Sense irgendwo sinnvoll ablegen und sicherstellen, dass es mit korrektem Inhalt und Rechten dann auch nach Updates wieder da ist. Eine Abfrage mit Skripting in diese User-Datei rein ist dann nicht soo schwer, oder verstehe ich deine Idee hier falsch?

                Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                N 1 Reply Last reply Apr 16, 2020, 7:31 PM Reply Quote 0
                • N
                  noplan @JeGr
                  last edited by Apr 16, 2020, 7:31 PM

                  @JeGr

                  • txt datei erzeugen mit filer ! Danke f hinweis kannte das Paket nicht
                    (wird in Angriff genommen)

                  • verstehe ich es richtig das ich das script und die Berechtigungen auch über filer machen sollte weil sonst nach update alles anders (sein könnte)

                  • ja alles richtig verstanden

                  • und jaaaaaa es ist soooo schwer (für mich) ich krieg das mit der if und der for each der txt nicht hin (denn ich hätte das gerne / ich will es auch so bauen, weil ich stur bin und es sicher geht) das das ganze script im openVPN server advanced aufgerufen wird.

                  die umschachtelungen für einen Time Report machen wir in einer anderen baustelle. (von der hab ich mit multiWAN gerade eine richtige ausgefasst)

                  ich freu mich auf comment / feedback / hilfe
                  lgNp

                  1 Reply Last reply Reply Quote 0
                  • J
                    JeGr LAYER 8 Moderator
                    last edited by JeGr Apr 20, 2020, 11:08 AM Apr 20, 2020, 11:07 AM

                    @noplan said in scripting / openVPN / emailNotification /:

                    verstehe ich es richtig das ich das script und die Berechtigungen auch über filer machen sollte weil sonst nach update alles anders (sein könnte)

                    Wenn du willst, dass das Skript und die Berechtigungen nach einem Update noch da sind - ja, dann solltest du das auch in Filer packen. Bei einem simplen Update könnte es sein dass es noch da ist wenn dus in das richtige Verzeichnis gepackt hast (eines das vom Update nicht betroffen ist), aber bei einer Neuinstallation wäre es sonst weg. So ist es durch Filer und das Konfig-Backup in der Sicherung mit drin :)

                    ja alles richtig verstanden

                    OK Recap:

                    • Du hast einen Scriptcall im OVPN Server drin via client-disconnect. Erstmal ja nichts Schlechtes. Das ruft das Skript auf (würde ich nciht unbedingt nach /root packen aber seis drum, ist da erstmal egal).
                    • Ist der Skriptoutput mit den paar Zeilen PHP wirklich der komplette Inhalt von disconnect.sh? Wenn ja, sollte man vielleicht das .sh überdenken, denn ein Shell Skript per se ist es nicht, eher ein PHP Skript. Aber seis drum, ich fände es nur irritierend
                    • Du willst jetzt aus diesem PHP Skript quasi das Logging so steuern, dass die 3 Zeilen nach dem Require nur dann ausgeführt werden, wenn der "common_name" in einer Liste von Usern steht die du pflegst? Ist das richtig?

                    Edit: Oh lese gerade was von Gruppen. Wie soll denn die Gruppenzugehörigkeit unterschieden werden? OpenVPN kennt ja deine Gruppen nicht, also könntest du m.E. nur auf den Usernamen gehen, nicht auf Gruppen?

                    Gruß Jens

                    Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                    If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                    N 1 Reply Last reply Apr 20, 2020, 12:43 PM Reply Quote 0
                    • N
                      noplan @JeGr
                      last edited by Apr 20, 2020, 12:43 PM

                      @JeGr

                      ob der common_name es steuert oder die IP Adresse die dem common_name mittels CSO zugewiesen wird ist egal was einfacher ist, ich dachte an IP

                      Ja war mit klar mit der einzigen Unterscheidungsmöglichkeit
                      common_name oder IP Adresse
                      die Gruppen sind einfache txt Dateien die man mit entweder dem common_name oder der IP befüllt ... eine andere Befüllung zB aus einem Alias wird kompliziert aber vielleicht cooler.

                      ja ich bin voll bei dir (speicherort, .sh,)

                      ja das script soll nur dann ausgeführt werden
                      wenn die IP oder der common_Name in der Datei gefunden wird
                      ich bevorzug ja noch immer die IP denn wenn das CSO nicht funktionier, verbindet er (der Client zwar) aber kann aufgrund der Regeln nix machen.
                      das siehst dann eh im LOG.

                      je mehr man darüber nachdenkt desto mehr denk ich mir das kann j anicht so schwer hinzubekommen sein.

                      lgNP

                      1 Reply Last reply Reply Quote 0
                      • J
                        JeGr LAYER 8 Moderator
                        last edited by Apr 20, 2020, 3:53 PM

                        Also IP wäre IMHO recht einfach machbar, wenn dus geschickt machst, könntest du dann sogar auf die Datei zum Auslesen verzichten, müsstest dann nur die PHP Datei etwas aufbohren.

                        Bspw. nur so dahin gesponnen:

                        wenn du alle IPs, die du Loggen willst erst ab - sagen wir - .128-.254 vergibst und alles darunter sind dann Einwahlbereiche, die du per Radius oder CSOs vergibst, die du nicht loggen willst, dann kannst du selbst es steuern via CSO, wer geloggt wird oder nicht (und die entsprechenden IPs oder Bereiche gleich noch mit einem Alias auf der pfSense einfangen und ggf. andere Regeln auf dem OVPN Interface vergeben).

                        Weitergesponnen:

                        • Aufteilung in theoretische CIDR Blöcke mit bspw. 32 IPs oder 64 IPs
                        • Dann Vergabe via CSOs ab CIDR Boundary also bspw. ab .129+ o.ä.
                        • Keine CSO? OVPN vergibt IP selbst aus den untersten IP Bereichen, Client bekommt .2, .3, .4 etc und wird nicht geloggt (bspw. Admins/Mitarbeiter)
                        • CSO für Fremdfirmen und Drittanbieter, werden über CSO auf fixe IP gesetzt (.129, .130, .131...) und dadurch im Skript automatisch geloggt

                        Das ist wie gesagt nur jetzt so mal dahin gesponnen aber problemlos möglich, da du im Skript vor dem IF case

                        ...
                        $local_connect_value = " \n user_name: " . getenv('common_name') . " \n vpn_client_ip: " . getenv('ifconfig_pool_remote_ip') ." connected from " . getenv('trusted_ip') . " on " . date('F j, Y, g:i a');
                        ...
                        

                        den Client mit IP kennst - getenv(ifconfig_pool_remote_ip). Bei einem VPN Netz von 10.0.8.0/24 z.B. könnte man das so quick & dirty bauen:

                        $client_ip=getenv(ifconfig_pool_remote_ip);
                        $min_ip="10.0.8.129";
                        $max_ip="10.0.8.254";
                        
                        if (ip2long($min_ip) < ip2long($client_ip) && ip2long($client_ip) < ip2long($max_ip)) {
                            // hier den Code der nur dann ausgeführt werden soll, also dein $local_connect und der disconnect part
                        }
                        // kein else nötig, aber wenn du noch was machen willst wenn es eine IP außerhalb des Ranges ist, dann kann man das hier mit einem "} else {" Case anbauen
                        

                        Das prüft einfach nur durch IP-in-numerischen-Long-Wert umrechnen, ob die Client IP zwischen den beiden Boundaries liegt und wenn ja -> Go!

                        Damit kannst du den Bereich problemlos im Skript definieren und wer geloggt wird entscheidet sich wie gesagt durch deine CSO-IP-Vergabe :)

                        Grüße

                        Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                        If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                        N 1 Reply Last reply Apr 21, 2020, 6:14 AM Reply Quote 0
                        • N
                          noplan @JeGr
                          last edited by Apr 21, 2020, 6:14 AM

                          @JeGr

                          ich bin jetzt überfordert ;)
                          liegt aber wahrscheinlich an der zu langen Abendschicht und den Akten die sich hier stapeln ... ich werd das heut vormittag durchdenken.
                          ich bin begeistert !

                          1 Reply Last reply Reply Quote 0
                          • N
                            noplan
                            last edited by noplan Apr 21, 2020, 11:05 AM Apr 21, 2020, 10:46 AM

                            irgendwas rennt falsch: @JeGr
                            die zu loggenden Clients erhalten mittels CSO
                            10.0.0.230/24 - 10.0.0.253/24

                            #!/usr/local/bin/php -q
                            <?php
                            	require_once("/etc/inc/notices.inc");
                            
                            $local_connect_value = " \n user_name: " . getenv('common_name') . " \n vpn_client_ip: " . getenv('ifconfig_pool_remote_ip') ." connected from " . getenv('trusted_ip') . " on " . date('F j, Y, g:i a');
                            
                            if ( strrchr (__FILE__ , 'disconnect') ) {
                            
                            	$client_ip=getenv(ifconfig_pool_remote_ip);
                            	$min_ip="10.0.0.229";
                            	$max_ip="10.0.0.253";
                            
                            
                            if (ip2long($min_ip) < ip2long($client_ip) && ip2long($client_ip) < ip2long($max_ip)) {
                            
                            	$local_connect_value = " \n user_name: " . getenv('common_name') . " \n vpn_client_ip: " . getenv('ifconfig_pool_remote_ip') ." connected from " . getenv('trusted_ip') . " on " . date('F j, Y, g:i a') . " \n duration : " . round(((getenv('time_duration'))/3600),2) . "  hours, or " . round(((getenv('time_duration'))/60),2) . "  minutes, or " . getenv('time_duration') . "  seconds,\n upload from vpn-client (received) : " . round(((getenv('bytes_received'))/1048576),2) . " MB, \n download to vpn-client (send) : " . round(((getenv('bytes_sent'))/1048576),2) ." MB. \n DISCONNECTED.";
                            }  
                            }
                            notify_all_remote($local_connect_value);
                            
                            	
                            ?>
                            

                            es wird zwar ein mail versendet aber nur mehr mit diesem Inhalt:
                            client mit 10.0.0.233 (also ein client innerhalb der Range)
                            f1ef0509-828f-4c30-a279-4799092b9508-grafik.png

                            client mit 10.0.0.7 (also ein client außerhalb der Range) erhält auch noch immer mail
                            159ee3a4-ebbe-4c2c-92b5-b492a471f176-grafik.png

                            ich versteh auch nicht wieso diese Zeilen nicht mehr mitübermittelt werden .
                            34341a19-0583-4bf2-a97f-f7d4e4983a27-grafik.png

                            für Hinweise dankbar ... wie gesagt irgendwie Wald und Bäume ...

                            1 Reply Last reply Reply Quote 0
                            • J
                              JeGr LAYER 8 Moderator
                              last edited by JeGr Apr 21, 2020, 12:13 PM Apr 21, 2020, 12:11 PM

                              du musst vom ersten Aufruf von $local_connect_value bis zum letzten notify_all_remote alles in das IF mit den ip2long Vergleichen packen

                              Warum:

                              • du hast vor dem IF noch die erste Anweisung mit dem local_connect_value
                              • den zweiten Block mit dem local... hast du im IF
                              • NACH dem IF (also immer!) führst du das notify aus -> mit dem ersten Wert von ganz am Anfang befüllt

                              Oder verstehe ich dich falsch und es soll immer eine Notification kommen und nur bei den Clients im Range dann eben mehr Details?

                              Wenn ja, dann würde ich mit

                              $local_connect_value = "";

                              anfangen, dann im IF den langen value string reinpacken, einen zusätzlichen Else machen mit nur dem geringen output und am Ende den notify außerhalb des IFs.

                              Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                              If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                              noplanN 1 Reply Last reply Apr 21, 2020, 12:31 PM Reply Quote 0
                              • noplanN
                                noplan @JeGr
                                last edited by noplan Apr 21, 2020, 1:07 PM Apr 21, 2020, 12:31 PM

                                @JeGr said in scripting / openVPN / emailNotification /:

                                nein das script soll nur dann einen Versand triggern wenn die IP d vpn-client eine IP aus der RANGE
                                hat.

                                interner Test wenn die IP fest vergeben funktioniert.
                                also die IF tut was sie soll (hab ja auch nix anderes erwarte)
                                und das kommt auch alles so wie es soll.

                                #!/usr/local/bin/php -q
                                <?php
                                	require_once("/etc/inc/notices.inc");
                                
                                $client_ip=getenv(ifconfig_pool_remote_ip);
                                // $client_ip="10.0.0.252";
                                // be aware range = .250 - .254
                                    $min_ip="10.0.0.250";
                                	$max_ip="10.0.0.255";
                                if (ip2long($min_ip) < ip2long($client_ip) && ip2long($client_ip) < ip2long($max_ip)) {
                                $local_connect_value = " \n user_name: " . getenv('common_name') . " \n vpn_client_ip: " . getenv('ifconfig_pool_remote_ip') ." connected from " . getenv('trusted_ip') . " on " . date('F j, Y, g:i a') . " \n duration : " . round(((getenv('time_duration'))/3600),2) . "  hours, or " . round(((getenv('time_duration'))/60),2) . "  minutes, or " . getenv('time_duration') . "  seconds,\n upload from vpn-client (received) : " . round(((getenv('bytes_received'))/1048576),2) . " MB, \n download to vpn-client (send) : " . round(((getenv('bytes_sent'))/1048576),2) ." MB. \n DISCONNECTED.";
                                notify_all_remote($local_connect_value);
                                }
                                  
                                ?>
                                
                                

                                jetzt kommt der nervige teil (verbindungen aufbauen traffic und closen ... warten ) and again

                                1 Reply Last reply Reply Quote 0
                                • JeGrJ
                                  JeGr LAYER 8 Moderator
                                  last edited by Apr 21, 2020, 1:24 PM

                                  Hmm ich wollte das gerade mal nachbauen aber bei mir werden im Lab überhaupt keine Mails versendet ;)

                                  Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                                  If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                                  noplanN 1 Reply Last reply Apr 21, 2020, 1:30 PM Reply Quote 0
                                  • noplanN
                                    noplan @JeGr
                                    last edited by noplan Apr 21, 2020, 1:39 PM Apr 21, 2020, 1:30 PM

                                    @JeGr

                                    du musst die email notification auf der box aktiviert haben

                                    im trockentest funktioniert die IF
                                    also das schript auf der Konsole aufrufen wenn

                                    $client_ip="10.0.0.252"; 
                                    

                                    als fix definiert ist haut es ohne probleme hin
                                    also bei einer IP aus der Range bekommt man ein mail
                                    bei einer die nicht in er Range ist bekommt man keines
                                    (kann man testen indem man) nach der letzten } folgendes else einsetzt (der einzige Unterschied ist ein zusätzliches ELSE im user-name um im mail eine Unterscheidung zu haben)

                                    else 
                                    $local_connect_value = " \n ELSE-user_name: " . getenv('common_name') . " \n vpn_client_ip: " . getenv('ifconfig_pool_remote_ip') ." connected from " . getenv('trusted_ip') . " on " . date('F j, Y, g:i a') . " \n duration : " . round(((getenv('time_duration'))/3600),2) . "  hours, or " . round(((getenv('time_duration'))/60),2) . "  minutes, or " . getenv('time_duration') . "  seconds,\n upload from vpn-client (received) : " . round(((getenv('bytes_received'))/1048576),2) . " MB, \n download to vpn-client (send) : " . round(((getenv('bytes_sent'))/1048576),2) ." MB. \n DISCONNECTED.";
                                    notify_all_remote($local_connect_value);
                                    

                                    sobald man allerdings

                                    $client_ip=getenv(ifconfig_pool_remote_ip);
                                    

                                    oder (unterschied sind die beiden ' )

                                    $client_ip=getenv('ifconfig_pool_remote_ip');
                                    

                                    aktiviert hat (was man ja sollte) bekommt man gar nix oder einfach immer nur das Ergebnis der ELSE.

                                    Da hats mE was mit der Abfrage / Verwendung / Weiterverarbeitung der IP aus $client_ip Variable.

                                    nP

                                    1 Reply Last reply Reply Quote 0
                                    • JeGrJ
                                      JeGr LAYER 8 Moderator
                                      last edited by Apr 21, 2020, 1:49 PM

                                      Ja die Notifications hatten ein Problem, das Zusammenspiel mit STARTTLS ist da wackelig, aber anyway.

                                      Jetzt muss ich nur noch schauen, warum der Disconnect nicht erkannt wird, irgendwas ist da faul. Dann kann ichs endlich mal nachstellen.

                                      Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                                      If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                                      noplanN 1 Reply Last reply Apr 21, 2020, 2:37 PM Reply Quote 0
                                      • noplanN
                                        noplan @JeGr
                                        last edited by Apr 21, 2020, 2:37 PM

                                        @JeGr

                                        jop dann wart ich mal geduldig ab ;)

                                        ich vermute das die Verarbeitung der $client_ip nicht funktioniert denn der Inhalt dieser Variable wird im ELSE-Teil ja richtig ausgegeben.

                                        wenn das Ding fertig ist sollte man es verkaufen !

                                        ;)
                                        nP

                                        1 Reply Last reply Reply Quote 0
                                        • JeGrJ
                                          JeGr LAYER 8 Moderator
                                          last edited by Apr 21, 2020, 2:46 PM

                                          So jetzt hab ichs. Skript macht das was ich will ;) was vielleicht etwas anders ist, als was du vor hattest - aber anpassen geht dann relativ einfach.

                                          Was irgendwie gestört hat - konnte ich jetzt nicht rauskitzeln warum - war der IF mit dem "FILE" auf "disconnect". Da aber das ganze Skript ja überhaupt nur beim Disconnect aufgerufen wird (durch OVPN Server Skript), macht das IMHO eh keinen wirklichen Sinn bzw. bringt nutzen - es wird ja so oder so nur beim Disconnect ausgeführt.

                                          Ergo weg damit und jetzt läuft es wie es soll, inkl. Logging ins Syslog zusätzlich zur Mail (falls man es lieber im Log haben will). Wie ich es auf die Schnelle in das OVPN Syslog reinbekomme, hatte ich jetzt nicht gesucht, aber das geht sicher auch irgendwie noch.

                                          Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                                          If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                                          noplanN 1 Reply Last reply Apr 21, 2020, 2:58 PM Reply Quote 0
                                          • First post
                                            Last post
                                          Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.
                                            [[user:consent.lead]]
                                            [[user:consent.not_received]]