
Diketahui bahwa otorisasi pelanggan yang menggunakan protokol RADIUS di jaringan operator memberikan banyak peluang - ini adalah tarif yang memperhitungkan lalu lintas akun, kemampuan untuk mengatur otorisasi saat mengakses jaringan, Hotspot di jaringan Wi-Fi dan sejumlah besar hal lain yang sulit diterapkan tanpa RADIUS.
Seringkali, operator menggunakan RADIUS hanya karena mereka tidak mengetahui metode otorisasi lain atau tidak berisiko menggunakan apa pun selain protokol umum. Dalam kasus tersebut, semua keuntungan RADIUS menjadi sia-sia karena metode reservasi server yang kompleks atau ketidakhadiran mereka. Putusnya penagihan yang tak terduga menyebabkan terputusnya Internet dari pelanggan selama pengoperasian peralatan jaringan yang benar.
Oleh karena itu, saya ingin berbicara tentang bagaimana operator telekomunikasi dapat menghindari otorisasi melalui protokol RADIUS pada router dengan sistem operasi RouterOS (MikroTik). Kami akan menggunakan LanBilling 2.0 sebagai sistem penagihan, di mana dukungan untuk acara mengaktifkan, menonaktifkan, mengedit, membuat dan menghapus pelanggan diimplementasikan. Sistem apa pun dengan mekanisme acara serupa cocok untuk peran ini dengan peningkatan.
Interaksi dengan RouterOS terjadi melalui API. Pertama-tama, Anda perlu membuat pengguna khusus di router, yang akan melakukan remote control.
Detail akses adalah sebagai berikut:
Login: api
Kata sandi: api
Akses hanya dari server penagihan: 192.0.2.2

Langkah selanjutnya adalah mengkonfigurasi firewall, yang akan melakukan bagian penting dari pekerjaan memblokir pelanggan dan meneruskan. Untuk ini, perlu untuk memungkinkan semua pelanggan untuk menggunakan sumber daya yang dipilih (server DNS eksternal, situs web perusahaan).
# Akses penuh ke sumber daya yang dipilih
/ ip firewall filter tambahkan rantai = maju \
dst-address-list = tujuan yang diijinkan \
out-interface = ether-wan
Selanjutnya kami menggunakan alamat-daftar tujuan yang diizinkan. Jika perlu, alamat akan ditambahkan ke sana, dan aturan firewall akan tetap sama.
Selanjutnya, Anda harus mengizinkan pelanggan untuk mengunjungi sumber daya untuk membayar layanan. Mekanisme yang dijelaskan di bawah ini akan memberi pelanggan akses ke semua sumber daya yang dibutuhkan untuk pembayaran.
# Memblokir sumber daya populer yang tidak perlu untuk pembayaran
/ ip firewall layer7-protocol add name = social-networks \
regexp = vk.com | mail.ru | ok.ru
# Kami melewatkan pelanggan dalam proses pembayaran ke https-sumber daya
/ ip firewall filter tambahkan rantai = maju \
dst-port = 443 \
layer7-protocol =! jejaring sosial \
out-interface = ether-wan \
protokol = tcp \
src-address-list = daftar pembayar
Selanjutnya, kami memblokir akses ke Internet bagi mereka yang belum membayar layanan. Pada saat pemblokiran, tagihan menambahkan IP pelanggan ke daftar alamat yang diblokir.
# Memblokir defaulter
/ ip filter firewall tambahkan tindakan = tolak rantai = maju \
out-interface = ether-wan \
tolak-dengan = icmp-admin-terlarang \
src-address-list = diblokirSelanjutnya, konfigurasikan NAT. Hal ini diperlukan untuk mengarahkan pelanggan ke halaman dengan pemberitahuan tentang memblokir dan menyiarkan alamat pelanggan untuk mengakses Internet.
# Kami menyiarkan semua alamat abu-abu
/ ip firewall nat add action = rantai yang sama = srcnat \
out-interface = ether-wan same-not-by-dst = yes \
src-address-list = nat-all-abonents \
ke-alamat = 203.0.113.0 / 26
# Jangan mengarahkan ulang untuk memohon orang-orang yang sedang dalam proses pembayaran
/ ip firewall nat add action = accept chain = dstnat \
src-address-list = daftar pembayar
# Teruskan ke pengemis (192.0.2.3) dan yang lainnya
# bukan-pembayar, tidak melupakan sumber daya yang dipilih
/ ip firewall nat add action = dst-nat chain = dstnat \
dst-address-list =! izin-tujuan \
protokol = tcp src-address-list = diblokir \
ke-alamat = 192.0.2.3 ke-port = 80Aturan yang tercantum di atas dalam rantai maju sudah cukup untuk menyediakan akses Internet. Untuk membatasi akses ke router dan memberikan keamanan tambahan, Anda dapat menambahkan beberapa aturan ke rantai input
Setelah manipulasi ini, router dapat melakukan fungsi dasar mengakses pelanggan ke jaringan tanpa bantuan RADIUS. Kecepatan tarif dibatasi pada / penawaran antrian penagihan sederhana dengan ini. Non-pembayar diblokir secara otomatis, dan permintaan mereka dialihkan ke situs pengingat. Pada saat yang sama, debitur masih memiliki akses ke sumber daya terpilih eksternal (layanan pembayaran).
Kami menyiapkan tagihan
Persiapan penagihan melibatkan penulisan skrip untuk memproses acara yang memungkinkan, menonaktifkan, membuat, menghapus, dan mengedit akun pelanggan. Kami akan menggunakan Lanbilling sebagai contoh.

