
Es ist bekannt, dass die Autorisierung von Teilnehmern, die das RADIUS-Protokoll im Netz des Betreibers verwenden, viele Möglichkeiten bietet - dies sind Tarife, die den Datenverkehr berücksichtigen, die Möglichkeit, die Autorisierung beim Zugriff auf das Netzwerk zu organisieren, Hotspot in Wi-Fi-Netzwerken und eine Vielzahl anderer Dinge, die ohne RADIUS nur schwer zu implementieren sind.
Oft verwenden Bediener RADIUS nur, weil sie andere Autorisierungsmethoden einfach nicht kennen oder nicht das Risiko haben, etwas anderes als das gemeinsame Protokoll zu verwenden. In solchen Fällen werden alle Vorteile von RADIUS aufgrund der komplexen Methoden der Serverreservierung oder ihrer Abwesenheit zunichte gemacht. Eine unerwartete Unterbrechung der Abrechnung führt zu einer Trennung des Internets von den Teilnehmern während des ordnungsgemäßen Betriebs der Netzwerkgeräte.
Daher möchte ich darüber sprechen, wie der Telekommunikationsbetreiber eine Autorisierung über das RADIUS-Protokoll auf Routern mit dem Betriebssystem RouterOS (MikroTik) vermeiden kann. Wir werden LanBilling 2.0 als Abrechnungssystem verwenden, bei dem die Unterstützung für Ereignisse zum Aktivieren, Deaktivieren, Bearbeiten, Erstellen und Löschen von Abonnenten implementiert ist. Jedes System mit einem ähnlichen Ereignismechanismus ist für diese Rolle mit Verbesserungen geeignet.
Die Interaktion mit RouterOS erfolgt über die API. Zunächst müssen Sie auf dem Router einen dedizierten Benutzer erstellen, der die Fernsteuerung ausführt.
Die Zugangsdaten lauten wie folgt:
Login: api
Passwort: api
Zugriff nur vom Abrechnungsserver: 192.0.2.2

Der nächste Schritt besteht darin, die Firewall zu konfigurieren, die einen wesentlichen Teil der Arbeit zum Blockieren von Abonnenten und zur Weiterleitung erledigt. Dazu müssen alle Abonnenten die Verwendung ausgewählter Ressourcen (externer DNS-Server, Unternehmenswebsite) zulassen.
# Voller Zugriff auf ausgewählte Ressourcen
/ ip Firewall Filter add chain = forward \
dst-address-list = zulässige Ziele \
out-interface = ether-wan
Weiterhin verwenden wir Adressliste zulässige Ziele. Bei Bedarf werden Adressen hinzugefügt, und die Regeln der Firewall bleiben unverändert.
Als Nächstes müssen Sie Abonnenten erlauben, Ressourcen zu besuchen, um für Dienste zu bezahlen. Der unten beschriebene Mechanismus bietet Abonnenten Zugriff auf alle für die Zahlung erforderlichen Ressourcen.
# Blockieren beliebter Ressourcen, die für die Zahlung nicht erforderlich sind
/ ip firewall layer7-protocol add name = soziale Netzwerke \
regexp = vk.com | mail.ru | ok.ru.
# Wir überspringen Abonnenten bei der Zahlung an https-Ressourcen
/ ip Firewall Filter add chain = forward \
dst-port = 443 \
Layer7-Protokoll =! soziale Netzwerke \
out-interface = ether-wan \
protocol = tcp \
src-Adressliste = Zahlerliste
Als nächstes blockieren wir den Zugang zum Internet für diejenigen, die den Dienst nicht bezahlt haben. Zum Zeitpunkt der Sperrung fügt die Abrechnung die IP des Teilnehmers der blockierten Adressliste hinzu.
# Säumige blockieren
/ ip Firewall Filter Aktion hinzufügen = Kette ablehnen = Weiterleiten \
out-interface = ether-wan \
ablehnen-mit = icmp-admin-verboten \
src-address-list = blockiertKonfigurieren Sie als Nächstes NAT. Dies ist erforderlich, um Abonnenten auf eine Seite mit einer Benachrichtigung über das Sperren und Senden von Adressen von Abonnenten für den Zugriff auf das Internet umzuleiten.
# Wir senden alle grauen Adressen
/ ip firewall nat add action = gleiche Kette = srcnat \
out-interface = ether-wan same-not-by-dst = yes \
src-address-list = nat-all-abonents \
an-Adressen = 203.0.113.0 / 26
# Leiten Sie nicht zum Betteln derjenigen weiter, die sich im Zahlungsprozess befinden
/ ip firewall nat add action = accept chain = dstnat \
src-Adressliste = Zahlerliste
# Alle anderen an den Bettler (192.0.2.3) weiterleiten
# Nichtzahler, nicht zu vergessen ausgewählte Ressourcen
/ ip firewall nat add action = dst-nat chain = dstnat \
dst-address-list =! permited-destinations \
protocol = tcp src-address-list = blockiert \
to-address = 192.0.2.3 to-ports = 80Die oben in der Weiterleitungskette aufgeführten Regeln reichen aus, um einen Internetzugang bereitzustellen. Um den Zugriff auf den Router einzuschränken und zusätzliche Sicherheit zu bieten, können Sie der Eingabekette mehrere Regeln hinzufügen
Nach diesen Manipulationen kann der Router ohne Hilfe von RADIUS die Grundfunktionen für den Zugriff auf Teilnehmer des Netzwerks ausführen. Die Tarifgeschwindigkeit ist in der Warteschlange begrenzt. Nichtzahler werden automatisch blockiert und ihre Anfragen werden an die Erinnerungsseite weitergeleitet. Gleichzeitig haben die Schuldner weiterhin Zugang zu externen ausgewählten Ressourcen (Zahlungsdienste).
Wir bereiten die Abrechnung vor
Zur Vorbereitung der Abrechnung müssen Skripte für die Verarbeitung von Ereignissen geschrieben werden, um das Konto des Abonnenten zu aktivieren, zu deaktivieren, zu erstellen, zu löschen und zu bearbeiten. Wir werden Lanbilling als Beispiel verwenden.

