Radius CaptivePortal Kullanıcı Hatırlama Modülü



  • Merhabalar ;

    Bir cafe'nin isteği doğrultusunda kullanıcılar birkere giriş yaptıktan sonra bir daha karşılama ekranı gelmesin otomatik authentication olmalarını istemişlerdi.

    Ben kendi sistemime göre çözdüm ama yerel kimlik doğrulama içinde birşeyler yapılabilir düşüncesindeyim veya CaptivePortal için kendi veritabanınızı kullanıyorsanız kullanıcılar giriş yaparken veya kayıt olurken mac adreslerini veritabanına yazdırarakta çözebilirsiniz.Bazı arkadaşlar PHP ile mac adresini nasil aldin sorunusunu yoneltecektir.Mac adresini PFSense kendisi ARP tablosunda bakıp clientmac değişkeni olarak index.php'de kullanmış bende onu kullanaraktan yola çıktım.(En azindan ben maci öyle aldığını düşünüyorum.)Yani aşağıdaki kodları kendinize göre düzenlerken clientmac değişkeni kafanızda soru işareti oluşturmasın.

    Ben Ghost üzerinde bu modülü kullandığım için giriş yaparken kullanıcıların mac adresini veritabanına yazdırma gereği duymadım çünkü, Freeradius mac adreslerini radacct tablosunda zaten tutuyor.

    Ayrıca bu modülü aktif ettikten sonra CaptivePortal veya Radius Bandwitdh limitlendirme çalışamayacaktır. (Testlerim en azından bunu gösterdi.)Eğer biraz daha karıştırıp çözebilirsem kodu güncellemeye çalışırım. Şimdilik farklı yöntemlerle bandwithleri kullanıcı bazlı değil de Network bazlı kısıtlayabilirsiniz.

    Shell'e Putty veya yardımcı SSH Client ile bağlanıp usr/local/captiveportal dizine gidin ve index.php dosyasının en altında ?> tagindan öncesine ekleyin.

    Dediğim gibi kodun calısabilmesi için bir veritabanı baglantısı yapmanız veya kullanıcılarının giriş yaptıktan sonra mac adreslerini biryere kaydettirmiş olmanız gerekiyor.

    
    /* Kullanici Hatirlama Modulu baslangic */
    
    include("Config.php"); // Db Bağlantısı
    
    $sor = mysql_fetch_array(mysql_query("SELECT * FROM radacct WHERE callingstationid='$clientmac'")); //Mac adresini aliyoruz.
    if($sor != '')   // mac varsa
    {
     $username = $sor['username']; //Mac adresine ait kullanici adini öğreniyoruz.
     $bul = mysql_fetch_array(mysql_query("SELECT * FROM radcheck WHERE username='$username' AND attribute='User-Password'"));
     //Eğer kullanici radcheck tablosunda varsa captiveportal_logportalauth bağlantısıyla sisteme otomatik giris yaptiriyoruz.
     $user2 = $bul['username'];
     if($user2 !='')  // eğer kullanici radcheck tablosunda varsa giris yap.
     {
    
     // Kullanıcımızı captiveportal ekranı gelmeden girisini tamamliyoruz.
    
     captiveportal_logportalauth($user2,$clientmac,$clientip,"Bir kahvenin kirk yil hatri olur dedi ve giris yapti.");
     portal_allow($clientip, $clientmac, $user2);
     exit;
     }
     else{}
     }
    
    else { }
    
    /* Kullanici Hatirlama Modulu bitis  */
    

    Ayrıca CaptivePortal'ın zaten giriş yaptıktan sonra Mac'i otomatik izinli maclere ekletebiliyoruz gibi muhabbetler olacaktır.Ama malesef buraya eklenen macler captiveportal üzerinde tanımlanan herşeyi es geçiyor ve hiçbir limitleme veya eğer bir report veya log alıyorsanız bunları almanız mümkün olmuyor. (Mac ve İp loglarından bahsetmiyorum.)



  • Teşekkür ederim Samet

    Belki konu ile alakali degil ama bir fikir alış verişinde bulunmak istiyorum.

    Malum https ile içerik filitreleme ile ilgili karşılaşılan sorun/problemler v.s. var. Squid3 ile https filtreleme yapilabiliyor fakat kullanici tarafinda SSL sertifikasi kullanilan sayfalara girilmek istenildiginde Squid3 pfsense in sertifikasini kullandigindan ve bu sertifika dogrulanmadigindan web tarayicilarinda sayfanin guvensiz olduguna dair uyari gelmekte. Mesela http://www.ihs.com.tr/ssl/viewSSLProduct.html adresinde 30 gunluk ucretsiz SSL sertifikasi veya 1 yillik SSL sertifikasi alinabilmekte fakat CSR kodu istemekte. http://www.netinternet.com.tr/panel/cart.php?a=confproduct&i=0 adresinde ise gecerli bir alan adi istemekte. Alinabilmesi mumkun olan bu sertifikayi pfsense tarafinda kullanabilir miyiz, bunun ile ilgili neler yapabiliriz. Konu hakkinda bilgisi olan arkadaslar goruslerini bildirebilir mi acaba.

    Saygilar.



  • bence o sorun kolay…

    pfsense ait sertifikayı tüm clientlara import ederseniz sorun çıkarmayacağını düşünüyorum

    pfsense sayfasındaki sertifikayı kendi pc nize import edip ssl sayfalara bağlanmayı denermisin ?

    sonuç olumlu olursa clientlara topluca sertifika kurma olayı kalsın.. AD varsa zaten kolay ama olmayanlar için bir fikir yürütelim



  • Açıkcası daha Squid3'e geçmedim geçmek istemedim.Şimdilik Squid2 ile devam ediyorum. Genel'de İçerik filtremeyle işim olmadığı için bu konuda cok fantezi yapma şansım olmadı.Ama sertifikaları Active Directory ile dağıtmak bir taraftan çözüm olsa da misafir ziyaretçileriniz için bu olay geçerli olmayacak. Yanlış hatırlamıyorsam non-transparent modda https filtreleme yapabiliyoruz.Proxy bilgisini wpad ve domain controller ile dağıtmak daha kolay olmaz mı ?



  • moderatör TechnicaL onunla uğraşmıştı

    bazı tarayıcılarda safari vb gibiler de wpad'e bakmadığını tespit etti. yani tarayıcıdan tarayıcıya değişiyor. bu da riskli bu sefer ya hep ya hiç oluyor. son durumu ne bilmiyorum uğraşma vakti olmadı sanırım.

    zaten misafirler için herhangi bir kısıtlama yapma ihtiyacım olmadı adı üstünde misafir ne zaman hangi siteye gireceği belli olmaz

    bandwith kısıtlamasından başka bir şey  yapma gereği duymadım.

    https filtrelemesi de yapmıyorum bu arada :)



  • @hoscakal:

    moderatör TechnicaL onunla uğraşmıştı

    bazı tarayıcılarda safari vb gibiler de wpad'e bakmadığını tespit etti. yani tarayıcıdan tarayıcıya değişiyor. bu da riskli bu sefer ya hep ya hiç oluyor. son durumu ne bilmiyorum uğraşma vakti olmadı sanırım.

    zaten misafirler için herhangi bir kısıtlama yapma ihtiyacım olmadı adı üstünde misafir ne zaman hangi siteye gireceği belli olmaz

    bandwith kısıtlamasından başka bir şey  yapma gereği duymadım.

    https filtrelemesi de yapmıyorum bu arada :)

    wpad yapılandırması ile şu an bulunduğum fabrikada sorunsuz https,http filtreleme yapıyorum (Not: MAC ve IPHONE yok) :)

    Malesef Safari tarayıcısı algılamıyor bu yapılandırmayı.



  • bende daha iyi birşey keşfettim

    qnap ts nas server var

    bunun içine squid kurulabiliyormuş :) 3.1.16.5 versiyonu hemde :)

    ve manuel olarak conf dosyasını editleyebiliyorsun. pfsense de editliyorsun ama apply yapınca yazdığın herşey gidiyor…

    ama transparent var mı bilmiyorum. biraz daha inceleyeceğim eğer transparet mod var ve conf dosyasını editleyebileceksem harika bir iş olacak :)



  • Yalnız konuyu fena kaynattiniz he : )) İpuçları diye bir başlık açıp pfSense hakkında herkes ipucu paylaşsa nasıl olur ? İpuçlarını moderatore göndeririz oda konu içine ekler.Bir başlıkta ta ipuçları diye toplariz bunlari ?



  • Merhaba,

    aşağıdaki kodları silip echo ile username vs. doğrumu diye ekrana verebiliyorum. Herşey doğru , fakat hata alıyorum. kodlar ve hata aşağıdaki gibidir.

    $user2 = $bul['username'];
    if($user2 !='') 
    {
    captiveportal_logportalauth($user2,$clientmac,$clientip,"ACCEPT");
    portal_allow($clientip, $clientmac, $user2);

    }
    else{
    }
    }

    else { }

    ?>

    Gelen hata : Warning: Cannot modify header information - headers already sent by (output started at /etc/inc/captiveportal.inc:1724) in /etc/inc/captiveportal.inc on line 1686



  • Sorun benden kaynaklanıyormuş.
    Kodu ekledikten sonra wifi yi kapatıp. Kullanıcıyı cp aktif kullanıcılardan silip tekrar wifi yi açınca direk sisteme eriştim.

    Teşekkürler..

    Bu arada konu kaynamış fakat çok yararlı birşey bence. Çünkü Sistemi restart edince her seferinde kullanıcılar yeniden girmek için uğraşıyordu.



  • Merhaba,

    Sayende yeni şeyler de öğreniyorum. Ben kodu biraz daha değiştirdim. Belki bu şekilde bandwith sorunları felanda olmayabilir(Bu özellikleri kullanmadığım için birşey diyemeyeceğim).
    Yaptığım değişiklik gelen kullanıcı adı ve şifreyi textlere yazdırıp butonu çalıştırmak.

    Böylece sanki kullanıcı bilgilerini kendisi girmiş gibi sisteme girecektir.

    include("Config.php");
    $sor = mysql_fetch_array(mysql_query("SELECT * FROM radacct WHERE callingstationid='$clientmac'"));
    if($sor != '')
    {
    $username = $sor['username'];
    $bul = mysql_fetch_array(mysql_query("SELECT * FROM radcheck WHERE username='$username' AND attribute='User-Password'"));

    $user2 = $bul['username'];
    if($user2 !='')
    {
    $siffre = $bul['sifre'];

    echo "

    ";
    }

    }