Selain itu, Anda perlu memastikan bahwa agen LBarcd yang bertanggung jawab atas akun.

Pertama-tama, kami menunjukkan tagihan skrip mana dan untuk acara apa kami akan gunakan. Ini dilakukan dengan mengubah parameter dalam file /etc/billing.conf.LBarcd.
Setiap skrip dipanggil dengan set parameter tertentu, untuk setiap skrip set sama:
login (nama pengguna dalam akun)
kata sandi (kata sandi pengguna di akun)
segmen (alamat IP akun)
netmask (Mask untuk alamat IP dalam notasi dot-desimal. Misalnya, 255.255.255.255)
batas nilai (Nilai tukar untuk akun ini dalam Kilobit. Misalnya, 10240)File konfigurasi event agen dapat diunduh dari repositori di github.
Setiap skrip pemrosesan acara menyertakan pustaka fungsi, yang pada gilirannya menggunakan kelas PHP untuk bekerja dengan RouterOS melalui API. Kode sumber untuk setiap skrip, pustaka fungsi, dan kelas API tersedia di repositori github.
Setelah melakukan perubahan pada sistem "config" siap untuk bekerja. Pelanggan yang memiliki saldo positif dalam akun dengan tenang menggunakan layanan ini, dan non-pembayar hanya dapat menggunakan jaringan lokal dan situs yang diizinkan.
Sering terjadi bahwa operator harus dapat memberikan akses otomatis sementara kepada pelanggan, atau mengisi daftar sumber daya yang diizinkan dengan IP dari semua sistem pembayaran yang diketahui.
Untuk ini, edit kecil dilakukan pada kode sumber di akun pribadi pelanggan. Fungsi-fungsi lain sudah dikonfigurasikan - list-list payers-list pada MikroTik dan fungsi tambahan allow_payment di library functions.php.
Dalam kasus kami, pembayaran diterima menggunakan Yandex.Checkout, yang berarti kami akan mengedit file
/usr/local/billing/phpclient/client2/client/components/payment/yandex/Payment_Yandex_Pay.php ke metode pemrosesan untuk mengklik tombol "Bayar" di akun pribadi pengguna.

Anda harus memasukkan satu baris
file_get_contents ("
billing.example.com/tmp_access.php?ip= ". $ _SERVER ["REMOTE_ADDR"]);
sebelum garis
$ this-> post ($ params, $ this-> conf ("operatorURL"));
di mana
billing.example.com adalah alamat antarmuka web administrasi
Lanbilling .
Karenanya, kami mengirim permintaan GET ke skrip kami tentang penagihan, dan sebagai parameter kami mentransfer alamat IP klien, yang ada di akun pribadinya dan mengklik tombol "Bayar". Isi skrip tmp_access.php dapat dilihat dan diunduh di github. Skrip jarak jauh menambahkan alamat IP pelanggan ke daftar pembayar dengan batas waktu 20 menit, setelah itu pelanggan tanpa masalah pergi ke halaman mana pun untuk pembayaran.
Jika pelanggan masuk melalui Internet seluler, maka alamat "kiri" jaringan seluler masuk ke dalam daftar, yang akan dihapus secara otomatis setelah 20 menit. Jika pelanggan berasal dari alamat jaringan lokal operator, maka sistem akan bekerja seperti yang ditentukan. Sebenarnya, skrip yang sama dapat dimasukkan pada halaman peringatan pembayaran, di mana bidang untuk memasukkan nomor kontrak, jumlah pembayaran dan tombol "Bayar" ditempatkan.
Orang dapat berdebat dengan hal di atas, tetapi perlu mempertimbangkan fakta bahwa solusi ini bukan untuk jaringan besar. Sebenarnya, seperti MikroTik dengan RouterOS. Jika jaringan Anda memiliki tidak lebih dari 3 ribu pelanggan, maka metode ini akan paling cocok.
Disiapkan oleh
Artyom Deulin