Darüber hinaus müssen Sie sicherstellen, dass der LBarcd-Agent für die Konten verantwortlich ist.

Zunächst zeigen wir die Abrechnung, welche Skripte und für welche Ereignisse wir verwenden werden. Dies erfolgt durch Ändern der Parameter in der Datei /etc/billing.conf.LBarcd.
Jedes Skript wird mit einem bestimmten Satz von Parametern aufgerufen. Für jedes Skript ist der Satz derselbe:
Login (Benutzername im Konto)
Passwort (Benutzerpasswort im Konto)
Segment (Konto-IP-Adresse)
Netzmaske (Maske für die IP-Adresse in Punkt-Dezimal-Notation. Beispiel: 255.255.255.255)
Tariflimit (Der Tarif für dieses Konto in Kilobit. Beispiel: 10240)Die Konfigurationsdatei für das Agentenereignis kann aus dem Repository auf github heruntergeladen werden.
Jedes Ereignisverarbeitungsskript enthält eine Funktionsbibliothek, die wiederum eine PHP-Klasse verwendet, um mit RouterOS über die API zu arbeiten. Der Quellcode für jedes Skript, jede Funktionsbibliothek und jede API-Klasse ist im Github-Repository verfügbar.
Nach Änderungen am Konfigurationssystem ist das System betriebsbereit. Abonnenten mit einem positiven Kontostand nutzen den Dienst ruhig, und Nichtzahler können nur das lokale Netzwerk und die zulässigen Websites nutzen.
Es kommt häufig vor, dass der Betreiber in der Lage sein muss, dem Teilnehmer eine automatisierte vorübergehende Einbeziehung des Zugriffs bereitzustellen oder die Liste der zulässigen Ressourcen mit IPs aller bekannten Zahlungssysteme zu füllen.
Hierzu wird im Quellcode des persönlichen Kontos des Abonnenten eine kleine Änderung vorgenommen. Andere Funktionen sind bereits konfiguriert - Adressliste Zahlerliste auf MikroTik und eine zusätzliche Funktion allow_payment in der Bibliothek functions.php.
In unserem Fall werden Zahlungen mit Yandex.Checkout akzeptiert. Dies bedeutet, dass wir die Datei bearbeiten
/usr/local/billing/phpclient/client2/client/components/payment/yandex/Payment_Yandex_Pay.php zur Verarbeitungsmethode für das Klicken auf die Schaltfläche "Bezahlen" im persönlichen Konto des Benutzers.

Sie müssen eine Zeile einfügen
file_get_contents ("
billing.example.com/tmp_access.php?ip= ". $ _SERVER ["REMOTE_ADDR"]);
vor der Linie
$ this-> post ($ params, $ this-> conf ("operatorURL"));
Dabei ist
billing.example.com die
Adresse der administrativen Webschnittstelle von
Lanbilling .
Daher senden wir bei der Abrechnung eine GET-Anfrage an unser Skript und übertragen als Parameter die IP-Adresse des Kunden, der sich in seinem persönlichen Konto befindet, und klicken auf die Schaltfläche "Bezahlen". Der Inhalt des Skripts tmp_access.php kann auf github angezeigt und heruntergeladen werden. Das Remote-Skript fügt die IP-Adresse des Abonnenten mit einer Zeitüberschreitung von 20 Minuten zur Zahlerliste hinzu. Danach geht der Abonnent ohne Probleme zur Zahlung auf eine beliebige Seite.
Wenn der Teilnehmer über das mobile Internet eintritt, fällt die „linke“ Adresse des Mobilfunknetzes in die Liste, die nach 20 Minuten automatisch gelöscht wird. Wenn der Teilnehmer von der Adresse des lokalen Netzes des Betreibers kommt, funktioniert das System wie vorgeschrieben. Tatsächlich kann dasselbe Skript auf der Zahlungswarnseite eingefügt werden, auf der das Feld zur Eingabe der Vertragsnummer, des Zahlungsbetrags und der Schaltfläche "Bezahlen" platziert ist.
Man kann mit dem oben Gesagten argumentieren, aber es lohnt sich zu berücksichtigen, dass diese Lösung nicht für große Netzwerke geeignet ist. Eigentlich wie MikroTik mit RouterOS. Wenn Ihr Netzwerk nicht mehr als 3.000 Teilnehmer hat, ist diese Methode am besten geeignet.
Vorbereitet von
Artyom Deulin