Hallo Zusammen,
dieses Thema gab es damals schon mal in der Zeit in der das Captive Portal noch nicht in die MVC Umgebung migriert wurde. Damals konnte man "relativ" einfach durch das editieren der "captiveportal.inc" Datei ($listenporthttp = 8078 + $cpcfg['zoneid']) den Port auf 8080 ändern für HTTP und mit dem Filemanager diese Datei im System dann ersetzen. Das funktionierte bei der pfSense genauso gut wie bei der OPNsense.
Genauso verhielt es sich mit der "services_captiveportal_vouchers.php" Datei die editiert werden konnte und über den Filemanager hochgeladen werden konnte um mit ein paar Zeilen den PDF Voucherdruck "freizuschalten". Will sagen: Einen zweiten Button der den gewünschten Vouchercode in ein vorgefertigtes template reinlud und diesen zum abspeichern als PDF vorschlug. Dazu wurde als Hilfsmittel FPDF genutzt (http://fpdf.de/).
Gibt es überhaupt noch eine Möglichkeit diese captiveportal_voucher.php Seite mit einer editierten Version zu ersetzen? Wie könnte man das jetzt mit Version 16.7.6 am Besten umsetzen?
Beide features funktionierten damals bei der M0n0wall genauso gut wie bei der früheren OPNsense Version.
Leider benötige ich beide "features" für meinen Captive Portal Betrieb. :-/
Bevor es dafür keine Lösung gibt, wird man mir wohl leider keine Freigabe für einen pfSense-->OPNsense Change zuteilen können. Deshalb meine Sorge. :P
Schöne Grüße :)
Voucher kann man mit einem einfachen API-Call generieren und dann mit dem JSON arbeiten, das man zurück bekommt.
Man kann zum Beispiel diese Bibliothek von mir verwenden: https://github.com/fabianfrz/OPNsense_client_lib
Die Methode zum Generieren heißt OPNsense::Voucher::create!
Mit dem Ergebnis kann man dann ein Template rendern und dieses dann verwenden. Ich habe diesbezüglich eine Beispielimplementierung in JRuby geschrieben. Es kann hier gefunden werden: https://github.com/fabianfrz/OPNsense-client-library-sample
Hallo Fabian,
vielen Dank erstmal. 8)
Das klingt ja schon ziemlich umständlich,
im Gegensatz dazu wie das vor nem halben Jahr mal gelöst werden konnte.
Puh! Na mal schauen ob ich das hinkrieg. Ich les mich da mal rein und schreib wenn es geklappt hat oder ich daran verzweifelt bin ;) ;D
Auf jeden Fall probier ich deine Variante mal aus in ner VM. :)
Hallöle ich nochmal,
also ich versuch gerade nachzuvollziehen, wie man deinen Vorschlag anwendet.
Tue mich da leider sehr schwer mit. Sorry! :/
Was ich gemacht hab ist:
Die Bibliothek runtergeladen und deine Beispielimplementierung.
Unter System> Access > User für meinen Benutzer einen Api Key generiert und abgespeichert als txt.
client.rb mit JRuby gestartet > Fenster öffnet sich.
Pfad zur Bibliothek: C:\Users\<mein Name>\Desktop\OPNsense_client_lib-master
Pfad zum Browser: C:\Program Files (x86)\Google\Chrome\Application\chrome.exe
Basis-Url für den API Zugriff: http://x.x.x.x/api/captiveportal/voucher/
Pfad zu den Zugangsdaten: C:\Users\<mein Name>\Desktop\apikey\apikey.txt
Pfad zum TLS-Zertifikat der CA des Servers: <erstmal noch leer gelassen>
Nachdem ich Übernehme und Speicher und client.rb neu öffne sind die Einstellungen wieder zurückgesetzt.
Ich komm bloß nich so recht dahinter wie ich den eigentlichen API Zugang hinbekomme.
Hatte mir dazu auch mal: https://docs.opnsense.org/development/how-tos/api.html angeschaut.
Da wurde ja Python genutzt. Wollte ja schon bei deiner Variante bleiben eigentlich. :)
Hoffe du hilfst mir nochmal aus. Danke dir eh schon mal für die Idee. :)
Basisurl ist zum Beispiel https://192.168.1.1/api/
Die Einstellungen werden in die Datei configuration.yml geschrieben (Wenn man auf den Button zum Speichern drückt).
Hallo Fabian,
Jap. Die x.x.x.x waren nur als Platzhalter gedacht. :)
Aber will ich nicht über die API Zugriff auf die Voucher Seite haben für die Generierung und Weiterverarbeitung, also demnach zum Beispiel: http://192.168.1.1/api/captiveportal/voucher/ ??
Außerdem noch eine Frage zu deinem Sample. Sobald man auf Speichern & Übernehmen drückt und die Config in configuration.yml geschrieben wird, warum sollte man dann laut deiner Anleitung das client.rb Script nochmal neu öffnen? Bei mir kommt dann erneut das Fenster mit den Einstellmöglichkeiten der Config. :-/
Der Tab mit den Vouchern braucht eine funktionierende API-Verbindung daher das Problem und die Basis-URL für API-Requests ist nur bis api/, alles andere hängt vom API-Aufruf ab. Da es sich hierbei nur um ein Beispielprogramm handelt, initialisiere ich die Tabs beim Ändern der Einstellungen nicht neu.
Meine Konfigurationsdatei sieht übrigens so aus:
---
opnsense_lib: "../opnsenserb/opnsense"
browser: "/usr/bin/firefox"
base_url: https://192.168.1.1/api/ (https://192.168.1.1/api/)
api_credential_file: "../apikey.ini"
ca_file: "../OPNsense.pem"
MfG
Fabian
Note: You will also need a valid voucher server before you can run the tool
Hallo Fabian,
ich hab die Einstellungen nun soweit abgeändert und verbessert.
Sieht nun so aus:
opnsense_lib: "C:\Users\<Platzhalter>\Desktop\OPNsense_client_lib-master\opnsense"
browser: "C:\Program Files (x86)\Google\Chrome\Application"
base_url: https://192.168.1.1/api/
api_credential_file: "C:\Users\<Platzhalter>\Desktop\apikey\apikey.ini"
ca_file: "C:\Users\<Platzhalter>\Desktop\Zertifikat\OPNsense.crt"
Irgendwas scheint immer noch grundlegend falsch zu sein. Die API Verbindung scheint noch nicht zu klappen.
Hoffe es gibt auch kein Problem damit, dass ich Chrome und Windows für den Zugriff nutze.
Den Voucher Server hatte ich schon vor ner Weile erstellt für das Captive Portal. Dieser funktioniert auch.
Man kann sich erfolgreich am CP anmelden, wenn man einen Vouchercode hat.
Daran kann es auch nicht liegen.... das ist echt zum verzweifeln ;D :(
Trotzdem schöne Grüße
Ich glaube du musst beim Brower den Pfad mit EXE angeben.
Hallo DokuKäfer,
danke für den Tipp aber "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
war es anscheinend auch nicht.
Öffnet sich beim zweiten Mal starten der client.rb wieder nur das Einstellungs-Fenster. :/
api_credential_file gibt mal dort nur den Pfad zur Datei an und schau das diese Datei "apikey.txt" heißt.
Hey hey,
gerade versucht und funktioniert leider auch nicht.
Ich hatte auch bei ca_file mal probiert nur den Dateipfad hin zur Datei anzugeben oder direkt zur Datei. Funktionierte beides auch nicht. :(
Das CA-Certifikat passt auch? Muss die CA sein, die das Zertifikat von der Weboberfläche unterschrieben hat.
Hey ihr Beiden,
ja das CA cert sollte auch stimmen. Ist zwar "self-signed" aber ist die CA die das genutzte Zertifikat für die Weboberfläche nutzt. Der apikey wurde in der GUI angelegt und als .txt abgespeichert. Hab da also auch nichts formatiert oder ähnliches. Die IP ist die "Management IP" auf der LAN Seite für die GUI und die Client Library hatte ich auch nich verändert oder bearbeitet. :/
Ich hab mittlerweile echt sämtliche Kombinationen durch, die man so probieren könnte.
Meine Config. sieht nun so aus:
------
opnsense_lib: "C:\Users\<platzhalter>\Desktop\OPNsense_client_lib-master\opnsense\"
browser: "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"
base_url: "https://<LAN IP für Webzugriff>/api/"
api_credential_file: "C:\Users\<platzhalter>\Desktop\apikey\apikey.txt"
ca_file: "C:\Users\<platzhalter>\Desktop\Zertifikat\cert.crt"
------
Langsam werden die Möglichkeiten knapp für Einfälle. :/
Note: ich hatte grade in der Client Library noch im apicredentials.rb file die Zeile geändert auf die richtige LAN IP: >>APICredentials.new(credentials[0],credentials[1],'https://<LAN IP>/api/',nil)
Aber ohne Erfolg. Keine Veränderung.
Hey hey Leute,
Bump.
Ich hab mich nochmal rangesetzt und muss das Thema noch mal von den Toten auferwecken.
Ich hab mal en Screenshot gemacht, von den Fehlermeldungen die kommen noch bevor das Einstellungs-Fenster angezeigt wird. Vielleicht kann damit jemand was anfangen. da steht halt "require Java false". Kann mir nicht erklären, warum das Fehlen sollte :/
Weil es über das Livesystem irgendwie nich hinhaut werd ich demnächst mal versuchen über ne Virtualbox, die API anzusprechen. Werd dann auch Ubuntu dafür nutzen. Vielleicht klappts ja. :-/
Schöne Grüße
require liefert den return-Wert false, wenn die Datei bereits geladen wurde - ist völlig normal (hängt auch davon ab, welche shell man gerade verwendet).
Wo du dir eher sorgen machen musst, ist der LoadError. Das sagt mir, dass er die Clientbibliothek nicht findet.
Setze den mal auf "C:/Users/<username>/Desktop/opnsense_client_lib_master/opnsense" und probiers damit noch mal.
Mit freundlichen Grüßen
Fabian
Hey Fabian,
danke erst einmal das du mich noch nich aufgegeben hast :P
Folgendes. Ich hatte bereits "C:\Users\<username>\Desktop\OPNsense_client_lib_master\opnsense\" als Pfad angegeben. Wenn ich am Ende das "\" weg mache, ändert sich nichts. Was ich merkwürdig finde ist, dass er bei der Abfrage des Pfades immer nur "C:\Users\<username>\Desktop\OPNsense_client_lib_master" zu nutzen scheint, egal was ich vorher eingebe.
Deshalb hatte ich jetzt noch versucht im "client.rb" folgende Zeile zu ändern:
______________
$path = File.dirname(File.expand_path(__FILE__))
ConfigurationFile = $path + "/configuration.yml"
$configuration = {"opnsense_lib"=>"C:\Users\<username>\Desktop\OPNsense_client_lib_master\opnsense", "browser"=>"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe", "base_url"=>"https://<Lan-IP>/api/", "api_credential_file"=>"C:\Users\<username>\Desktop\apikey\apikey.txt", "ca_file"=>"C:\Users\<username>\Desktop\Zertifikat\cert.crt"}
______________
Dadurch konnte ich zu mindestens schon einmal den LoadError beseitigen.
Jetzt öffnet sich ein Fenster ohne Inhalt siehe Bild 2.
Schöne Grüße :)
EDIT: Meine Idee scheint doch nicht zu funktionieren. Wenn ich mit den festeingetragenen Werten das client.rb starte sagt er "SyntaxError" in client.rb:11
EDIT2: Okay also ich scheine das Hauptproblem gefunden zu haben. Und zwar, bin ich immer davon ausgegangen, dass ich die "\" nehmen muss, da ich ja Windows nutze. client.rb kann damit aber nix anfangen und ignoriert dieses Zeichen komplett. nehme ich "/" kann er zu mindestens schon mal den apikey nutzen, die baseurl verstehen und die library laden.
Das Problem ist jetzt eigentlich nur noch. Obwohl er alles zu verstehen weiß, öffnet er trotzdem jedes mal das Einstellungs-Fenster für die Pfade. Fehlerbild 3 und 4 sind die Ausgaben die er mir in der Konsole gegeben hatte. :-/
führe mal require_relative direkt aus - also ohne den block zwischen if und dem letzten end auf dem screenshot. Ich bin mir sicher, dass hier aus irgendeinem grund der tab nicht initialisiert werden kann (würde mal vermuten, dass die verbindung nicht klappt)
Hey Fabian,
scheint noch nicht zu klappen. :( Bild wieder im Anhang.
Das Ende von client.rb sieht nun so aus nach dem Auskommentieren:
______________
[...]
$tab_pane.add_change_listener do |x|
idx = x.get_source.get_selected_index
window.size = $windowsizes[idx]
end
=begin
##########################################################
if $configuration['opnsense_lib'].length > 0
begin
rescue
end
end
=end
require_relative './modules/voucher'
require_relative './modules/options'
##########################################################
# finally show the window
window.add $tab_pane
window.visible = true
________________________
Ich hatte aus './modules/voucher' mal noch das .rb rangehangen zum Test aber das klappte auch nicht. :(
Schöne Grüße
Oxy
Hallo zusammen,
so kann den Oxy jetzt nicht mehr alleine lassen ;D und hab es nochmals bei mir getestet. Ich musste auch nochmals kämpfen. Aber mit dem Chatverlauf von Fabian aus FB hab ich es wieder ans laufen bekommen. ;)
Ich verwendete damals mit Fabian kein cert-File, da es hier bei mir Probleme gab.
Meine configuration.yml sieht folgendermaßen aus:
---
opnsense_lib: G:\OPNsense\OPNsense_client_lib-master\opnsense
browser: C:\Program Files\Mozilla Firefox\firefox.exe
base_url: http://192.168.2.10/api/
api_credential_file: G:\OPNsense\OPNsense-client-library-sample-master\apikey.txt
ca_file: ''
Wenn ohne cer-File, dann bei bei "base_url:" kein https verwenden.
Hallo ihr beiden,
ihr werdet es kaum glauben, aber es hat tatsächlich an dem cert File gelegen. Als ich den Webconfigurator Zugriff auf http umstellte und die configuration.yml ohne HTTPS umschrieb funktionierte es sofort. Unglaublich.... 8) ;D
Ich weiß grad nich ob ich vor Freude Luftsprünge machen soll oder ob ich verzweifeln soll, weil ich jetzt noch raus finden muss wie ich das ganze als pdf anstatt html und über HTTPS umsetzen kann. ;D
Ich glaube jetzt freue ich mich aber erst einmal ne Runde und dann gehts weiter :P
Nichtsdestotrotz, VIELEN DANK für das vorzeitige Weihnachtsgeschenk! :P
Schöne Grüße euer
Oxy
Super, freut mich das es funktioniert. :)
Wenn du das ganze per PDF als Ausgabe hin bekommst. Und dann noch mit einem schönen Template.
Daran wär ich auch interessiert! ;)
Mir fehlt hierfür leider gerade die Zeit um mich damit zu beschäftigen.
Ja wenn ich da etwas hin bekomme, hätte ich euch eh bescheid gegeben. Solange wie ich aber den Zugriff über HTTPS nich hin bekomme, brauch ich mich nich um en PDF Template kümmern.. :-/
Warum muss es eigentlich die .cer/.pem Datei der CA sein und nicht die Datei des ausgestellten Zertifikats für die Webseite?
Ich hatte jetzt mittlerweile auch mit der Konvertierung vom DER Format auf das PEM Format versucht, dass Zertifikatsproblem zu lösen, aber keine Chance. Wenn man nur wüsste, wie Fabian das geschafft hatte mit seiner CA :D
Ich hatte das Ganze jetzt nochmal mit dem self signed Zertifikat von der OPNsense probiert.
Diesem Default Zertifikat, was ja seine eigene CA ist. Hab meine Weboberfläche darauf umgestellt und dann versucht client.rb mit dem .cer wie auch als .pem zu starten aber keine Chance. Funktionierte auch nicht. :-/
Bei mir Läuft eine interne CA, welche das Zertifikat für die Webkonfiguration ausgestellt hat. Ich verwende das öffentliche CA-Zertifikat für den Client.
Hey Leute,
ich hab mich nochmal ordentlich hinter gesetzt und siehe da HTTPS funktioniert jetzt auch. 8)
Für alle die es vielleicht interessiert. Mein Fehler war, dass ich zum umkonvertieren der public Key .DER Datei Windoof mit openSSL-Win64 benutzt hatte und er mir zwar die Konvertierung immer durchführte aber "anscheinend nicht richtig".
Worauf man also achten muss:
1.) Internal-ca erstellen bei OPNsense (Create Internal Certificate Authority)
2.) Internes Zertifikat erstellen (Create Internal Certificate), (Type: Server Certificate), welches von der internal-ca unterschrieben wird.
3.) Webkonfigurations-Zertifikat mit dem Zertifikat ersetzen, welches man gerade erstellt hatte.
4.) Über den Internet Explorer oben links auf das Schloss-Symbol klicken > Details > View Certificate > Zertifizierungspfad > internal-ca öffnen und in Datei kopieren. > Public-Key/Öffentliches Zertifikat "DER-codiert-binär (.CER)" exportieren.
5.) Jetzt der Knackpunkt: Noch funktioniert es nicht, daher mithilfe von Unix (OpenSSL) oder "https://www.sslshopper.com/ssl-converter.html" dieses Zertifikat auf ein .PEM umwandeln und als .crt abspeichern.
6.) Client.rb Konfig ändern auf die .crt Datei.
7.) Starten > aufstehen Kaffee holen, denn "Cool Guys Don't Look At Explosions" 8) 8) ;)