pfSense automatisieren mit pfSsh.php
By zefanja
pfSense hat seit einigen Versionen eine völlig überarbeitete Oberfläche. Damit lassen sich alle Einstellungen i.d.R. gut erreichen und einstellen. Das frei konfigurierbare Dashboard ist ebenfalls eine feine Sache. Trotz allem gibt es manchmal den Fall, dass man Einstellungen gern über eine API oder die Kommandozeile vornehmen möchte. pfSense hat aktuell keine API, diese soll erst in einer der kommenden Versionen integriert werden. Bis dahin kann man sich über die pfSense Entwickler-Shell behelfen, auch pfSsh.php genannt.
Auf pfSsh.php zugreifen
Am schnellsten kommt man in die Entwickler-Shell, wenn man sich per SSH mit pfSense verbindet oder direkt einen Bildschirm an die Firewall anschließt. Wenn SSH noch nicht aktiviert ist, kann man das in der Weboberfläche unter System → Advanced nachholen.
Besser ist es, wenn man das Einloggen mit Passwort verbietet und nur das Anmelden mit Zertifikat erlaubt.
Ist der SSH-Zugang aktivert, kann man sich nun mit dem Admin-Benutzer anmelden (IP anpassen):
$ ssh admin@192.168.1.254
Unter Punkt 12 findet man die Entwickler-Shell, die im Grunde eine PHP-Shell ist.
Beispielbefehle für pfSsh.php
Hier einige Beispielbefehle, die zeigen sollen, wie man die Shell verwenden kann. Jede Eingabe ist normaler PHP Code und muss mit exec;
abgeschlossen werden.
DHCP Einstellungen anzeigen
pfSense shell: print_r($config["dhcpd"]);
pfSense shell: exec;
Array
(
[lan] => Array
(
[range] => Array
(
[from] => 10.0.1.7
[to] => 10.0.255.245
)
)
)
Domain festlegen
pfSense shell: $config['system']['domain'] = 'mydomain.com';
pfSense shell: write_config();
pfSense shell: exec;
Shell – Befehle ausführen
Innerhalb der PHP Shell kann man auch normale Shell-Befehle ausführen, indem man ein „!“ davor setzt:
pfSense shell: ! cat /etc/version
pfSense shell: exec;
2.4.3-RELEASE
Befehle „aufnehmen“ und „abspielen“
Mit pfSsh.php kann man auch mehrere Befehle „aufnehmen“ und später „abspielen“. Diese sogenannten Sessions sind für wiederkehrende Aufgaben nützlich. Ein Beispiel:
pfSense shell: record echoTest
Recording of echoTest started.
pfSense shell: echo "Das\n";
pfSense shell: echo "ist\n";
pfSense shell: echo "ein\n";
pfSense shell: ! echo "Test\n"
pfSense shell: exec;
pfSense shell: stoprecording
Recording stopped.
Die Eingaben werden unter /etc/phpshellsessions/ gespeichert und können dort bei Bedarf verändert werden.
Die „Aufnahme“ kann man nun wie folgt wiedergeben:
pfSense shell: playback echoTest
Playback of file echoTest started.
Das
ist
ein
Test
pfSense shell:
oder auch direkt von der root-Shell mit:
$ pfSsh.php playback echoTest
Fazit
pfSsh.php ist ein nützliches Werkzeug, um pfSense mit Skripten zu automatisieren oder Anpassungen vorzunehmen. Gerade, wenn man mehrere Instanzen verwaltet oder ein bestimmtes Setup immer wieder braucht, ist pfSsh.php eine große Hilfe. Man kann z.B. alle Einstellung (sprich PHP-Code) in eine Datei packen, unter /etc/phpshellsessions/ speichern und dann ausführen oder direkt die Ausgabe an pfSsh.php weiterleiten:
$ ssh admin@192.168.1.254 '/usr/local/sbin/pfSsh.php' < MeineConfig.txt