Ein VPN-Client pingt den Dateiserver, löst seinen Namen auf und kann trotzdem keine Freigabe öffnen. Sambas Host-Richtlinie ist eine von vier Schichten, die diese Verbindung ablehnen können, und sie wird zuletzt bearbeitet. Die Positivliste wird gegen die Quelladresse geprüft, die smbd tatsächlich erhält, und das muss nicht die Adresse sein, die der Client zu haben glaubt. Wer diese Quelle richtig bestimmt, macht aus einem unklaren Berechtigungsproblem eine einzeilige Konfigurationsänderung.

Vier Schichten, die mit derselben Meldung scheitern

Eine Ablehnung kann von der Route, der Host-Firewall, der Samba-Host-Richtlinie oder der SMB-Identität kommen. Jede Schicht erzeugt beim Client eine Meldung, die ungefähr dasselbe sagt, weshalb Raten einen Nachmittag kostet. Wer die Prüfungen vom Netz nach innen ordnet, beseitigt den größten Teil der Raterei.

Beginne mit dem Transport. Wenn Port 445 den Server nie erreicht, spielt keine Samba-Einstellung eine Rolle, und ein Mitschnitt auf der Serverschnittstelle klärt das in Sekunden. Als Nächstes kommt die Host-Firewall auf dem Server selbst, die eine erlaubte Quelle verwerfen kann, bevor smbd sie überhaupt sieht. Erst wenn diese beiden Punkte passen, kommt die Positivliste als Kandidat in Frage. Die Authentifizierung steht am Ende, weil ein Anmeldefehler und eine Host-Ablehnung im Serverprotokoll verschieden aussehen, auch wenn der Client beides als Zugriff verweigert meldet. Die Reihenfolge ist wichtiger als die Werkzeuge, denn jede Schicht hat einen Befehl, der sie beantwortet.

Die Quelladresse finden, die smbd tatsächlich sieht

Bei geroutetem Zugriff sieht der Server normalerweise die Adresse des Clients aus dem VPN-Pool. Bei Quellübersetzung am Gateway sieht er stattdessen die LAN-Adresse des Gateways, und jeder Client hinter diesem Gateway wird ununterscheidbar.

Dieser Unterschied entscheidet, ob ein Eintrag in der Positivliste eine Richtlinie oder ein Loch ist. Eine übersetzte Gateway-Adresse zu erlauben, lässt jeden dahinter durch, was eine Regel pro Client selten ausdrücken sollte. Lies die Quelle am Server ab und nicht nach der Vorstellung des Clients von seiner eigenen Adresse. Ein Mitschnitt auf der Serverschnittstelle ist der billigste Weg, sie zu sehen, und derselbe Mitschnitt beweist, ob das Paket überhaupt ankam. Begrenze den Mitschnitt mit einer Paketanzahl und füge einen Hostfilter hinzu, sobald du weißt, welchem Client du folgst. Die Samba-Sitzungstabelle ist die andere Hälfte der Antwort: in smbstatus -b, ist die Client-Spalte jeder Sitzungszeile der Peer, den smbd aufgezeichnet hat, und damit die schnellste Bestätigung der Adresse, die den Dienst tatsächlich erreicht hat.

sudo tcpdump -ni any -c 20 'tcp port 445'
sudo smbstatus -b
ss -tnp | grep ':445'

Die Positivliste so lesen, wie Samba sie liest

Die Einstellung hosts allow nimmt eine Liste von Adressen, Netzen oder Namen und kann global oder innerhalb einer Freigabe stehen. Zwei Einträge, die dir gleichwertig erscheinen, müssen es für den Parser nicht sein, deshalb ist die wirksame Konfiguration das, was geprüft werden muss. Das bedeutet die zusammengeführte Sicht und nicht die Datei, die du zufällig bearbeitet hast.

Ein anschauliches Paar von Präfixen sieht aus wie die Zeile unten, und es ist ein Beispiel und kein Ersatz für die bereits vorhandenen Einträge. Behalte die administrativen und Anwendungs-Clients, die sich heute rechtmäßig verbinden, und lies jede Sperrliste im selben Durchgang. Ob ein Host zugelassen wird, hängt von der Richtlinie als Ganzem ab, teste also den genauen Client, statt über die Rangfolge zu spekulieren. Die Host-Berechtigung sagt auch nichts über Freigabeberechtigungen oder Dateisystemrechte, die eigene Schranken sind. Ein Erfolg der Testwerkzeuge bedeutet, dass die Host-Richtlinie diese Quelle zulässt, und nichts darüber hinaus.

hosts allow = 192.168.50.0/24 10.90.0.0/24
testparm -s
testparm -s /etc/samba/smb.conf client.example 10.90.0.14

Die Datei ändern, die einen Neustart übersteht

Auf einem normalen Linux-Host ist der Konfigurationspfad fest, und der Dienst liest ihn beim Neustart erneut. Auf einem Router oder einer Appliance wird die laufende smb.conf oft beim Booten erzeugt, und eine Handänderung verschwindet beim nächsten Neustart. Nutze den unterstützten Anpassungsmechanismus der Appliance, der meist eine eigene Konfigurationsdatei ist.

Die Versuchung an dieser Stelle ist, eine alternative Firmware zu flashen, weil ein Beitrag gemeldet hat, dass es funktioniert. Das ist eine große Änderung für ein kleines Richtlinienproblem, und es bringt das Gerät aus seinem unterstützten Zustand. Finde zuerst die unterstützte Steuerung, da die meisten Appliances die Positivliste über ihre eigene Oberfläche anbieten. Wenn sie das wirklich nicht tun, spricht diese Einschränkung für andere Hardware und nicht für einen nicht unterstützten Build.

Halte fest, welche Datei du geändert hast und was sie neu erzeugt, damit die nächste Person die Diagnose nicht wiederholt.

Einen erlaubten und einen ausgeschlossenen Client testen

Teste beide Ausgänge, nicht nur den gewünschten. Ein erlaubter Client, der sich verbindet, beweist, dass die Änderung wirkt; ein ausgeschlossener Client, der weiterhin abgewiesen wird, beweist, dass die Regel nicht einfach alles geöffnet hat.

smbclient -L //fileserver -U alice
sudo testparm -s /etc/samba/smb.conf alice-laptop 10.90.0.14
sudo tail -n 40 /var/log/samba/log.smbd

Wenn die Verbindung smbd nie erreicht, liegt die Antwort im Routing oder in der Server-Firewall. Ist der Host zugelassen und die Anmeldung scheitert, ist die Identität das Problem, und die Positivliste weiter zu öffnen hilft nicht. Halte Diagnoseausgaben privat, da ein ausführliches Samba-Protokoll Freigabepfade und Kontonamen offenlegen kann. Ändere pro Versuch eine Schicht, sonst sagt dir das nächste Ergebnis nichts.

Ähnliche Artikel